Ala*_*ter 6 primitive haskell functional-programming
我正在尝试使用原始递归函数在haskell中创建一个模数函数.我知道这是可能的(因为它在维基百科上的示例函数列表中)
而且我知道我在逻辑上也是这样做的..但我无法实现它!
IE,逻辑是(不是原始递归或haskell)
function mod(a, b){
while(a > b)
a -= b
return a;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用递归定义(再次不是haskel)
function mod(a, b){
if(a < b) return a;
return mod(a - b, b);
}
Run Code Online (Sandbox Code Playgroud)
但我似乎无法使用原始递归函数来实现它.我不能做的是<b的逻辑
我认为要真正解决我的问题我需要某种定义的逻辑,例如(再次不是haskel)
reduce(a, b)
= a >= b -> a-b
otherwise x
Run Code Online (Sandbox Code Playgroud)
如果有人能帮我解决这个问题,我真的很感激,谢谢
编辑::我想可能定义一个模数函数利用除法,即mod(a,b)= a - (a/b)*b,但由于我的原始递归函数除法依赖于模数我不能做哈哈
解决这个问题的方法是
mod(0, y)
= zero(y)
mod(x, 0)
= zero(x)
mod(x + 1, y)
= mult3(succ(mod(x, y)), sign(y), notsign(eq(mod(x, y), diff(y, 1))))
Run Code Online (Sandbox Code Playgroud)