在将maplist与lambda和tilde项一起使用时,为什么存在无限循环?

格热哥兹·亚当·科瓦尔斯基

我有几个谓词使用lambda来做同样的事情,即来自func的tilde术语(包括lambda和func),最后使用lambda或func都不使用“ pure Prolog”:

:- use_module(library(lambda)).
:- use_module(library(func)).

both_lambda_and_func :-
    maplist(\X^(print(length(X,~))), [`one`,`two`,`three`]).

lambda_only :-
    maplist(\X^(length(X,Len),print(Len)), [`one`,`two`,`three`]).

func_only :-
    maplist(func_only_helper, [`one`,`two`,`three`]).
func_only_helper(X) :-
    print(length(X,~)).

normal_prolog :-
    maplist(normal_prolog_helper, [`one`,`two`,`three`]).
normal_prolog_helper(X) :-
    length(X,Len),
    print(Len).

所有谓词都应打印335(列表中字符串的长度),并且其中三个可以正确执行。问题是both_lambda_and_func/0什么都不打印,似乎进入了无限循环。我已尝试解决trace/0该问题,但对我来说似乎太复杂了。您能告诉我是否做错了吗,或者这是一个奇怪的错误?我正在使用SWI-Prolog 7.1.14,func 0.0.4,lambda 1.0.0。

头发C.
?- listing(both_lambda_and_func).
both_lambda_and_func :-
    length(A, B),
    maplist(\A^print(B),
        [[111, 110, 101], [116, 119, 111], [116, 104, 114, 101, 101]]).

在错误的上下文中不可能盲目地重写〜术语的范围。该程序不会终止,因为length / 2都释放了两个参数,然后生成了更长的列表。

[trace] 4 ?- both_lambda_and_func.
   Call: (6) both_lambda_and_func
   Call: (7) length(_G1485, _G1486)
   Exit: (7) length([], 0)
^  Call: (7) apply:maplist(\[]^print(0), [[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]])
   Call: (8) apply:maplist_([[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]], user: \[]^print(0))
^  Call: (9) lambda: \([]^print(0), [111, 110, 101])
   Call: (10) copy_term_nat(user:[]^print(0), _G1541)
   Exit: (10) copy_term_nat(user:[]^print(0), user:[]^print(0))
^  Call: (10) lambda: ^([], print(0), [111, 110, 101])
^  Fail: (10) lambda: ^([], user:print(0), [111, 110, 101])
^  Fail: (9) lambda: \(user:[]^print(0), [111, 110, 101])
   Fail: (8) apply:maplist_([[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]], user: \[]^print(0))
^  Fail: (7) apply:maplist(user: \[]^print(0), [[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]])
   Redo: (7) length(_G1485, _G1486)
   Exit: (7) length([_G1478], 1)
^  Call: (7) apply:maplist(\[_G1478]^print(1), [[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]])
   Call: (8) apply:maplist_([[111, 110, 101], [116, 119, 111], [116, 104, 114, 101|...]], user: \[_G1478]^print(1))
^  Call: (9) lambda: \([_G1478]^print(1), [111, 110, 101])
   Call: (10) copy_term_nat(user:[_G1478]^print(1), _G1547)
   Exit: (10) copy_term_nat(user:[_G1478]^print(1), user:[_G1546]^print(1))
^  Call: (10) lambda: ^([_G1546], print(1), [111, 110, 101])
^  Fail: (10) lambda: ^([_G1546], user:print(1), [111, 110, 101])
...

致电^出错

^  Fail: (10) lambda: ^([], user:print(0), [111, 110, 101])

因为X已经实例化到[],而应该是免费的...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在将Pipework与Docker容器一起使用时,为什么我无法进行RTNETLINK操作?

来自分类Dev

将Converter与@Param一起使用时,为什么我的@ Inject'ed字段为空?

来自分类Dev

像本例一样一起使用时,.each和$(this)的普通Javascript等效项是什么?

来自分类Dev

当我将POSTMAN与x-www-urlencoded一起使用时,Jersey总是产生状态415!为什么?

来自分类Dev

将XMLAGG与关联数组一起使用时,为什么会达到极限?

来自分类Dev

在Rails 4.1中将RSpec 3.0与Capybara 2.3一起使用时,为什么会出现错误?

来自分类Dev

在Symfony2中将VichUploader与KnpGaufrette和Doctrine一起使用时的循环参考

来自分类Dev

为什么将std :: bind与lambda一起使用时会产生如此大的对象?

来自分类Dev

为什么在与using和async-await一起使用时,Enumerator.MoveNext无法按预期工作?

来自分类Dev

与数组索引中的$ b ++一起使用时,PHP为什么对$ b和$ b = $ b求值的方式不同

来自分类Dev

如何将“ for”循环和“ if”循环一起使用以验证xml文档中xml元素的存在

来自分类Dev

为什么在将event.preventDefault()与访存api,express和node.js一起使用时,req.body为什么返回null?

来自分类Dev

