2015-10-16 3 views
1

У меня есть этот блок номеров:Пролог: Сравнение чисел в списке

num(1). 
num(-2). 
num(5). 
num(50). 
num(-3). 
num(87). 

Я должен сделать функцию, которая получает номер он должен проверить, если это число является наименьшим из этого " список "чисел, приведенных выше.

например:

not_smallest(5). 
true. 

not_smallest(X). 
X = 1 ; 
X = -2 ; 
X = 5 ; 
X = 50 ; 
X = 87. 

Что я думал, что было сделать список с выше блока чисел и сравнение заданного числа ко всем элементам списка. Но всякий раз, когда я пытаюсь загрузить .pl документ я получаю эту ошибку:

Syntax error: Operator expected 

то, что я сделал до сих пор это:

%increments the index of a List 

incr(X, X1) :- 
    X1 is X + 1. 

%L-list containing "list" of numbers, N - elements of that "list", 
I-index , C-number X is going to be compared to, X- number to compare. 

nao_menor(X) :- 
    findall(N, num(N), L), 
    num(X), 
    I is 0, 
    nth0(I, L, C), 
    X =< C, 
    incr(I,I). 
+0

' Символ% 'указывает строку комментария (не может иметь новые строки), поэтому вам нужно добавить% в начале строки« I-index .... »или поместить эти две строки в одну строку – gusbro

+0

Также ваш' nao_menor/Процедура не будет работать так, как вы ожидаете. (например, 'incr (I, I)' всегда будет терпеть неудачу) – gusbro

+0

Я только что добавил% теперь, чтобы указать, какие были переменные, это не в исходном коде, но спасибо за это. – eXistanCe

ответ

1

Здесь мы идем:

not_smallest(N) :- 
    num(N), 
    \+ \+ (num(M), M < N). 

Образцы запросов, предоставленные ОП:

?- not_smallest(5). 
true. 

?- not_smallest(X). 
    X = 1 
; X = -2 
; X = 5 
; X = 50 
; X = 87. 
+1

Невозможно сделать так, как я пытался это сделать? – eXistanCe

+0

@eXistanCe. Я не совсем понимаю, что вы пытаетесь сделать с помощью 'findall', за которым следует' nth0'. 'findall' не сортирует,' setof' OTOH делает ... – repeat

+0

Идея состояла в том, чтобы не сортировать значения, просто было помещать их в список, таким образом, findall, а затем сравнивать любое значение с теми, которые хранятся в списке , Возвращайте true, если он не меньше любого из элементов списка и false, если это было – eXistanCe

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