list - 在 prolog 中列出操作
问题描述
我刚开始学习序言,所以这些可能是新手问题。我的问题是这个。使用这两条代码我得到错误:
X = .(1,.(2,.(3,[]))).
.(X,Y) = [1,2,3].
我希望在第一行X=[1,2,3]
之后和第二行之后X=1
and Y=[2,3]
。
相反,我得到了这个错误:
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] throw(error(instantiation_error,_3540))
ERROR: [9] '$dicts':'.'(_3570,_3572,_3574) at c:/program files/swipl/boot/dicts.pl:46
ERROR: [8] '<meta-call>'(user:(...,...)) <foreign>
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
我正在为 Windows 10 使用 SWI-Prolog 环境。为什么会发生这种情况?
解决方案
SWI-Prolog 对列表做了一些不同的事情。而不是.
它使用'[|]'
. 因此,以您的第一个示例为例:
?- X = .(1, .(2, .(3, []))).
并将每个替换.(A, B)
为'[|]'(A, B)
:
?- X = '[|]'(1,'[|]'(2,'[|]'(3,[]))).
X = [1, 2, 3].
另一个变成:
?- '[|]'(X, Y) = [1, 2, 3].
X = 1,
Y = [2, 3].
推荐阅读
- vb.net - VS 2019 中使用 VB.NET 的 Linq to SQL - 左外连接?
- python - 无法使用 Librosa 在 Heroku 上打开音频文件
- r - 如何简化 R 中的代码(正态性检验):1 行或 2 行代码中的不同样本大小?
- sql - SQL Server - 行的最小值
- python - 在python中搜索字典前缀
- c++ - 这是分段错误吗?
- python-3.x - 如何设置按钮仅在两行编辑输入小部件包含文本时才有效
- android - 在颤振/飞镖中获取 youtube 视频详细信息
- shopify - Shopify - 如何在应用程序中扩展结帐页面?
- python - 为什么 python3 中的 switcher 会遍历所有情况?