1

我正在尝试在 prolog 中实现 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.

谢谢!

4

1 回答 1

1

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

foldl1(_, [E], E).

foldl1(Predicate, [X,Y|Z], Result) :-
  call(Predicate, X, Y, Ans),
  foldl1(Predicate, [Ans|Z], Result).
于 2019-04-06T17:42:58.337 回答