haskell模数原始递归

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,但由于我的原始递归函数除法依赖于模数我不能做哈哈

Ala*_*ter 0

解决这个问题的方法是

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)