prolog - Prolog中求和的解决方案
问题描述
我绝对是 prolog 的初学者。我刚刚阅读了一个基本教程,并试图自己解决一个快速问题。问题是,找到可能导致总和的数字组合。我期待这样的事情:
sum(A,B,11).
这应该导致 A 和 B 的值将它们加起来为 10。
我最初的代码是这样的:
sum(A,B,C):-
C is A + B.
但我没有得到任何结果。我得到以下。
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [9] 11 is _3302+_3304
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.
我对 Prolog 的理解缺少什么?
解决方案
标准is/2
谓词需要第二个参数的可评估算术表达式。因此,在您的情况下,您将需要为 and 生成可能的值A
,B
以便A + B
可以计算。为了使其实用,您需要限制可能值的范围。例如:
?- between(1,7,A), between(1,7,B), sum(A,B,11).
A = 4,
B = 7 ;
A = 5,
B = 6 ;
A = 6,
B = 5 ;
A = 7,
B = 4 ;
false.
随着您对 Prolog 的学习取得进展,您最终可能会对学习约束求解器感兴趣。
推荐阅读
- vpn - 具有域 Cloudflare 保护的 VPN
- javascript - 如何使模态居中并将其置于链接按钮下方?
- windows - WIM 文件格式详细信息:XML TOTALBYTES
- sql - 字符串匹配和排序逻辑
- npm - NPM 脚本 - 为文件夹 / glob 中的每个文件运行命令
- android - 在应用程序处于前台时单击收到的通知不会执行任何操作
- pytorch - pyro:如何指定条件分布
- python - AWS Lambda Python - 如何将模块从本地文件导入 app.py
- java - 有没有办法在不创建实体的情况下简单地查询现有数据库 Spring boot
- java - android Studio 错误:配置无效