首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prolog如何使用数学操作

prolog如何使用数学操作
EN

Stack Overflow用户
提问于 2015-10-09 12:40:27
回答 2查看 604关注 0票数 4

我是prolog编程的新手,我使用swi.现在我被一些数学题缠住了

正如我们所知道的,谓词:A is 3+3.工作得很好,答案是A=6

但是如果我想从0~9找到两位数(A和B),a+b=6 6 is A+B就不工作了。所以我想知道是否有一个简单的方法可以做到这一点?如果我想从0~9找到3位数字(A,B和C),A+B+C=13是如何做到的呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-09 12:50:24

在每个Prolog实现中使用的更简单的方法:声明一个谓词数字/1(表示法谓词/N表示谓词有N个参数)

代码语言:javascript
复制
digit(D) :- member(D, [0,1,2,3,4,5,6,7,8,9]).

然后你可以问

代码语言:javascript
复制
?- digit(A),digit(B),6 is A+B.
A = 0,
B = 6 ;
A = 1,
B = 5 ;
...

由于sum是对称的,所以您可能需要减少重复的解决方案

代码语言:javascript
复制
?- digit(A),digit(B),A=<B,6 is A+B.

使用库(Clpfd)可以避免定义数字/1谓词,并获得许多功能:

代码语言:javascript
复制
?- [library(clpfd)].
true.

?- [A,B,C] ins 0..9, A+B+C #= 13, label([A,B,C]).
A = 0,
B = 4,
C = 9 ;
A = 0,
B = 5,
C = 8 
...

请注意,现在匿名者可以留在‘任务’的左边.

票数 2
EN

Stack Overflow用户

发布于 2015-10-09 13:00:16

用prolog做数学很有趣。这看起来像一个任务,我不想解决它,但我会尽力帮助你自己找到答案。考虑到问题的范围有限,您可能可以通过创建一个简单的prolog程序从0到9定义每个整数。请记住,您还可以定义如下功能:

add3(A,B,C,SUM) :- SUM是A+B+ C。

你可以用方程求解器来解决这个问题。见以下答案:SWI中的方程求解器

或者使用约束逻辑编程。http://www.swi-prolog.org/man/clpqr.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33038577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档