相关疑难解决方法(0)

Prolog - 计算数字的出现次数

我想写谓词,它可以计算所有遇到的数字:

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

3
推荐指数
1
解决办法
1530
查看次数

SWI-Prolog:Sum-List

我是从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)

list prolog

2
推荐指数
1
解决办法
3456
查看次数

标签 统计

prolog ×2

list ×1