我的谓词如下
dur(a,1).
dur(b,2).
dur(c,3).
dur(d,4).
假设我想添加列表[a,b,c]的元素,所以sum = 6。 如何访问与变量关联的值?
因为这样的事情
len([],0).
len([H|T], Sum) :-
len(T, Rest),
Sum is H + Rest.
不起作用,它适用于[1,2,3],但根本不适用于[a,b,c]这是有道理的,但我不知道如何让它适用于列表LEN([A,b,C],和)。
答案 0 :(得分:1)
如何访问与变量关联的值?
你必须加入'深入循环,实际计算发生的地方
len([],0).
len([H|T], Sum) :-
dur(H, V), % 'hardcoded' join
Sum is V + Rest.
len(T, Rest),
现在真正的问题很明显。
由于连接是Prolog中的一个基本操作 - 实际上,它确实很少 - 因此很难编写 - 因此重用 - 算法真正独立于命名数据
通常'二阶'编程可以帮助,按摩数据以适应更通用的上下文。像
len(Keys, Len) :- maplist(dur, Keys, Nums), sum_list(Nums, Len).
SWI-Prolog从库(apply)自动加载maplist / 3,其他一些Prolog可能会要求你明确加载它......