xMenores(_,[],[]).
xMenores(X,[H|T],[R|Z]) :-
xMenores(X,T,Z),
X > H,
R is H.
xMenores
принимает три параметра:
- Первый - это номер.
- Второй - это список чисел.
- Третий список - это переменная, которая будет содержать результат.
Цель правила xMenores
- получить список с номерами списка (второй параметр), которые меньше значения для первого параметра. Например:
?- xMenores(3,[1,2,3],X).
X = [1,2]. % expected result
Проблема заключается в том, что xMenores
возвращает false
, когда X > H
является ложным, а мои навыки программирования почти равны нулю при прологе. Итак:
?- xMenores(4,[1,2,3],X).
X = [1,2,3]. % Perfect.
?- xMenores(2,[1,2,3],X).
false. % Wrong! "X = [1]" would be perfect.
Я рассматриваю X > H, R is H.
, потому что мне нужно, чтобы всякий раз, когда X
больше, чем H
, R
принимает значение H
. Но я не знаю структуру управления, такую как if или что-то в Prolog, чтобы справиться с этим.
Пожалуйста, любое решение? Спасибо.