29
Introducci´ on a ML II Jos´ e de Jes´ us Lavalle Mart´ ınez http://aleteya.cs.buap.mx/ ˜ jlavalle/ Benem´ erita Universidad Aut´ onoma de Puebla Facultad de Ciencias de la Computaci´ on Licenciatura en Ciencias de la Computaci´ on Fundamentos de Lenguajes de Programaci´ on CCOS 255 Oto˜ no 2020 Jos´ e de Jes´ us Lavalle Mart´ ınez (FCC-BUAP) Introducci´ on a ML II Oto˜ no 2020 1 / 19

Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Introduccion a ML II

Jose de Jesus Lavalle Martınezhttp://aleteya.cs.buap.mx/˜jlavalle/

Benemerita Universidad Autonoma de PueblaFacultad de Ciencias de la Computacion

Licenciatura en Ciencias de la ComputacionFundamentos de Lenguajes de Programacion

CCOS 255

Otono 2020

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 1 / 19

Page 2: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Contenido

1 Mas sobre listas

2 ales

3 Alto orden

4 Ejercicios

5 Asesorıas

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 2 / 19

Page 3: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte una lista primer intento

Probablemente su primer intento para invertir dos listas fue:fun i l w ( n u l ) = n u l| i l w ( ht ( h , t ) ) = ht ( i l w ( t ) , h ) ;

Pero el interprete de ML nos respondio de la siguiente manera:

- fun ilw(nul) = nul| ilw(ht(h,t)) = ht(ilw(t),h);! Toplevel input:! | ilw(ht(h,t)) = ht(ilw(t),h);! ˆˆˆˆˆˆ! Type clash: expression of type! ’a Milist! cannot have type! ’a! because of circularity-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 3 / 19

Page 4: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte una lista primer intento

Probablemente su primer intento para invertir dos listas fue:fun i l w ( n u l ) = n u l| i l w ( ht ( h , t ) ) = ht ( i l w ( t ) , h ) ;

Pero el interprete de ML nos respondio de la siguiente manera:

- fun ilw(nul) = nul| ilw(ht(h,t)) = ht(ilw(t),h);! Toplevel input:! | ilw(ht(h,t)) = ht(ilw(t),h);! ˆˆˆˆˆˆ! Type clash: expression of type! ’a Milist! cannot have type! ’a! because of circularity-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 3 / 19

Page 5: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte una lista

La forma correcta para invertir una lista es:fun i n v ( n u l ) = n u l| i n v ( ht ( h , t ) ) = u n e L i s t ( i n v ( t ) , ht ( h , n u l ) ) ;

Ası obtenemos:

- fun inv(nul) = nul| inv(ht(h,t)) = uneList(inv(t), ht(h, nul));> val ’a inv = fn : ’a Milist -> ’a Milist- inv(ht(1, ht(2, ht(3, ht(4, nul)))));> val it = ht(4, ht(3, ht(2, ht(1, nul)))) : int Milist-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 4 / 19

Page 6: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte una lista

La forma correcta para invertir una lista es:fun i n v ( n u l ) = n u l| i n v ( ht ( h , t ) ) = u n e L i s t ( i n v ( t ) , ht ( h , n u l ) ) ;

Ası obtenemos:

- fun inv(nul) = nul| inv(ht(h,t)) = uneList(inv(t), ht(h, nul));> val ’a inv = fn : ’a Milist -> ’a Milist- inv(ht(1, ht(2, ht(3, ht(4, nul)))));> val it = ht(4, ht(3, ht(2, ht(1, nul)))) : int Milist-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 4 / 19

Page 7: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Listas en ML

- [1, 2, 3, 4];> val it = [1, 2, 3, 4] : int list- nil;> val ’a it = [] : ’a list- 1::nil;> val it = [1] : int list- 2::it;> val it = [2, 1] : int list- 3::it;> val it = [3, 2, 1] : int list- 1::2::3::nil;> val it = [1, 2, 3] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 5 / 19

Page 8: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante I

