wenas soy nuevo en el foro pero necesito ayuda urgente con un tad que me esta dando muxos kebraderos de cabeza... las operaciones que me estan dando problemas son la division y modulo
estoy usando maude... pero la notacion es muy sencilla, simplemente no estoy seguro de reglas tan estrictas que debo seguir como x ej: cero / cero = infinito o indefinido? he de aclarar que se trabaja solo con naturales... o esPar(cero) ?
todas las operaciones me funcionan pero m surgen dudas como stas... aki dejo el codigo(señalo en negrita mis dudas):
fmod NATURAL is
protecting BOOL .
sort N .
sort NoN .
subsort NoN < N .
op Negativo : -> NoN .
op Infinito : -> NoN .
op Indefinido : -> NoN .
op division : N N -> N .
op div : N N -> N .
op modulo : N N -> N .
op mitad : N -> N .
op esPar : N -> Bool .
vars n m : N .
eq division(cero, cero) = Indefinido . eq division(n, cero) = Infinito .
eq division(cero, sucesor(n)) = cero .
eq division(n, m) = if (esMayor(m, n)) then Indefinido else div(n, m) fi .
eq div(n, m) = if (esMenorIgual(suma(m, m), n))and(esMayor(n, m)) then suma(sucesor(cero), (div(resta(n,m), m))) else sucesor(cero) fi .
eq modulo(cero, cero) = Indefinido . eq modulo(n, n) = cero . eq modulo(n, m) = if esMayor(n, m) then resta(n, producto(division(n, m), m)) else Indefinido fi .
eq mitad(n) = division(n, sucesor(sucesor(cero))) .
eq esPar(sucesor(cero)) = false .
eq esPar(cero) = true . eq esPar(n) = if (esIgual(modulo(n, sucesor(sucesor(cero))), cero)) then true else false fi
.
eq esPar(Indefinido) = false .
eq esPar(Infinito) = false .endfm
gracias x la ayuda.... un saludo