Нет , поскольку 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>.