[1, 2, 3, 4] -> [4, 3, 2, 1]

1::[2, 3, 4], nil -> [2, 3, 4], 1::nil2::[3, 4], [1] -> [3, 4], 2::[1]3::[4], [2, 1] -> [4], 3::[2, 1]4::[], [3, 2, 1] -> [], 4::[3, 2, 1][], [4, 3, 2, 1] -> [4, 3, 2, 1]

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 6 / 19

Page 9: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante II

fun i n v p a ( n i l , pa ) = pa| i n v p a ( h : : t , pa ) = i n v p a ( t , h : : pa ) ;

- fun invpa(nil,pa) = pa| invpa(h::t, pa) = invpa(t, h::pa);> val ’a invpa = fn : ’a list * ’a list -> ’a list- invpa([1, 2, 3, 4], nil);> val it = [4, 3, 2, 1] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 7 / 19

Page 10: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante II

fun i n v p a ( n i l , pa ) = pa| i n v p a ( h : : t , pa ) = i n v p a ( t , h : : pa ) ;

- fun invpa(nil,pa) = pa| invpa(h::t, pa) = invpa(t, h::pa);> val ’a invpa = fn : ’a list * ’a list -> ’a list- invpa([1, 2, 3, 4], nil);> val it = [4, 3, 2, 1] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 7 / 19

Page 11: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante III

fun i n v e r s a ( l ) =l e t

fun i n v p a ( n i l , pa ) = pa| i n v p a ( h : : t , pa ) = i n v p a ( h , h : : pa )

i ni n v p a ( l , n i l )

end ;

- fun inversa(l) =let

fun invpa(nil, pa) = pa| invpa(h::t, pa) = invpa(t, h::pa)

ininvpa(l, nil)

end;> val ’a inversa = fn : ’a list -> ’a list- inversa([1, 2, 3, 4]);> val it = [4, 3, 2, 1] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 8 / 19

Page 12: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante III

fun i n v e r s a ( l ) =l e t

fun i n v p a ( n i l , pa ) = pa| i n v p a ( h : : t , pa ) = i n v p a ( h , h : : pa )

i ni n v p a ( l , n i l )

end ;

- fun inversa(l) =let

fun invpa(nil, pa) = pa| invpa(h::t, pa) = invpa(t, h::pa)

ininvpa(l, nil)

end;> val ’a inversa = fn : ’a list -> ’a list- inversa([1, 2, 3, 4]);> val it = [4, 3, 2, 1] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 8 / 19

Page 13: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Invierte con parametro acumulante IV

- inversa;> val ’a it = fn : ’a list -> ’a list- invpa;! Toplevel input:! invpa;! ˆˆˆˆˆ! Unbound value identifier: invpa-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 9 / 19

Page 14: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

De Milist a list

fun M i l 2 l ( n u l ) = n i l| M i l 2 l ( ht ( h , t ) ) = h : : M i l 2 l ( t ) ;

- fun Mil2l(nul) = nil| Mil2l(ht(h,t)) = h::Mil2l(t);> val ’a Mil2l = fn : ’a Milist -> ’a list- Mil2l(ht(1, ht(2, ht(3, ht(4, nul)))));> val it = [1, 2, 3, 4] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 10 / 19

Page 15: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

De Milist a list

fun M i l 2 l ( n u l ) = n i l| M i l 2 l ( ht ( h , t ) ) = h : : M i l 2 l ( t ) ;

- fun Mil2l(nul) = nil| Mil2l(ht(h,t)) = h::Mil2l(t);> val ’a Mil2l = fn : ’a Milist -> ’a list- Mil2l(ht(1, ht(2, ht(3, ht(4, nul)))));> val it = [1, 2, 3, 4] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 10 / 19

Page 16: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

ales I

Queremos modelar en ML a los naturales.

1 0 es un natural,2 si n es un natural entonces s(n) es un natural,3 n es un natural solo si se obtiene por las reglas 1 y 2 anteriores.

datatype a l e s = z | s of a l e s ;

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 11 / 19

Page 17: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

