prolog - Prolog 变量没有按预期统一
问题描述
我在 Prolog 中编写了以下内容来测试第二个数组是否像第一个数组一样,除了它有两倍的值:
twice([],[]).
twice([X|T1], [X1, X2|T2]) :- X == X1, X == X2, twice(T1, T2).
当我写时twice([1,2],[1,1,2,2]).
我得到true
,但是当我查询时:twice([1,2], X).
我得到false
而不是X = [1,1,2,2]
,有什么问题?
解决方案
那是因为==/2
[swi-doc]不应该统一。它测试两个术语是否相同(对于变量,如果它们是相同的变量)。统一是通过=/2
[swi-doc]完成的:
Term1
与统一Term2
。True
如果统一成功。
因此,您可以编写X = X1
,但这不是必需的。使用相同的变量将统一 vales,因此您可以实现twice/2
为:
twice([], []).
twice([X|T1], [X,X|T2]) :-
twice(T1, T2).
推荐阅读
- node.js - 在 node.js 上通过 Mongoose 连接到 MongoDB Atlas 的问题
- haskell - 制作 Applicative 的实例
- android - Nativescript如何在后台发出http请求
- python - 如何在 PyTorch 中加载具有多个 JSON 注释的图像
- maven - VSCode - Maven.archetype.generate 失败
- android - Android Studio 看起来不合适
- php - 使用 Xdebug 和 PhpStorm 找不到 Symfony ContainerAwareCommand
- mysql - MySQL - 如何选择日期时间字段不等于 0000-00-00 00:00:00 的行?
- mysql - MySQL XAMPP 总是打开一个网络命令弹出窗口
- r - 在地图函数中使用条件改变多个列