【发布时间】:2021-01-19 03:09:52
【问题描述】:
所以我的程序应该询问用户要输入多少个数字,然后用户将输入要排序的数字,排序算法应该是合并排序。
main:-
writeln('Number of items? '),
read(N),
length(L, N),
maplist(read, L),
mergesort(L, S).
mergesort([L,B|R],S):-
split([L, B|R], A1, A2),
mergesort(A1, S1),
mergesort(A2, S2),
format('Sorted list: ~w~n', merge(S1, S2, S)).
split([],[],[]).
split([L], [L],[]).
split([L, B|R], [L|Ra], [B|Rb]) :-
split(R, Ra, Rb).
merge(L, [], L).
merge([], B, B).
merge([L|Ra], [B|Rb], [L|M]) :-
L=< B,
merge(Ra, [B|Rb], M).
merge([L|Ra], [L|Rb], [B|M]) :-
L > B,
merge([A|Ra], Rb, M).
这不起作用,在用户输入要排序的数字后,它总是显示 false。
【问题讨论】:
-
谓词调用不能嵌套,因此
format('Sorted list: ~w~n', merge(S1, S2, S))不会产生你想要的结果。 -
我不明白 :(
-
调用
format('Sorted list: ~w~n', merge(S1, S2, S))应该写成连词merge(S1,S2,S), format('Sorted list: ~w~n',S)。
标签: sorting split prolog mergesort