2017-02-14 6 views
1

Может ли кто-нибудь сказать мне, что не так в моем случае, если еще в моем поиске, в подсписке.Условие ошибки, если else в прологе

Поскольку, когда размер равен 0, условие работает, но если значение становится 1,2 и 3, оно представляет ошибку, но операторы связи неверны?

Если переменная длина имеет размер = 0, условие работает, но если длина переменной имеет размер 3, она имеет ошибку.

Ошибка:

Исключение:> =/2: Аргументы не достаточно экземпляра.

subList([], []). 
subList(List1,List2):- 
     concatenate(List1,List2,Result1), 
     equalelements(Result1,Result2), 
     counting(Result2,Length), 
     Length =< 2 
    -> false 
    ; Length >= 3 
    -> true. 

searchdisease([],_). 
searchdisease(Symptoms,Disease) :- 
    disease(Ls, Disease), 
    subList(Symptoms, Ls). 

counting([ ],0). 
counting([_| T], N) :- 
    counting(T, N1), 
    N is N1 + 1. 

concatenate(L1, L2, NL) :- 
    append(L1, L2, L12), 
    msort(L12, NL). 
+0

Длина - переменная возврата размера списка, время, когда оно возвращает размер 0, время, когда оно возвращает размер 1 или размер 2,3,4, и т. Д. Поэтому я проверяю, меньше ли размер списка или равен ему 2 или больше или равно 3. –

+0

Я отступил от ваших правил: теперь вы видите, что 'Length' не является обязательным для' Length> = 3' – false

+0

Длина - это возврат предиката Counting, который возвращает размер списка в переменной lenght , –

ответ

1

Это распространенная проблема с приоритетами операторов. Обратите внимание, что Prolog игнорирует точный отступ, который вы используете. Вместо этого он учитывает операторы. Поэтому вам нужно добавить круглые скобки соответственно.

Скорее всего, вы хотите следующее:

subList([], []). 
subList(List1,List2):- 
    concatenate(List1,List2,Result1), 
    equalelements(Result1,Result2), 
    counting(Result2,Length), 
    ( Length =< 2 
    -> false 
    ; Length >= 3 
    -> true 
    ). 

С другой стороны, почему бы не просто заменить сравнения для Length одной целью: Length >= 3.

+1

Теперь я понимаю, это сработало. Спасибо. –

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

  • Нет связанных вопросов^_^