我正在尝试编写一个谓词,它将接受一个列表、一个数字和一个变量,然后将列表的前 N 个元素提供给变量。我能够做到这一点,但是在尝试使其更灵活以便它在到达列表末尾或 N 为 0 时停止时,我开始在列表末尾返回一个垃圾变量。这是我的代码:
take(_,0,_) :- !.
take([],_,_) :- !.
take([Head|Tail], Number, [Head|Result]) :-
Number > 0,
N1 is Number - 1,
take(Tail, N1, Result).
当我尝试使用时take([1,3,5,7], 3, L1)
,我得到了L1 = [1, 3, 5|_G2028]
。
我认为这与我没有将 Result 定义为空列表有关,但我不知道如何做到这一点,同时保持谓词的功能。