在玩弄 SWI-Prolog (SWISH) 中不同的列表谓词时,我试图检查一个原子a
是否是List1
我在程序中定义为List1 = [a,b,c,d]
.
我将我的查询表述为member(a, List1).
,期待类似于简单的“是”的内容(正如它在 59:25 的这个youtube 视频中显示的那样),但是我收到了一个警告
单例变量:[List1]
和一个错误
无权修改静态过程 `(=)/2'
根据我在网上查找的了解,这里的警告并不重要。但是,我不明白为什么我a
显然是List1
.
我尝试了两种不同的方式:
1)通过添加List1 = [a,b,c,d].
到程序并查询member(a,List1).
(导致上述错误);
2)List1 = [a,b,c,d]
直接传递给解释器,然后使用相同的member(a,List1).
查询a
(
List1 = [a|_1186]
List1 = [_1062, a|_1070]
List1 = [_1062, _1068, a|_1076]
List1 = [_1062, _1068, _1074, a|_1082]
List1 = [_1062, _1068, _1074, _1080, a|_1088]
这是关于我正在使用的特定 Prolog 版本的问题,还是我错过了一些非常简单的东西?
编辑
我知道这里提出了一个类似的问题,但我没有完全理解答案(也不是问题),因为它立即dynamic
涉及我在 Prolog 中尚未遇到的事情。我正在寻找一个更普遍、更“高级”的答案,我通过提出这个问题找到了这个答案。