haskell modulus primitive recursion

Я пытаюсь создать функцию modulus в haskell, используя примитивные рекурсивные функции. Я знаю, что это возможно (потому что это есть в списке примеров функций в википедии)

И я знаю, как я логически должен это сделать... Но я просто не могу это реализовать!

То есть, логика есть (не примитивная рекурсия или haskell)

function mod(a, b){
  while(a > b)
    a -= b
  return a;
}

Которую я могу определить с помощью рекурсии (опять же не haskel)

function mod(a, b){
  if(a < b) return a;
  return mod(a - b, b);
} 

Но я просто не могу реализовать ее с помощью примитивных рекурсивных функций. Я не могу реализовать логику a

Я думаю, чтобы действительно решить мою проблему, мне нужна какая-то определенная логика, такая как (опять же не haskel)

reduce(a, b)
    = a >= b -> a-b 
    otherwise x

Если кто-то может помочь мне с любой частью этого, я буду очень признателен, спасибо

Edit:: Я думал потенциально определить функцию модуля, используя деление, т.е. mod(a, b) = a - (a/b) * b, но так как моя примитивная рекурсивная функция для деления полагается на modulo, я не могу этого сделать haha

6
задан hugomg 25 December 2011 в 14:15
поделиться