在序言中获取排序列表的头部

get the head of a sorted list in prolog

我是 Prolog 的新手,我被困在这一点上。 我怎样才能得到这个排序列表的头部?

mylist(List,First) :-
   sort(List, Sorted),
   mylist(Sorted,First).
   mylist([H|_],H).

[First|_]统一排序列表:

mylist(List,First) :-
    sort(List,<b>[First|_]</b>).

所以现在 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,<b>Sorted</b>),
    <b>Sorted = [First|_],</b>
    %% further processing with Sorted and First.