将next.js与环境变量一起使用时,为什么我的API密钥可见?

来自分类Dev

如何将maplist和[..] >>与接地变量一起使用?

来自分类Dev

将TexInput组件与道具一起使用时,为什么不能连续输入文本

来自分类Dev

在将dropdownButton与selectedItemBuilder和hint一起使用时,为什么在Flutter中出现类型错误?

来自分类Dev

为什么将Javascript RegExp测试函数与标志一起使用时每次都会给出不同的结果?

来自分类Dev

将useState与[]和不与之一起使用,以及与{}一起使用时的区别

来自分类Dev

为什么不将反引号与for循环一起使用

来自分类Dev

当我将POSTMAN与x-www-urlencoded一起使用时,Jersey总是产生状态415!为什么?

来自分类Dev

在Java 8中将lambda与旧的收集类一起使用时避免使用.stream()和.collect()

来自分类Dev

当我将FragmentPagerAdapter和ViewPager一起使用时,为什么在活动中看到两个工具栏?

来自分类Dev

如何将“ for”循环和“ if”循环一起使用以验证xml文档中xml元素的存在

来自分类Dev

在将INotifyPropertyChanged与包含复选框的WPF树视图一起使用时,防止无限循环

来自分类Dev

在将VPN拆分隧道与OpenConnect一起使用时,Windows为什么偏爱IPv4?

来自分类Dev

当将片段事务与FrameLayout一起使用时,为什么片段调用OnCreate / OnCreateView?

来自分类Dev

为什么将SparkSql与Hive一起使用时找不到此表错误?

来自分类Dev

当我将 cbind 与来自 gsub 函数的对象一起使用时,为什么所有值都被引用?

来自分类Dev

将 EvtQuery 与 winapi crate 一起使用时,为什么会出现 ERROR_INVALID_PARAMETER?

Related 相关文章

  1. 1

    在将Pipework与Docker容器一起使用时,为什么我无法进行RTNETLINK操作?

  2. 2

    将Converter与@Param一起使用时,为什么我的@ Inject'ed字段为空?

  3. 3

    像本例一样一起使用时,.each和$(this)的普通Javascript等效项是什么?

  4. 4

    当我将POSTMAN与x-www-urlencoded一起使用时,Jersey总是产生状态415!为什么?

  5. 5

    将XMLAGG与关联数组一起使用时,为什么会达到极限?

  6. 6

    在Rails 4.1中将RSpec 3.0与Capybara 2.3一起使用时,为什么会出现错误?

  7. 7

    在Symfony2中将VichUploader与KnpGaufrette和Doctrine一起使用时的循环参考

  8. 8

    为什么将std :: bind与lambda一起使用时会产生如此大的对象?

  9. 9

    为什么在与using和async-await一起使用时,Enumerator.MoveNext无法按预期工作?

  10. 10

    与数组索引中的$ b ++一起使用时,PHP为什么对$ b和$ b = $ b求值的方式不同

  11. 11

    如何将“ for”循环和“ if”循环一起使用以验证xml文档中xml元素的存在

  12. 12

    为什么在将event.preventDefault()与访存api,express和node.js一起使用时,req.body为什么返回null?

  13. 13

    将next.js与环境变量一起使用时,为什么我的API密钥可见?

  14. 14

    如何将maplist和[..] >>与接地变量一起使用?

  15. 15

    将TexInput组件与道具一起使用时,为什么不能连续输入文本

  16. 16

    在将dropdownButton与selectedItemBuilder和hint一起使用时,为什么在Flutter中出现类型错误?

  17. 17

    为什么将Javascript RegExp测试函数与标志一起使用时每次都会给出不同的结果?

  18. 18

    将useState与[]和不与之一起使用,以及与{}一起使用时的区别

  19. 19

    为什么不将反引号与for循环一起使用

  20. 20

    当我将POSTMAN与x-www-urlencoded一起使用时,Jersey总是产生状态415!为什么?

  21. 21

    在Java 8中将lambda与旧的收集类一起使用时避免使用.stream()和.collect()

  22. 22

    当我将FragmentPagerAdapter和ViewPager一起使用时,为什么在活动中看到两个工具栏?

  23. 23

    如何将“ for”循环和“ if”循环一起使用以验证xml文档中xml元素的存在

  24. 24

    在将INotifyPropertyChanged与包含复选框的WPF树视图一起使用时,防止无限循环

  25. 25

    在将VPN拆分隧道与OpenConnect一起使用时,Windows为什么偏爱IPv4?

  26. 26

    当将片段事务与FrameLayout一起使用时,为什么片段调用OnCreate / OnCreateView?

  27. 27

    为什么将SparkSql与Hive一起使用时找不到此表错误?

  28. 28

    当我将 cbind 与来自 gsub 函数的对象一起使用时,为什么所有值都被引用?

  29. 29

    将 EvtQuery 与 winapi crate 一起使用时,为什么会出现 ERROR_INVALID_PARAMETER?

热门标签

归档