그대로 논리적으로 순수, 그것은 쉽게 :
number_t(X,Truth) :- number(X), !, Truth = true.
number_t(X,Truth) :- nonvar(X), !, Truth = false.
number_t(X,true) :- freeze(X, number(X)).
number_t(X,false) :- freeze(X,\+number(X)).
이의이 실행하자 number_t/2
(number_truth/2
의 줄임말)을 구체화 형식 시험 조건과 함께 협력하여 메타 조건 tcount/3
를 사용하여 OP 추천 검색어 :
?- tcount(number_t,[1,2,c,h,4],N).
N = 3. % succeeds deterministically
가변 단조 지연은 항상 l입니다. 끔찍한 소리.고려 : 마침내
?- tcount(number_t,[A,B,C,D,E],N), A=1, B=2, C=c, D=h, E=4.
N = 3, A = 1, B = 2, C = c, D = h, E = 4 ; % succeeds, but leaves choice point
false.
, 우리는 다음과 같은 매우 일반적인 질의의 답변 중 일부에서 들여다 보자 놀랍게도 잘 작동 내가 볼
?- tcount(number_t,[A,B,C],N).
N = 3, freeze(A, number(A)), freeze(B, number(B)), freeze(C, number(C)) ;
N = 2, freeze(A, number(A)), freeze(B, number(B)), freeze(C,\+number(C)) ;
N = 2, freeze(A, number(A)), freeze(B,\+number(B)), freeze(C, number(C)) ;
N = 1, freeze(A, number(A)), freeze(B,\+number(B)), freeze(C,\+number(C)) ;
N = 2, freeze(A,\+number(A)), freeze(B, number(B)), freeze(C, number(C)) ;
N = 1, freeze(A,\+number(A)), freeze(B, number(B)), freeze(C,\+number(C)) ;
N = 1, freeze(A,\+number(A)), freeze(B,\+number(B)), freeze(C, number(C)) ;
N = 0, freeze(A,\+number(A)), freeze(B,\+number(B)), freeze(C,\+number(C)).
아. 감사합니다. 그러나 내장 된 술어를 사용하지 않으려는 경우 올바른 방향으로 나를 안내 할 수 있습니까? 마찬가지로 기존 코드에 "only numbers"를 구현하십시오. 내가보기에 프롤로그와상의하는 동안 예를 들어 number/1을 사용할 수있는 것처럼 보입니다. 사실입니까? – Majusbeh