在序言中获取排序列表的头部
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.
我是 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.