Я новичок в Прологе, и я пытаюсь сделать сортировку выбором. Вот что у меня есть:
ssort([],[]).
ssort([M|S],L):-min(M,L),remove(M,L,N),ssort(S,N).
min(M,[M]).
min(M,[H,T]):-min(N,T),min2(M,H,N).
min2(A,A,B):-less(A,B).
min2(B,A,B):-not(less(A,B)).
less(A,B):-(A<B).
append([],B,B).
append([H|A],B,[H|AB]):-append(A,B,AB).
remove(X,L,N):-append(A,[X|B],L),append(A,B,N).
Но когда я пытаюсь это, например:
ssort(S,[5,3,1]),write(S).
Я получаю false
, как бы я ни старался. Можете ли вы сказать мне, как я могу отсортировать список и получить результат, записанный в S
?
min/2
делает то, что вы от него ожидаете? Я спрашиваю, потому что вы могли бы решить свою проблему самостоятельно без особых усилий, и потому что, если бы я попытался выполнить сортировку выбором в Прологе, это было бы слишком отлично от того, что у вас есть прямо сейчас, и это неприятная работа по выслеживанию чужих ошибок (багов). - person   schedule 19.03.2017min2
должен найти минимум между 2-м и 3-м аргументом и записать его в первый. Хотя я не уверен, что делаю это правильно :D - person Petar D.   schedule 19.03.2017min/2
иmin2/3
. Если они работают так, как ожидалось, у вас есть проблема в другом месте (и кода не так много). Если они не работают должным образом, вы можете задать более узкий и конкретный вопрос, на который будет легче ответить. На данный момент у вас просто есть куча кода, и, пожалуйста, исправьте его, что не является хорошим подходом к вопросу. - person   schedule 19.03.2017ssort(S,[5]),write(S).
? оно работает. - person Will Ness   schedule 19.03.2017