2013-05-27 2 views
0
여기

는 프롤로그에서 cryptarithmetic의 조각입니다폴로그의 암호 해독 퍼즐에서 C1이 의미하는 바는 무엇입니까?

sum1([D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs) :- 
    sum1(N1, N2, N, C1, C2, Digs1, Digs2), 
    digitsum(D1, D2, C2, D, C, Digs2, Digs). 

으로 아래

sum1(N1, N2, N, C1, C, Digits1, Digits) 
where N1, N2 and N are our three numbers, 
     C1 is carry from the right, and 
     C is carry to the left (after the summation). 
     Digits1 is the list of available digits for instantiating the 
     variables in N1, N2, and N. 
     Digits is the list of digits that were not used in the 
     instantiation of these variables. 

은 C2는 캐리 양식 오른쪽, C의 약자를 위해 C1은, sum1([D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs) 무엇을 의미합니까 정말 이해가 안가 설명 왼쪽으로 이동한다는 뜻이며, C1은 무엇을 의미합니까?

답변

1

C, C1, C2는 0,1 값만 가정 할 수 있습니다. 산술 규칙은 첫 번째 호출에서 C1이 0이고 마지막 호출에서 C가 0이되어야합니다. C2가 재귀 호출에서 C가되면 합계 다음에 캐리를 전파합니다. C1 N을 얻기 위해 N1, N2에 더한 캐리입니다.

+0

nice! 왜 sum1 ([D1 | N1], [D2 | N2], [D | N], C, Digs1, Digs) (D1, D2, C2, D, C, Digs2, Digs) .'' C1은 재귀 호출에서 변경되지 않으며 항상 0일까요? – stonestrong

+0

오! 그것은 정말로 단순화 될 수 있고 테스트는 성공하지만, 또한 기본 케이스를 변경해야합니다. 'N1, N2, N) : -sum1 (N1, N2, N, 0, 0, [0,1,2,3,4,5,6,7,8,9] , _), 기본 경우는 sum1 ([], [], [], C, C, Digits, Digits)입니다. (N1, N2, N, 0, [0,1,2,3,4,5,6,7,8,9], _)로 변경합니다. .', 대소 문자를 sum1 ([], [], [], 0, Digits, Digits)로 변경하십시오. " – stonestrong

+0

맞습니다. 나는 그것이 모든 재귀 적 단계 후에 제약을받을 수 있다고 생각하지만 목적에 쓸모없는 것으로 보인다. – CapelliC