我如何在 Prolog 中使用这个归并排序代码?
How can I use this merge sort code in Prolog?
所以我有这个合并排序代码
merge(List, List, []).
merge(List, [], List).
merge([MinList1|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList1 =< MinList2,
merge(RestMerged,RestList1,[MinList2|RestList2]).
merge([MinList2|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList2 =< MinList1,
merge(RestMerged,[MinList1|RestList1],RestList2).
mergeSort([], []).
mergeSort([A], [A|[]]).
mergeSort(Sorted, List) :-
length(List, N),
FirstLength is //(N, 2),
SecondLength is N - FirstLength,
length(FirstUnsorted, FirstLength),
length(SecondUnsorted, SecondLength),
append(FirstUnsorted, SecondUnsorted, List),
mergeSort(FirstSorted, FirstUnsorted),
mergeSort(SecondSorted, SecondUnsorted),
merge(Sorted, FirstSorted, SecondSorted).
但不是做
mergeSort(S, [9,8,7,6,5]).
在序言中,如何通过询问用户输入多少个数字然后继续输入将被排序的数字来使用它。
例如:
项目数? 5
此处用户将输入5个数字进行排序
9.
8.
7.
6.
5.
最终答案将是
S=[5,6,7,8,9].
例如,您可以使用 read(它需要一个术语并需要以点结尾):
?- read(Xs), mergeSort(S, Xs).
|: [1,3,2,4,5].
Xs = [1, 3, 2, 4, 5],
S = [1, 2, 3, 4, 5] .
1- start
谓词要求用户输入 he/she 想要输入的位数。输入的数字将作为 counter
.
2- m
谓词将 运行 我们的计数器被指定的次数。 Number 的值将被推入 List。
3- 计数器一直递减直到达到zero
。到目前为止,我们已经有了一个包含我们号码的列表。
4- 接下来将List传给mergeSort
得到最终排序好的List。使用 write.
显示
merge(List, List, []).
merge(List, [], List).
merge([MinList1|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList1 =< MinList2,
merge(RestMerged,RestList1,[MinList2|RestList2]).
merge([MinList2|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList2 =< MinList1,
merge(RestMerged,[MinList1|RestList1],RestList2).
mergeSort([], []).
mergeSort([A], [A|[]]).
mergeSort(Sorted, List) :-
length(List, N),
FirstLength is //(N, 2),
SecondLength is N - FirstLength,
length(FirstUnsorted, FirstLength),
length(SecondUnsorted, SecondLength),
append(FirstUnsorted, SecondUnsorted, List),
mergeSort(FirstSorted, FirstUnsorted),
mergeSort(SecondSorted, SecondUnsorted),
merge(Sorted, FirstSorted, SecondSorted).
start:-
write('Select total digits to enter:'),
read(Counter),
m(L,Counter),
mergeSort(LS,L),
write(LS),!.
m([],0):-!.
m([Number|List],Counter):-
write('Enter Number'),
read(Number),
Counter1 is Counter-1,
m(List,Counter1).
示例:
?- start.
Select total digits to enter:
5
Enter Number
55
Enter Number
6
Enter Number
22
Enter Number
8
Enter Number
99
[6, 8, 22, 55, 99]
1true
所以我有这个合并排序代码
merge(List, List, []).
merge(List, [], List).
merge([MinList1|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList1 =< MinList2,
merge(RestMerged,RestList1,[MinList2|RestList2]).
merge([MinList2|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList2 =< MinList1,
merge(RestMerged,[MinList1|RestList1],RestList2).
mergeSort([], []).
mergeSort([A], [A|[]]).
mergeSort(Sorted, List) :-
length(List, N),
FirstLength is //(N, 2),
SecondLength is N - FirstLength,
length(FirstUnsorted, FirstLength),
length(SecondUnsorted, SecondLength),
append(FirstUnsorted, SecondUnsorted, List),
mergeSort(FirstSorted, FirstUnsorted),
mergeSort(SecondSorted, SecondUnsorted),
merge(Sorted, FirstSorted, SecondSorted).
但不是做
mergeSort(S, [9,8,7,6,5]).
在序言中,如何通过询问用户输入多少个数字然后继续输入将被排序的数字来使用它。
例如:
项目数? 5 此处用户将输入5个数字进行排序 9. 8. 7. 6. 5.
最终答案将是
S=[5,6,7,8,9].
例如,您可以使用 read(它需要一个术语并需要以点结尾):
?- read(Xs), mergeSort(S, Xs).
|: [1,3,2,4,5].
Xs = [1, 3, 2, 4, 5],
S = [1, 2, 3, 4, 5] .
1- start
谓词要求用户输入 he/she 想要输入的位数。输入的数字将作为 counter
.
2- m
谓词将 运行 我们的计数器被指定的次数。 Number 的值将被推入 List。
3- 计数器一直递减直到达到zero
。到目前为止,我们已经有了一个包含我们号码的列表。
4- 接下来将List传给mergeSort
得到最终排序好的List。使用 write.
merge(List, List, []).
merge(List, [], List).
merge([MinList1|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList1 =< MinList2,
merge(RestMerged,RestList1,[MinList2|RestList2]).
merge([MinList2|RestMerged], [MinList1|RestList1], [MinList2|RestList2]) :-
MinList2 =< MinList1,
merge(RestMerged,[MinList1|RestList1],RestList2).
mergeSort([], []).
mergeSort([A], [A|[]]).
mergeSort(Sorted, List) :-
length(List, N),
FirstLength is //(N, 2),
SecondLength is N - FirstLength,
length(FirstUnsorted, FirstLength),
length(SecondUnsorted, SecondLength),
append(FirstUnsorted, SecondUnsorted, List),
mergeSort(FirstSorted, FirstUnsorted),
mergeSort(SecondSorted, SecondUnsorted),
merge(Sorted, FirstSorted, SecondSorted).
start:-
write('Select total digits to enter:'),
read(Counter),
m(L,Counter),
mergeSort(LS,L),
write(LS),!.
m([],0):-!.
m([Number|List],Counter):-
write('Enter Number'),
read(Number),
Counter1 is Counter-1,
m(List,Counter1).
示例:
?- start.
Select total digits to enter:
5
Enter Number
55
Enter Number
6
Enter Number
22
Enter Number
8
Enter Number
99
[6, 8, 22, 55, 99]
1true