карта swiprolog, ложная к нулю и истинная к одному - PullRequest
0 голосов
/ 15 декабря 2011

Как я могу отобразить в swi-прологе true и false на 1 и 0 соответственно? мне нужно оценить единицы и нули, как истина и ложь (как в таблицах истинности). У меня возникают некоторые трудности, так как всякий раз, когда я пытаюсь использовать 1 в качестве логического значения, swi-prolog dosent принимает это любезно и возвращает ошибку.

Я бы хотел попробовать что-то вроде этого

0 :- false.
1 :- true.


и когда я запрашиваю мою логическую операцию «и», она должна возвращать логическую и операцию, примененную к обоим значениям.

? my_and_operation(1, 0).
false

? my_and_operation(1, 1).
true

Ответы [ 4 ]

3 голосов
/ 15 декабря 2011

Простой способ сделать то, что вам нужно, это просто определить некоторые предикаты isTrue/1 и isFalse/1.

isTrue( 1 ).
isFalse( 0 ).

booleanAnd( X, Y ) :-
    isTrue( X ),
    isTrue( Y ).

Использование.

?- booleanAnd( 1, 0 ).
false.

?- booleanAnd( 1, 1 ).
true.
1 голос
/ 16 декабря 2011

В качестве альтернативы вы можете сделать что-то вроде:

map(1, true).
map(0, false).

boolAnd(X, Y) :-
    maplist(map, [X, Y], [A, B]),
    (A, B).

boolOr(X, Y) :-
    maplist(map, [X, Y], [A, B]),
    (A; B).
0 голосов
/ 16 декабря 2011

Действительно простое решение:

my_and_operation(1, 1).
0 голосов
/ 16 декабря 2011

Более простой способ:

my_and_operation(X, Y) :-
 X == 1, Y == 1.
...