foldl1的Prolog实现

时间:2019-04-06 17:11:52

标签: prolog fold meta-predicate

我正在尝试在序言中实现foldl1而不使用内置的foldl谓词。

我的代码产生Syntax error: Operator expected

foldl1(_, [E], E).

foldl1(Predicate, [X,Y|Z], Result) :-
  call(Predicate(X), Y, Ans),
  foldl1(Predicate, [Ans|Z], Result).

我希望:

?- foldl1(concat,['a','b','c','d'],X).
X = abcd.

谢谢!

1 个答案:

答案 0 :(得分:1)

Predicate(X)确实是无效语法,因为(在标准Prolog中)复合词的名称不能为变量。改用:

foldl1(_, [E], E).

foldl1(Predicate, [X,Y|Z], Result) :-
  call(Predicate, X, Y, Ans),
  foldl1(Predicate, [Ans|Z], Result).