recursion - 一旦返回所需的值,如何停止序言中的递归?
问题描述
我正在咨询的 .pl 文件看起来像这样
spouse(eddard_stark,catelyn_stark).
spouse(X,Y):-spouse(Y,X).
我在这里根本想要的程序是,如果“Eddard 是 Catelyn 的配偶”,那么“Catelyn 是 Eddard 的配偶”。
但是当我查询时,spouse(eddard_stark, X).
这会进入catelyn_stark
. 一旦达到所需的输出,我不确定如何停止 Prolog 中的递归。
另外,如果您想到此问题的任何替代解决方案,请提及,我非常感谢您的意见。
解决方案
它将不断地交换参数。您可以通过使用两个谓词来解决这个问题,spouse_data/2
例如一个包含:
spouse_data(eddard_stark,catelyn_stark).
然后是一个spouse/2
试图从两个方向调用谓词的谓词:
spouse(X, Y) :-
spouse_data(X, Y).
spouse(X, Y) :-
spouse_data(Y, X).
推荐阅读
- isabelle - 如何实现有类型的无标签解释器?
- r - 在使用插入符号训练多个模型时使用相同的 trainControl 对象进行交叉验证是否可以进行准确的模型比较?
- c - Strcat 追加整个结构而不是一个元素
- wordpress - 如何确保仅售出 woocommerce 中任何产品的一个实例?
- hibernate - Spring Data 无法使用 *ScoreHibernateType 持久化 OptaPlanner 的 Score 对象
- jquery - 减少一个 jquery 函数以显示隐藏 div
- amazon-web-services - 弹性搜索查询中多列的通配符
- amazon-web-services - 启用代理协议的 AWS ELB TCP http 到 https 重定向
- python - 使用相同的对象创建新模型 odoo 11
- mongodb - AWS DMS - 将阵列从 MongoDB 迁移到 DynamoDB