将输入添加到列表然后求和,在列表中找到Max和Min

时间:2017-03-27 02:10:19

标签: prolog

menu:- write('how much data to input  : '),read(N1),
   N2 is 0,loop(N2,N1).


loop(N2,N1):-N1>0, N3 is N2+1,
        write('Input data '),write(N3),write(' : '),read(M1),
        N is N2+1, X is N1-1, loop(N,X).
我是prolog的新手,我有循环输入,如何从循环输入(M1)添加到列表,然后在列表中找到Max和Min?我的数据是整数。

1 个答案:

答案 0 :(得分:1)

如果你只是从命令行启动Prolog,你会得到这个:

?- 

然后光标等着你输入内容。然后,您可以在括号之间编写一个整数列表,并将其放在一个变量中,它看起来像这样:

?- [1,2,3] = X.

现在,如果你想看看所有元素是否都是整数,你可以写:

?- [1,2,3] = X,
   maplist(integer, X).

现在,如果你想找到min和max,你可以使用这样的库谓词:

?- [1,2,3] = X,
   maplist(integer, X),
   min_list(X, Min),
   max_list(X, Max),
   sum_list(X, Sum).

如果你真的想立即做所有事情,你可以这样做:

integers_min_max_sum([I|Is], Min, Max, Sum) :-
    integers_min_max_sum_1(Is, I, I, I, Min, Max, Sum).

integers_min_max_1([], Min, Max, Sum, Min, Max, Sum).
integers_min_max_1([I|Is], Min0, Max0, Sum0, Min, Max, Sum) :-
    integer(I),
    Min1 is min(Min0, I),
    Max1 is max(Max0, I),
    Sum1 is Sum0 + I,
    integers_min_max_1(Is, Min1, Max1, Sum1, Min, Max, Sum).

?- integers_min_max_sum([1,2,3, ...], Min, Max, Sum).

但这真的比使用库谓词更好吗?也许,或许不是。