我需要用Prolog编写除法和余数谓词(是的,两个谓词),而不使用内置算法。它需要是新的谓词:除法(X,Y,Z)意味着X除以Y的整数结果是Z。余数(X,Y,Z)意味着X除以Y的余数是Z。
是的,我需要从头开始编写代码。我不被允许使用内置算法。
我该怎么做呢?你能给我举个例子,给我解释一下为什么它是有效的吗?
发布于 2020-06-07 05:47:39
嗯,这不是一个完整的解决方案,但你可以在它的基础上进一步发展……我将整数表示为一个充满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
玩得开心
发布于 2020-06-09 11:53:27
使用DCGs:
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(_, []) --> [].测试用例:
?- compute_divrem(100,7,Div,Rem).
Div = 14,
Rem = 2.https://stackoverflow.com/questions/62235145
复制相似问题