Я пытаюсь найти позицию индекса минимального элемента в списке и напечатать элемент на соответствующей позиции индекса в другом списке.
Например:
?- min2(X,Y,[a,b,c],[5,3,7]).
X= b
y= 3
Код:
min2(A,B,[A|_],[B|_]).
min2(A,B,[X|T1],[Y|T2]) :- smallest(W,[Y|T2]), % using a predicate to find the min element in the list
B is W, % setting B to the result of above(i.e the min element)
min2(A,B,T1,T2). % looking up position corresponding to min element in list1
предикат для нахождения элемента min в списке:
smallest(Head, [Head]).
smallest(Element, [Head|Tail]) :- smallest(E, Tail), Head =< E, Element is Head.
smallest(Element, [Head|Tail]) :- smallest(E, Tail), E < Head , Element is E.
Результат, который я получаю:
X = a,
Y = 5 ;
X = b,
Y = 3 ;
false.
Это как-то выбираетпервый элемент также.Мой базовый случай может быть неправильным?Я попытался изменить базовый случай на min2(A,B,[A|_],[B|_]).
, и он сломался.
Пожалуйста, покажите мне, где я ошибаюсь.