我是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
我希望能够通过将任务作为列表输入来一次计算多个任务的持续时间。
我定义了总和。还有什么需要做的?
任何人都可以帮助我吗?
答案 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
没有必要。祝你好运。