我一直在尝试在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]。
答案 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)
。