快速PROLOG查询

时间:2014-03-28 00:31:13

标签: prolog

我的谓词如下

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],和)。

1 个答案:

答案 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可能会要求你明确加载它......