Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 求两个分数之和_Prolog_Fractions - Fatal编程技术网

Prolog 求两个分数之和

Prolog 求两个分数之和,prolog,fractions,Prolog,Fractions,如何在Prolog中计算两个分数的和。让我们用x+Y=zx和Y分数命名函数fracsumX,Y,Z,并将Z也命名为分数 一些示例:fractsum1/9,1/9,Z结果Z=2/9或fractsum5/9,1/9,Z结果Z=2/3也得到最小的除以分数,而不是6/9得到2/3 因为我是Prolog的初学者,任何帮助都会很有用。如果您有SWI Prolog,您不必做任何特殊的事情,只需使用rdiv生成有理数,如下所示: ?- Z is 1 rdiv 9 + 1 rdiv 9. Z = 2 rdiv 9

如何在Prolog中计算两个分数的和。让我们用x+Y=zx和Y分数命名函数fracsumX,Y,Z,并将Z也命名为分数

一些示例:fractsum1/9,1/9,Z结果Z=2/9或fractsum5/9,1/9,Z结果Z=2/3也得到最小的除以分数,而不是6/9得到2/3


因为我是Prolog的初学者,任何帮助都会很有用。

如果您有SWI Prolog,您不必做任何特殊的事情,只需使用rdiv生成有理数,如下所示:

?- Z is 1 rdiv 9 + 1 rdiv 9.
Z = 2 rdiv 9.

?- Z is 5 rdiv 9 + 1 rdiv 9.
Z = 2 rdiv 3.
你可能想知道如何将1/9转换成1 rdiv 9,但这很简单,这里是如何制作一个小谓词,只对一个有理数执行它,就像@Louger在对你的问题的评论中已经试图解释的那样:

frac_rational(A/B, A rdiv B).
如果你定义了这个关系,那么你可以用一个分数生成一个SWI Prolog有理数:

?- frac_rational(1/9, Rational).
Rational = 1 rdiv 9.
如果你想知道分数是什么?然后你可以看到,它并没有什么特别之处,只是一个术语:

?- write_canonical(1/9).
/(1,9)
true.
但当然,/是运算符,这就是为什么您可以写1/9,而不必总是写/1,9:

但是如果你没有SWI Prolog,或者出于教学上的原因,你想自己做有理数运算,这是不够的,你至少要弄清楚如何添加不同分母的分数,以及如何简化分数,这不是一个Prolog问题,而是一个简单的数学问题,出于教学上的原因,在你问如何在Prolog中完成之前,你应该自己回答

您的序言可能还有一个CLPQ库,您可以通过展示以下内容让您的老师感到惊讶:

?- use_module(library(clpq)).
true.

?- {1/9 + X = 2/3}.
X = 5 rdiv 9.

但这可能不是你想要的。

如果你有SWI Prolog,你不需要做任何特殊的事情,只需使用rdiv来生成有理数,如下所示:

?- Z is 1 rdiv 9 + 1 rdiv 9.
Z = 2 rdiv 9.

?- Z is 5 rdiv 9 + 1 rdiv 9.
Z = 2 rdiv 3.
你可能想知道如何将1/9转换成1 rdiv 9,但这很简单,这里是如何制作一个小谓词,只对一个有理数执行它,就像@Louger在对你的问题的评论中已经试图解释的那样:

frac_rational(A/B, A rdiv B).
如果你定义了这个关系,那么你可以用一个分数生成一个SWI Prolog有理数:

?- frac_rational(1/9, Rational).
Rational = 1 rdiv 9.
如果你想知道分数是什么?然后你可以看到,它并没有什么特别之处,只是一个术语:

?- write_canonical(1/9).
/(1,9)
true.
但当然,/是运算符,这就是为什么您可以写1/9,而不必总是写/1,9:

但是如果你没有SWI Prolog,或者出于教学上的原因,你想自己做有理数运算,这是不够的,你至少要弄清楚如何添加不同分母的分数,以及如何简化分数,这不是一个Prolog问题,而是一个简单的数学问题,出于教学上的原因,在你问如何在Prolog中完成之前,你应该自己回答

您的序言可能还有一个CLPQ库,您可以通过展示以下内容让您的老师感到惊讶:

?- use_module(library(clpq)).
true.

?- {1/9 + X = 2/3}.
X = 5 rdiv 9.
但也许这不是你要问的。

在序言中,1/9在fractsum1/9,1/9的上下文中,Z只是一个术语表示“/”1,9。如果你想从分子和分母的角度来检验你的谓词,你可以把它写成fractsumN1/D1,N2/D2,NS/DS。如果您想从分子和分母的角度检查谓词,可以将其写成fractsumN1/D1、N2/D2、NS/DS。