Как объединить операции со списком? - PullRequest
1 голос
/ 01 марта 2020

Я хотел бы посчитать, как часто элемент x находится в списке L.

Я знаю, что есть путь с рекурсией, но возможно ли это так:

> count(X,L,C) = C is (length(L,Length) - length(delete(L, X,
> List2),Length)).
?

компилятор скажет нет :) Что я могу изменить?

1 Ответ

1 голос
/ 01 марта 2020

Нет , поскольку length(L, Length) не является функцией. Это предикат, поэтому он True или False (или застревает в бесконечном l oop, или ошибки, но вы можете утверждать, что на самом деле это не «результаты» предиката).

Кроме того, вы не можете вызывать предикат наподобие length(delete(L, X, List2), Length), поскольку для интерпретатора Prolog delete/3 - это просто функтор . Таким образом, он не будет вызывать предикат delete/3.

Однако вы можете переписать это следующим образом:

count(X, L, C) :-
    length(L, <b>N1</b>),
    delete(L, X, L2),
    length(L2, <b>N2</b>),
    C is <b>N1 - N2</b>.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...