나는 프롤로그를 배우려고 노력했고, 술어가하는 일에 완전히 몰두했다. 자주 사용되는 것을 볼 수 있으며 Prolog에 대한 인터넷 자원이 너무 적어서 대답을 찾을 수 없습니다. Ex. /* sum(Is,S) is true if S is the sum of the list of integers Is. */
sum([],0).
sum([0
누군가이 프롤로그 쿼리가 어떻게 작동하는지 설명 할 수 있습니까? 정의는 다음과 같습니다 add(0,Y,Y).
add(succ(X),Y,succ(Z)):- add(X,Y,Z).
이 주어진 :을 Heres ?- add(succ(succ(succ(0))), succ(succ(0)), R).
쿼리의 추적 : 사실을 가장하는 튜토리얼에 대해 나에게 혼동했
편집 : 해결. 소스 파일에서 언어 확장을 활성화해도 GHCi에서 언어 확장을 사용할 수 없다는 사실을 알지 못했습니다. 해결책은 GHCi에서 :set FlexibleContexts이었습니다. 내가 최근 하스켈 클래스 및 인스턴스의 유형 선언을 발견은 혼 절입니다. 그래서 산술 연산을 프롤로그의 기술, 제 3 장에서 하스켈로 인코딩했습니다. 예 : fac(
'프롤로그 아트'를 읽었으며 '합계가 ListOfIntegers의 합계 인 경우 보유하고있는 관계 합계 (ListOfIntegers, Sum)를 정의하는 연습을 발견했습니다. 모든 보조 술어 '.이 솔루션을 내놓았다 : sum([],Sum).
sum([0|Xs], Sum):-sum(Xs, Sum).
sum([s(X)|Xs], Sum):-sum([X|Xs
다음 그림과 같이 쓴 추가 규칙에 의한 곱셈에 대해 Arguments are not sufficiently instantiated 오류가 계속 발생합니다. mult(_, 0, 0). %base case for multiplying by 0
mult(X, 1, X). % another base case
mult(X, Y, Z)
을 GREATER_THAN : 술어 우리는이 강의에서 소개 된 표기법이 개 숫자를 취 greater_than/2 정의 (즉 0를 , succ(0), succ(succ(0)) ...)를 인수로 사용하여 첫 번째 인수가 두 번째 인수보다 큰지 여부를 결정합니다. 예컨대 : ?- greater_than(succ(succ(succ(0))), succ(0)).
y