2012-05-21 4 views
0

Тест должен возвращать true: если первая часть истинна, а вторая - false.Простой: как сделать тест для ложного случая?

Попробовал сделать что-то вроде этого:

f_test :- f(x), % 1st part 
      f(y) is false. % 2nd part 

Но это дает мне ошибку:

ERROR: is/2: Arithmetic: `false/0' is not a function. 

Скажите, пожалуйста, как это сделать правильно?

ответ

2

(is)/2 предикат предназначен для выполнения арифметических операций. Даже если ваш тест касался арифметики, было бы предпочтительным использование (=:=)/2 (потому что для создания экземпляра переменной используется (is)/2. Когда вы используете его для проверки значения переменной, вы его неправильно используете. OTOH, (=:=)/2 используется для сравнения чисел).

Но здесь ваш тест не об арифметике, это о знании, если что-то верно или нет. Существует оператор для этого, который проверяет, является ли данный термин доказуемо или нет, это (\+)/1, использование:

f_test :- 
    f(x), 
    \+ f(y). 
+0

Большое спасибо) –

1

Вы можете попробовать

f_test :- f(x), \+f(y). 
+0

Большое спасибо) –

Смежные вопросы