我想写谓词,它可以计算所有遇到的数字:
count(1, [1,0,0,1,0], X).
X = 2.
Run Code Online (Sandbox Code Playgroud)
我试着把它写成:
count(_, [], 0).
count(Num, [H|T], X) :- count(Num, T, X1), Num = H, X is X1 + 1.
Run Code Online (Sandbox Code Playgroud)
为什么不工作呢?
我是从Prolog开始的,我有点困惑......
我有一个简单的程序:
sum(0, []).
sum(Total, [Head|Tail]) :- sum(Sum, Tail), Total is Head + Sum.
Run Code Online (Sandbox Code Playgroud)
当我调试时,我可以看到Prolog首先使用Head和Tail分割列表,因此结果是0 +空列表,并且它开始对数字求和并将其再次添加到列表中.
有人可以解释为什么它不会先到Total is Head + Sum.
然后再将列表拆分为Head and Tail吗?
编辑:这是跟踪:
[trace] ?- sum(X, [1,2,3]).
Call: (6) sum(_G345, [1, 2, 3]) ? creep
Call: (7) sum(_G424, [2, 3]) ? creep
Call: (8) sum(_G424, [3]) ? creep
Call: (9) sum(_G424, []) ? creep
Exit: (9) sum(0, []) ? creep
Call: (9) _G430 is 3+0 ? creep
Exit: (9) 3 is 3+0 ? creep
Exit: (8) sum(3, …Run Code Online (Sandbox Code Playgroud)