Estoy trabajando en el libro The Haskell Road to Logic, Maths and Programming. (Estoy solo a la mitad del capítulo 1, pero lo estoy disfrutando hasta el momento y tengo la intención de continuar.) He leído la sección 1.5 "Jugar al juego Haskell", que "consiste en una serie de ejemplos adicionales para familiarízate con [Haskell] ". Hasta ahora he aprendido sobre funciones, declaraciones de tipo, ecuaciones protegidas, un poco sobre la coincidencia de patrones de lista y dónde &.¿Por qué obtengo "patrones no exhaustivos en la función ..." cuando invoco mi función de subcadena Haskell?
Estoy atascado en el ejercicio 1.17, lo que nos pide que escriba una función de subcadena :: String -> String -> Bool donde:
- si x es un prefijo de YS, xs es una subcadena de ys
- si ys es igual a y: ys' y xs es una subcadena de ys', xs es una subcadena de ys
- otra cosa es una subcadena de ys
he utilizado la función de prefijo proporcionado en una ejemplo anterior:
prefix :: String -> String -> Bool
prefix [] ys = True
prefix (x:xs) [] = False
prefix (x:xs) (y:ys) = (x==y) && prefix xs ys
y luego trató:
substring :: String -> String -> Bool
subsstring xs [] = False
substring xs (y:ys) | prefix xs (y:ys) = True
| substring xs ys = True
| otherwise = False
... y que otras permutaciones de esto.
Cuando corro substring "abc" "xxxabcyyy"
me sale True
, pero cuando corro substring "abc" "xxxabyyy"
me sale " * Excepción: substring.hs: (3,0) - (5,45): patrones no exhaustivos en función de subcadena". No puedo entender por qué. No entiendo cómo podría haber patrones no exhaustivos cuando utilizo "de lo contrario".
Por cierto, el libro aún no ha cubierto if-then-else. Preferiría mantener eso fuera de mi solución, por ahora.
No puedo decidir si me da vergüenza que haya perdido el tiempo con un error tipográfico o que me haya complacido que mi solución haya funcionado a excepción del error tipográfico. Gracias. –
Esto es interesante. Puede tener uno de los sistemas de tipo más sofisticados, un error tipográfico no puede atraparlo. – gawi
para eso están las advertencias. – muhmuhten