fn menor(x:int, y:int): bool = if y > x then true else false
fun isDiv(x:int, y:int): bool = if x > y then isDiv(x-y, y) else ~menor(x,y)
Entre otras cosas se añade la detección automática de errores en los parámetros enviados:
- Verificar errores en la cantidad de argumentos
- Verificar valores positivos en los argumentos
/* Probando Tuplas, declaracion de funciones
* y local binding
* atscc -o manyFun manyFun.dats
* ./manyFun
*/
// Funcion recursiva para saber si un numero es divisible de otro
fn menor(x:int, y:int): bool = if y > x then true else false
fun isDiv(x:int, y:int): bool = if x > y then isDiv(x-y, y) else ~menor(x,y)
// Main
implement main(argc, argv) = let
// Verificar errores en la cantidad de argumentos
val () =
if argc < 3 then begin
prerrf ("Cantidad de argumentos erronea: %i", @(argc));
exit 1;
end
val () = assert(argc >= 3)
// Asignar los argumentos en los variables
val n1 = int1_of (argv.[1])
val n2 = int1_of (argv.[2])
// Verificar valores positivos en los argumentos
val () =
if n1 < 1 then begin
prerrf ("Argumento: %i debe ser positivo", @(n1));
exit 1;
end
val () = assert(n1 >= 1)
val () =
if n2 < 1 then begin
prerrf ("Argumento: %i debe ser positivo", @(n2));
exit 1;
end
val () = assert(n2 >= 1)
in // Realizar operaciones
printf("%d divisible entre %d ???: \n", @(n1, n2));
print(isDiv(n1, n2)); print_newline();
end
Para detalles sobre algún aspecto particular puede consultarse también el tutorial de ATS. Añado también un video que demuestra el funcionamiento del código:
Saludos
faith4of9the5heart
No hay comentarios:
Publicar un comentario