Пролог Реализация foldl1 - PullRequest
       19

Пролог Реализация foldl1

1 голос
/ 06 апреля 2019

Я пытаюсь реализовать 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 Ответ

1 голос
/ 06 апреля 2019

Predicate(X) действительно недопустимый синтаксис, поскольку (в стандартном прологе) имя составного термина не может быть переменной. Используйте вместо:

foldl1(_, [E], E).

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