'프롤로그 아트'를 읽었으며 '합계가 ListOfIntegers의 합계 인 경우 보유하고있는 관계 합계 (ListOfIntegers, Sum)를 정의하는 연습을 발견했습니다. 모든 보조 술어 '.이 솔루션을 내놓았다 :프롤로그에 목록의 합
sum([],Sum).
sum([0|Xs], Sum):-sum(Xs, Sum).
sum([s(X)|Xs], Sum):-sum([X|Xs],s(Sum)).
정확히 원하는대로 작동하지 않습니다.
?- sum([s(s(0)),s(0),s(s(s(0)))],X).
true ;
false.
가 나는 문제가 내가 처음 '반복'에서 0 합계를 '초기화'해야한다는 것입니다하지만 매우 절차가 될 불행히도 것이라고 생각 X가
s(s(s(s(s(s(0))))))
것으로 기대하고 있었다 나는 프롤로그에서 그 일을하기가 쉽지 않다. 아이디어 나 제안이 있으십니까?
그런 식으로 내 문제를 해결할 수 있다고 생각한 적 없다 ... 고마워! – kaiseroskilo
다른 언어에서 영감을 얻은 첫 번째 Prolog 질문이 아닙니다. Erlang이 최근 Prolog 프로그래머를 망쳤다 고 생각하거나 특정 규칙에 대한 생각을 반영합니다. Erlang에서는 Peano없이 할 수 있습니다 : sum ([]) -> 0; 합계 ([X | Y]) -> X + 합계 (Y). 그리고 좌우의 선언적 읽기가 흐려지고 '->'는 논리적으로 혼란 스럽습니다. –
프롤로그 II는':-' 대신'- '를 사용했습니다. 이것은 1980 년경이었습니다. 의도는 다시 쓰기 측면을 강조하는 것이 었습니다. Erlang은 약 1987입니다. – false