【发布时间】:2017-12-30 18:56:27
【问题描述】:
我是新的 Prolog,我被困在这一点上。 我怎样才能得到这个排序列表的头部?
mylist(List,First) :-
sort(List, Sorted),
mylist(Sorted,First).
mylist([H|_],H).
【问题讨论】:
我是新的 Prolog,我被困在这一点上。 我怎样才能得到这个排序列表的头部?
mylist(List,First) :-
sort(List, Sorted),
mylist(Sorted,First).
mylist([H|_],H).
【问题讨论】:
你用[First|_]统一排序列表:
mylist(List,First) :-
sort(List,[First|_]).
所以现在Prolog会将sort/2的右操作数与[First|_]统一起来。这意味着如果您使用mylist([1,4,2,5],F) 调用,Prolog 将调用sort([1,4,2,5],[F|_])。现在Prolog会将列表排序为[1,2,4,5]并统一[1,2,4,5] = [F|_]。自[1,2,4,5] = [1|[2,4,5]] 以来成功。所以F = 1,通配符是[2,4,5]。
请注意,只有当sort/1 的第二个参数是包含至少一个元素的列表时,谓词才会成功。
您还可以使用该First 进行进一步处理。如果您需要对排序列表及其头部的引用,您可以使用:
mylist(List,First) :-
sort(List,Sorted),
Sorted = [First|_],
%% further processing with Sorted and First.
【讨论】: