prolog实现foldl1

问题描述 投票:1回答: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.

谢谢!

prolog fold meta-predicate
1个回答
1
投票

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

foldl1(_, [E], E).

foldl1(Predicate, [X,Y|Z], Result) :-
  call(Predicate, X, Y, Ans),
  foldl1(Predicate, [Ans|Z], Result).
© www.soinside.com 2019 - 2024. All rights reserved.