从 Prolog 中的用户输入创建列表

时间:2021-01-03 10:57:14

标签: sorting merge prolog user-input

我在 prolog 上遇到了问题

程序会要求输入一些元素:6

然后用户将输入 6 个数字 , 4, 3, 6, 2, 9, 10

那么prolog会升序排列

排序列表:2 3 4 6 9 10

2 个答案:

答案 0 :(得分:0)

1- 使用 read 输入前六位数字。

2- 将它们全部放在一个列表中。列表=[X1,X2,X3,X4,X5,X6]

3- 现在使用内置的排序谓词。您可以使用其中的任何一个 sort/2 参数或 sort/4 参数。两者之间的区别在于,在 sort/2 中,它将删除重复值 ([4,1,5,5,2] -> [1,2,4,5]),而在 sort/4 中,它将保留重复值重复值 ([4,1,5,5,2] -> [1,2,4,5,5]).

start:-
    writeln('Enter First digit'),
    read(X1),
    writeln('Enter Second digit'),
    read(X2),
    writeln('Enter Third digit'),
    read(X3),
    writeln('Enter Fourth digit'),
    read(X4),
    writeln('Enter Fifth digit'),
    read(X5),
    writeln('Enter Sixth digit'),
    read(X6),
    List=[X1,X2,X3,X4,X5,X6],
   % sort(List,Sorted),
    sort(0,@=<,List,Sorted),
    write('Sorted:'),write(Sorted).

示例:

?- start.
Enter First digit
4
Enter Second digit
1
Enter Third digit
5
Enter Fourth digit
5
Enter Fifth digit
2
Enter Sixth digit
8
Sorted: [1, 2, 4, 5, 5, 8]
1true

答案 1 :(得分:0)

考虑到元素的数量可能会有所不同,一个可能的解决方案是:

main :-
    writeln('Number of items? '),
    read(N),
    length(L, N),
    maplist(read, L),
    sort(L, S),
    format('Sorted list: ~w~n', [S]).