List 需要删除prolog中最后一个元素

List 需要删除prolog中最后一个元素,list,prolog,List,Prolog,我一直在尝试在prolog中做不同的事情,希望删除最后一个元素,但我不知道如何删除 这是我的代码: without(X,[X,_],[]). without(X,[K|Xs],[K|AlmoustLast]) :- without(X,Xs,AlmoustLast). 这就是我在编译时收到的信息 ?- without(X,[1,2,3,4,5],A). X = 4, A = [1, 2, 3] . 当我试图达到的目标是A=[1,2,3,5]。你几乎是对的 without(X,[X,

我一直在尝试在prolog中做不同的事情,希望删除最后一个元素,但我不知道如何删除

这是我的代码:

without(X,[X,_],[]).
without(X,[K|Xs],[K|AlmoustLast]) :-
    without(X,Xs,AlmoustLast).
这就是我在编译时收到的信息

?-  without(X,[1,2,3,4,5],A).
X = 4,
A = [1, 2, 3] .

当我试图达到的目标是A=[1,2,3,5]。你几乎是对的

without(X,[X,_],[]).
without(X,[K|Xs],[K|AlmoustLast]) :-
    without(X,Xs,AlmoustLast).
事实上,以下是

without(X,[X,Y],[Y]).
without(X,[K|Xs],[K|AlmostLast]) :-
    without(X,Xs,AlmostLast).
给你

?- without(X,[1,2,3,4,5],A).

A = [1,2,3,5]
X = 4

你几乎是对的

without(X,[X,_],[]).
without(X,[K|Xs],[K|AlmoustLast]) :-
    without(X,Xs,AlmoustLast).
事实上,以下是

without(X,[X,Y],[Y]).
without(X,[K|Xs],[K|AlmostLast]) :-
    without(X,Xs,AlmostLast).
给你

?- without(X,[1,2,3,4,5],A).

A = [1,2,3,5]
X = 4

Rafalon给出了正确的结果,我将对此进行解释

您的基本案例规则逻辑有缺陷:

without(X,[X,_],[]).
这里您的意思是,如果从
[X,]
中删除最后一个,那么您将得到元素
X
和列表
[]
,但这听起来不符合逻辑,是吗?
发生了什么事?你在这里使用了一个匿名变量,这意味着你不在乎它,但你真的在乎!正如Rafalon所指出的,这条规则应该是:

without(X, [X,Y], [Y]).

因此,列表
[X,Y]
中的最后一个给出了元素
X
,列表
[Y]

Rafalon给出了正确的结果,我将对此进行解释

您的基本案例规则逻辑有缺陷:

without(X,[X,_],[]).
这里您的意思是,如果从
[X,]
中删除最后一个,那么您将得到元素
X
和列表
[]
,但这听起来不符合逻辑,是吗?
发生了什么事?你在这里使用了一个匿名变量,这意味着你不在乎它,但你真的在乎!正如Rafalon所指出的,这条规则应该是:

without(X, [X,Y], [Y]).

因此,列表
[X,Y]
中的最后一个给出了元素
X
和列表
[Y]

!。看看
没有(1[1,2],L)
!谢谢事实上,当我计算最后两个数字的和时,我使用了相同的东西(sumf(X,Y,[X,Y],u.),但我没有想到在这里使用它……谢谢!事实上,当我计算最后两个数字的和时,我使用了相同的东西(sumf(X,Y,[X,Y],u.),但我没有想到在这里使用它……这是真的,我可以而且我应该解释它+谢谢你的解释。那是真的,我可以也应该解释一下+谢谢你的解释。