找到两个分数的总和prolog

1 prolog fractions

如何计算Prolog中两个分数的总和.让命名函数fracsum(X,Y,Z)x+y=z(x和y的级分,即得Z也如分数).

一些例子:fracsum(1/9,1/9,Z)结果Z=2/9fracsum(5/9,1/9,Z)结果Z=2/3(也得到最低的分数,而不是6/9得到2/3).

因为我是Prolog的初学者,所以任何帮助都会有用.

小智 5

如果你有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.
Run Code Online (Sandbox Code Playgroud)

你可能不知道,但你怎么做1/91 rdiv 9,但这是很容易的,这里是你如何做一个小谓语,做它只是一个理性的,像@lurker已经尝试过在你的问题的评论,说明:

frac_rational(A/B, A rdiv B).
Run Code Online (Sandbox Code Playgroud)

如果你定义这种关系,那么你可以从一个分数中得出一个SWI-Prolog:

?- frac_rational(1/9, Rational).
Rational = 1 rdiv 9.
Run Code Online (Sandbox Code Playgroud)

如果你想知道"但是什么是分数?" 那么你可以看到一个术语并不特别:

?- write_canonical(1/9).
/(1,9)
true.
Run Code Online (Sandbox Code Playgroud)

但当然/是操作员,这就是为什么你可以写,1/9而不必总是写/(1,9):

?- current_op(Precedence, Type, /).
Precedence = 400,
Type = yfx.
Run Code Online (Sandbox Code Playgroud)

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

您的Prolog可能还有一个CLP(Q)库,那么您可以通过以下方式让您的老师感到惊讶:

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

?- {1/9 + X = 2/3}.
X = 5 rdiv 9.
Run Code Online (Sandbox Code Playgroud)

但也许这不是你要问的.