ales I

Queremos modelar en ML a los naturales.1 0 es un natural,2 si n es un natural entonces s(n) es un natural,3 n es un natural solo si se obtiene por las reglas 1 y 2 anteriores.

datatype a l e s = z | s of a l e s ;

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 11 / 19

Page 18: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

ales I

Queremos modelar en ML a los naturales.1 0 es un natural,2 si n es un natural entonces s(n) es un natural,3 n es un natural solo si se obtiene por las reglas 1 y 2 anteriores.

datatype a l e s = z | s of a l e s ;

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 11 / 19

Page 19: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

ales II

- datatype ales = z | s of ales;> New type names: =ales

datatype ales = (ales,{con s : ales -> ales, con z : ales})con s = fn : ales -> alescon z = z : ales

- z;> val it = z : ales- s z;> val it = s z : ales- s(s z);> val it = s(s z) : ales- s(s(s z));> val it = s(s(s z)) : ales-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 12 / 19

Page 20: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Alto orden, funciones como parametros I

fun a p l i c a ( n i l , f ) = n i l| a p l i c a ( h : : t , f : i n t −> i n t ) = f ( h ) : : a p l i c a ( t , f ) ;

- fun aplica(nil, f) = nil| aplica(h::t, f:int->int) = f(h)::aplica(t, f);> val aplica = fn : int list * (int -> int) -> int list-

fun s q r n = n∗n ;

- fun sqr n = n*n;> val sqr = fn : int -> int- aplica([1, 2, 3, 4], sqr);> val it = [1, 4, 9, 16] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 13 / 19

Page 21: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Alto orden, funciones como parametros I

fun a p l i c a ( n i l , f ) = n i l| a p l i c a ( h : : t , f : i n t −> i n t ) = f ( h ) : : a p l i c a ( t , f ) ;

- fun aplica(nil, f) = nil| aplica(h::t, f:int->int) = f(h)::aplica(t, f);> val aplica = fn : int list * (int -> int) -> int list-

fun s q r n = n∗n ;

- fun sqr n = n*n;> val sqr = fn : int -> int- aplica([1, 2, 3, 4], sqr);> val it = [1, 4, 9, 16] : int list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 13 / 19

Page 22: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Alto orden, funciones como parametros II

Lo podemos hacer mejor:fun a p l i c a g ( n i l , f ) = n i l| a p l i c a g ( h : : t , f ) = f ( h ) : : a p l i c a g ( t , f ) ;

fun aplicag(nil, f) = nil| aplicag(h::t, f) = f(h)::aplicag(t, f);> val (’a, ’b) aplicag = fn : ’a list * (’a -> ’b) -> ’b list

- aplicag([1, 2, 3, 4], sqr);> val it = [1, 4, 9, 16] : int list- ceil;> val it = fn : real -> int- aplicag([1.1, 2.2, 3.3, 4.4], ceil);> val it = [2, 3, 4, 5] : int list- aplicag([1.1, 2.2, 3.3, 4.4], floor);> val it = [1, 2, 3, 4] : int list- fun sqrr n:real = n*n;> val sqrr = fn : real -> real- aplicag([1.1, 2.2, 3.3, 4.4], sqrr);> val it = [1.21, 4.84, 10.89, 19.36] : real list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 14 / 19

Page 23: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Alto orden, funciones como parametros II

Lo podemos hacer mejor:fun a p l i c a g ( n i l , f ) = n i l| a p l i c a g ( h : : t , f ) = f ( h ) : : a p l i c a g ( t , f ) ;fun aplicag(nil, f) = nil| aplicag(h::t, f) = f(h)::aplicag(t, f);> val (’a, ’b) aplicag = fn : ’a list * (’a -> ’b) -> ’b list

