我需要在序言中删除列表的一个元素,但只有当您将列表放入咨询中时它才有效,例如:
eliminar(1,[1,2,3], X)
。它返回 X=2,3
,但是当我想删除列表“aves”的元素时,它给我 false eliminar(loro,aves,X)
,它返回 false。
aves([aguila, paloma, loro, canario]).
% Predicado para eliminar un elemento de una lista
eliminar(X,[X|Xs], Xs).
eliminar(X,[Y|Ys] , [Y|Zs]) :- eliminar(X,Ys,Zs).
我正在尝试添加[aves],但不起作用
只有大写单词才是 prolog 中的变量。当您写下
aves
时,它不会被其他任何内容替代。
如果已声明,
aves([...]).
那么要取回该列表,您必须查询aves(X)
,它将列表作为变量X
返回。
aves([aguila, paloma, loro, canario]).
| ?- aves(X).
X = [aguila,paloma,loro,canario]
yes
所以你的查询应该是:
| ?- aves(X), eliminar(loro, X, Y).
X = [aguila,paloma,loro,canario]
Y = [aguila,paloma,canario] ?
yes