나는 프롤로그 코 루틴 술어를 가지고 놀고 freeze/2
있었고 frozen/2
:
?- freeze(X,a=a), frozen(X,Goal).
?- freeze(X,a=a), freeze(Y,b=b), X=Y, frozen(X,Goal).
sicstus-prolog (x86_64 버전 4.5.1)는 다음과 같은 답변을 제공합니다.
| -동결 (X, a = a), 동결 (X, 목표). 목표 = prolog : freeze (X, user : (a = a)) , 프롤로그 : 동결 (X, 사용자 : (a = a))? ; 아니 | -동결 (X, a = a), 동결 (Y, b = b), X = Y, 냉동 (X, 목표). Y = X, 목표 = (사용자 : (a = a), 프롤로그 : 동결 (X, 사용자 : (b = b))) , 프롤로그 : 동결 (X, 사용자 : (a = a)), 프롤로그 : 동결 (X, 사용자 : (b = b))? ; 아니
이제 나는 기대하지 않았다!Goal = prolog:freeze(X,user:(a=a))
내가 했던 기대하는 것은에 의해 주어진 것과 같은 대답했다 SWI - 프롤로그 버전 8.0.3 :
-동결 (X, a = a), 동결 (X, 목표). 목표 = 사용자 : (a = a) , 동결 (X, a = a). -동결 (X, a = a), 동결 (Y, b = b), X = Y, 냉동 (X, 목표). X = Y, 목표 = (사용자 : (a = a), 사용자 : (b = b)) , 동결 (Y, a = a), 동결 (Y, b = b).
아마도 SICStus 답변 과 SWI 답변은 모두 정확합니다 ...
그러나 SICStus가 제공 한 다소 독특한 답변에 대한 더 깊은 이유가 있습니까?
1
Sicstus의 AFAIK "마지막 실패"를 마스킹하는 기능은 구현되지 않았습니까? ; 아니`
—
안톤 Danilov
우선, 명시적인 자격이 바람직합니다.
—
false
이 문제는 3.8.5까지 존재하지 않습니다. 3.8.6부터는 존재합니다.
—
false
@AntonDanilov. 괜찮아. 그러나 나는 실제로 대담한 줄 "Goal = ..."의 차이점을 언급하고있었습니다.
—
반복
아마도 @PerMildner가 대답 할 것입니까?
—
false