首页 > 解决方案 > 如何在不使用内置算法的情况下在 prolog 中编码除法和余数谓词

问题描述

我需要在 Prolog 中编写除法和余数谓词(是的两个谓词)而不使用内置算术。它需要是新的谓词:除法(X,Y,Z)表示X除以Y的整数结果为Z。余数(X,Y,Z)表示X除以Y的余数为Z。

是的,我需要从头开始编写它们。我不允许使用内置算法。

我怎样才能做到这一点?你能给我一些例子并向我解释它为什么有效吗?

标签: prologdivision

解决方案


好吧,这不是一个完整的解决方案,但您可以在它的基础上进一步扩展它......我将整数表示为一个充满 i 的列表。所以 [i,i,i,i] == 4

我没有给你写将结果转换为整数的过程,但你需要定义这 10 位数字并从那里开始工作以形成多位数字。

我不支持零除法......并且没有真正调试过这个东西......我只是把它作为一个想法并写下来:-D

也许你可以启动它来构建一些很酷的东西!

div(X, Y, Z, R) :-
    div_inner(X, Y, Y, Z, R).

div_inner([], [], _, [i], []).
div_inner([], [i|Y], _, [], [i|Y]).
div_inner([i|X], [], D, [i|Z], R) :-
    div_inner([i|X], D, D, Z, R).
div_inner([i|X], [i|Y], D, Z, R):-
    div_inner(X, Y, D, Z, R).

它只是返回两个值的谓词。Z 是结果 R 是余数!

显然,这里不考虑性能,只是纯粹的艺术编码:-D

玩得开心


推荐阅读