2015-01-07 4 views
2

운동을하려고합니다. '0'이 0이고, (0)이 1이고, s (s (0))가 2라는 의미 인 's 표현'의 숫자를 나타 내기 위해 노력합니다. . "s numbers"를 추가하기위한 술어를 작성하려고했습니다 : 술어 s2int가 "s number"를 int로 변환합니다.프롬프트가 다시 돌아 오지 않습니다.

s2int(0, 0). 
s2int(s(X), Y) :- 
    s2int(X, Y1), 
    Y is 1 + Y1. 

add(X, Y, Z) :- 
    s2int(X, SX), 
    s2int(Y, SY), 
    s2int(Z, SZ), 
    SZ is SX + SY. 

내가 질문을 추가 할 때 정답을 쓰지만 프롬프트가 다시 나타나지 않습니다. 무엇이 문제입니까?

답변

4

당신의 정의가 add/3 일 때 잘 동작하며, 또한 세 가지 경우 모두 인수가 주어지면 종료됩니다. 그 중 하나를 변수로 남겨두면 목표 중 하나 s2int(XYZ, SXYZ)에 두 개의 인스턴스화되지 않은 변수가 인수로 포함됩니다. 따라서 전체 열거 형을 무한히 길게하는 무한히 큰 세트를 설명합니다.

당신이 뭘하고 있는지 잘 모르겠지만 아마도 후계 산수에 add/3을 정의하고 싶을 것입니다. 0,1,2 정수를 사용하지 않고도이 작업을 수행 할 수 있습니다! 시도 해봐! 그렇지 않으면 을 검색하십시오.