列表的长度

时间:2018-04-30 17:18:51

标签: prolog

我是ProLog的初学者,我正在尝试以下问题:

编写谓词len以计算x列表的总持续时间 任务,例如

?- len([d, j, l, n], Time).

Time = 15

需要遵循一系列规则:

duration(a,5).
duration(b,7).
duration(c,3).
duration(d,4).
duration(e,10).
duration(f,4).

我尝试了以下内容,但是有一条错误消息,我看不出我做错了什么。

length([], 0).
length([X], duration(X, T), Time).

sum([],0).
sum([X|L],N) :-
    sum(L,N1),N is N1 + X.

length([X|Xs], sum([duration(Xs, Ts)], Time).

这是错误:Singleton variables: [T,Time] Syntax error: Operator expected

我希望能够通过将任务作为列表输入来一次计算多个任务的持续时间。

我定义了总和。还有什么需要做的?

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您似乎尝试将length定义为

length([], 0).

但是length已经定义了谓词,它将第二个参数绑定到列表的长度。 您必须在此处定义len

这不好。

length([X], duration(X, T), Time).

以下情况会更好。

len([X], Time) :- duration(X, Time).

但如果您正确定义len([X|Xs], Time),则len([X], Time)变得不必要。

我认为sum没有必要。祝你好运。