- aplicag([1, 2, 3, 4], sqr);> val it = [1, 4, 9, 16] : int list- ceil;> val it = fn : real -> int- aplicag([1.1, 2.2, 3.3, 4.4], ceil);> val it = [2, 3, 4, 5] : int list- aplicag([1.1, 2.2, 3.3, 4.4], floor);> val it = [1, 2, 3, 4] : int list- fun sqrr n:real = n*n;> val sqrr = fn : real -> real- aplicag([1.1, 2.2, 3.3, 4.4], sqrr);> val it = [1.21, 4.84, 10.89, 19.36] : real list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 14 / 19

Page 24: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Alto orden, funciones como parametros II

Lo podemos hacer mejor:fun a p l i c a g ( n i l , f ) = n i l| a p l i c a g ( h : : t , f ) = f ( h ) : : a p l i c a g ( t , f ) ;fun aplicag(nil, f) = nil| aplicag(h::t, f) = f(h)::aplicag(t, f);> val (’a, ’b) aplicag = fn : ’a list * (’a -> ’b) -> ’b list

- aplicag([1, 2, 3, 4], sqr);> val it = [1, 4, 9, 16] : int list- ceil;> val it = fn : real -> int- aplicag([1.1, 2.2, 3.3, 4.4], ceil);> val it = [2, 3, 4, 5] : int list- aplicag([1.1, 2.2, 3.3, 4.4], floor);> val it = [1, 2, 3, 4] : int list- fun sqrr n:real = n*n;> val sqrr = fn : real -> real- aplicag([1.1, 2.2, 3.3, 4.4], sqrr);> val it = [1.21, 4.84, 10.89, 19.36] : real list-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 14 / 19

Page 25: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Ejercicios

En los ejercicios solo puede definir las funciones hasta ahora definidas y lasque vaya definiendo, por ejemplo, para multiplicales puede usarsumales, para exponenciales puede usar multiplicales.

1 Defina en ML las siguientes funciones:1 ultimo = fn:’a list -> ’a, que obtiene el ultimo elemento de una

lista.2 long = fn:’a list -> int, que obtiene la longitud de una lista.3 nesimo = fn:’a list * int -> ’a, que obtiene el n-esimo

elemento de una lista.2 Utilizando la definicion del tipo ales defina las siguientes funciones:

1 sumales = fn:ales * ales -> ales, que suma dos elementos deales.

2 multiplicales = fn:ales * ales -> ales, que multiplica doselementos de ales.

3 exponenciales = fn:ales * ales -> ales, que exponencia dosalesl, es decir, exponenciales(m, n) = mn.

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 15 / 19

Page 26: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Ejemplo de exponenciales I

exponenciales(2, 3) = 8exponenciales(2, 3) = multiplicales(2, exponenciales(2, 2)) =multiplicales(2, multiplicales(2, exponenciales(2, 1))) =multiplicales(2, multiplicales(2,multiplicales(2, exponenciales(2, 0)))) =multiplicales(2, multiplicales(2, multiplicales(2, 1))) =multiplicales(2, multiplicales(2, 2)) =multiplicales(2, 4) = 8

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 16 / 19

Page 27: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Ejemplo de exponenciales II

exponenciales(s(s z), s(s(s z)))

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 17 / 19

Page 28: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

Ejemplo de sumales

Con sumales prueben 23456 + 34567

ales2int = fn : ales -> intint2ales = fn : int -> alessumales(int2ales(23456), int2ales(34567))

- int2ales(23456);> val it = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s#

))))))))))))))))))) : ales- ales2int(it);> val it = 23456 : int-

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 18 / 19

Page 29: Introducción a ML IIaleteya.cs.buap.mx/~jlavalle/flp/4 An Introduction to ML... · 2021. 1. 28. · 3 n es un natural s´olo si se obtiene por las reglas 1 y 2 anteriores. datatype

sumales

fun s u ma l e s ( z , n ) = n| s u ma l e s ( s m, n ) = s ( su m a l es (m, n ) ) ;

sumales(s(s z), s(s(s z))) = s(sumales(s z, s(s(s z)))) =s(s(sumales(z, s(s(s z))))) = s(s(s(s(s z))))

Jose de Jesus Lavalle Martınez (FCC-BUAP) Introduccion a ML II Otono 2020 19 / 19