누군가이 프롤로그 쿼리가 어떻게 작동하는지 설명 할 수 있습니까? 정의는 다음과 같습니다succ를 사용하여 재귀 쿼리를 통해 프롤로그를 실행하는 방법은 무엇입니까?
add(0,Y,Y).
add(succ(X),Y,succ(Z)):- add(X,Y,Z).
이 주어진 :
을 Heres?- add(succ(succ(succ(0))), succ(succ(0)), R).
쿼리의 추적 : 사실을 가장하는 튜토리얼에 대해 나에게 혼동했다
Call: (6) add(succ(succ(succ(0))), succ(succ(0)), R)
Call: (7) add(succ(succ(0)), succ(succ(0)), _G648)
Call: (8) add(succ(0), succ(succ(0)), _G650)
Call: (9) add(0, succ(succ(0)), _G652)
Exit: (9) add(0, succ(succ(0)), succ(succ(0)))
Exit: (8) add(succ(0), succ(succ(0)), succ(succ(succ(0))))
Exit: (7) add(succ(succ(0)), succ(succ(0)),
succ(succ(succ(succ(0)))))
Exit: (6) add(succ(succ(succ(0))), succ(succ(0)),
succ(succ(succ(succ(succ(0))))))
부분에서 그 succ는 제거되고 재발합니다. 재귀하는 동안 R은 succ를 얻습니다 ... 어떻게?! 또한, 0은 첫 번째 출구 (9)에서 오는 것입니까? 나는 프롤로그를 처음 사용하고 숙제 언어를 이해하려고 노력하고 있습니다. 어떤 도움을 많이 주셨습니다. 고맙습니다.
참고 : 관심있는 사람들을 위해,이 튜토리얼에 대한 링크는 http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse9
보통,'SUCC은/1''S/1'로 기록됩니다. [tag : successor-arithmetics]라는 답변을 확인하십시오. – false