首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用内置算法的情况下在prolog中编写除法和余数谓词

问如何在不使用内置算法的情况下在prolog中编写除法和余数谓词
EN

Stack Overflow用户
提问于 2020-06-07 01:05:24
回答 2查看 170关注 0票数 0

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

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

我该怎么做呢?你能给我举个例子,给我解释一下为什么它是有效的吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-07 05:47:39

嗯,这不是一个完整的解决方案,但你可以在它的基础上进一步发展……我将整数表示为一个充满i的列表,所以i,I == 4

我没有给你写一个结果到整数的转换,但你需要定义10位数字,并从那里开始工作,形成多位数字。

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

也许你可以开始用它来构建一些很酷的东西!

代码语言:javascript
复制
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

玩得开心

票数 0
EN

Stack Overflow用户

发布于 2020-06-09 11:53:27

使用DCGs:

代码语言:javascript
复制
compute_divrem(X, Y, Div, Rem):-
  Y\=0,
  length(LX, X), length(LY, Y),
  once(phrase(divrem(LY, LDiv), LX, LRem)),
  length(LDiv, Div), length(LRem, Rem).

divrem(X, [_|LDiv]) --> X, divrem(X, LDiv).
divrem(_, []) --> [].

测试用例:

代码语言:javascript
复制
?- compute_divrem(100,7,Div,Rem).
Div = 14,
Rem = 2.
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62235145

复制
相关文章

相似问题

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