需要删除prolog

时间:2017-04-14 17:23:01

标签: 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]。

2 个答案:

答案 0 :(得分:2)

你几乎是正确的

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

给你

0x00F00BAA hard coded memory adress in target
process
void* x = (void*)0x00F00BAA;
char* y = (void*)0x00F00BAA;
x = (uintptr_t)x + 0x123;
y = (char*)y + 0x123;

x == y?
x == (void*)0x00F00CCD?
y == (void*)0x00F00CCD?

答案 1 :(得分:2)

拉法隆给出了更正后的结果,我将向其提供解释。

你的基本情况规则逻辑是有缺陷的:

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

您要说的是,如果您从[X,_]删除最后一个而不是X,那么您会获得元素[]并列出_,但这听起来不符合逻辑,是吗? without(X, [X,Y], [Y]). 发生了什么事?你在这里使用匿名变量暗示你不关心它,但你真的很在意!正如拉法隆所指出的,这条规则应该是:

[X, Y]

因此列表X中的最后一个列表会为您提供元素[Y]和列表for i in range(len(pi)): if str(i) == pi[i-1:i-1+len(str(i))]: print(i)