프롤로그에 다음 조건부를 구현하고이를 진리표 및/2 또는/2, nand에 사용하고자합니다./2,/2, xor/2Prolog는/2, 또는/2, nand/2, 또는/2, xor/2
다른 사람이 나를 구현하고 여기에 게시 할 수 있도록 누군가가 나를 구현하고/2 예를 들어 보여줄 수 있습니다.
프롤로그에 다음 조건부를 구현하고이를 진리표 및/2 또는/2, nand에 사용하고자합니다./2,/2, xor/2Prolog는/2, 또는/2, nand/2, 또는/2, xor/2
다른 사람이 나를 구현하고 여기에 게시 할 수 있도록 누군가가 나를 구현하고/2 예를 들어 보여줄 수 있습니다.
주의 : and/2
대신 and/3
을 의미 할 수도 있습니다. AND는 진리 값과 2의 관계를 정의하는 3 진 술어입니다. 물론 진리 값이 암시적인 경우 Prolog의 내장 메커니즘을 사용할 수 있습니다 (= 사물을 명시 적으로 표현하는 것). 그러나 시작하려면 모든 진리 값을 명시 적으로 표시하고 "예를 들어 주어진 작업에 대해 어떤 진리 값이 false
을 생성합니까?"라고 물어볼 수 있기 때문에 3 진 관계로 시작할 것입니다. 당신이 시작 부울 값 사실 나타 내기 위해 나는 원자 true
를 사용 and/3
의 진리표에 대해 하나 개의 항목으로 활용하려면 다음
and(true, true, true).
독립적으로, 또한, 부울 제약 사용을 고려를하는 예를 들어 SICStus Prolog 및 GNU Prolog에서 사용할 수 있으며 진리 값과 부울 표현식 간의 관계를 선언적으로 표현할 수 있습니다. SICStus 프롤로그 library(clpb)
를 사용
예 :
| ?- sat(X*Y =:= T), X = 0.
X = 0,
T = 0 ?
이것은 결합의 첫번째 인자가 거짓이면, 전체의 결합이 아니라 거짓임을 나타낸다.
: 또, 예를 들면 원자library(clpb)
에로 표시
taut/2
| ?- taut(A*B =:= B*A, T).
T = 1 ?
또는 보편적 정량화 변수를 사용하여, 그 결합은 교환 적이다 판별 SICStus 프롤로그의 CLP (B) 솔버를 사용하여
| ?- sat(a*b =:= b*a).
yes
따라서 부울 제약 조건은 이진 값을 사용하여 작업 할 때 매우 유용한 도구가 될 수 있습니다.
/2가 가능하며 실제로 매우 우아합니다.
and(A,B) :- A,B.
or(A,B) :- A;B.
nand(A,B) :- not(and(A,B)).
nor(A,B) :- not(or(A,B)).
xor(A,B) :- or(A,B), nand(A,B).
그냥 A/B를 true/false로 바꿉니다. 예 :
?- and(true,true).
true.
?- and(false, true).
false.
* 바이너리 * 관계로, 실제 결과가 목표의 성공 여부에 내포되어있는 경우, 다음과 같은 중요한 질문에 대답하기가 어려워집니다. * 삼항 * 관계 '와/3'은 이것을 매우 간단하고 명백하게 만든다 :'? -와 (X, Y, false) .'. 진리 값을 명시 적으로 만들 때 쿼리에서 쉽게 액세스 할 수 있도록 모든 관계가 3 차 조건자인 다른 관계에 대해서도 마찬가지입니다. – mat
저는/3을 사용 하겠지만 질문은/2를 사용하는 방법이었습니다. –
iam이/2 또는/2 – PROLOGik
을 구현하도록 지시 했습니까? - 타펠 (A, B 및 (A, 또는 (A, B))). true true | true 참 실패 | true 참 true | 실패 실패 실패 | fail – PROLOGik
당신은'와 (X, Y)'와 같은 용어를 적어 둘 수 있으며, 아무것도 구현할 필요가 없습니다. 적어 놓을 때 생깁니다. 당신이 구현해야 할 것은 그러한 용어를 진리 값과 관련 짓는 술어입니다. 'expression_truth/2'로 시작하십시오. 예제 절 :'expression_truth (true, true) .'. 연습으로 남겨둔다 :'expression_truth (와 (X, Y), Truth) : - ...'는 형태의 용어를'and (X, Y)'와 그것의 진리 값에 연관시킨다. – mat