Bien, tal vez el título es un poco confuso, pero lo que intento hacer es tener una función como esta: f (a:b:c:d:is) = ...
pero ser capaz de consultar a:b:c:d
sin escribirlo de nuevo. Como resultado, no puedo hacer algo como [email protected](a:b:c:d):is
y obtener el resultado esperado. ¿Algunas ideas?Usar patrones como no vinculantes para la Lista completa en Haskell
Respuesta
Lo mejor que puedo pensar es el uso de view patterns, así:
{-# LANGUAGE ViewPatterns #-}
f (splitAt 4 -> ([email protected][a,b,c,d], is)) = is ++ [d,c,b,a] ++ as
+1, eso es lo mejor que no pude pensar en OTTOMH. –
Puede evitar el lenguaje pragma simplemente usando protectores de patrones. "f xs | (e @ [a, b, c, d], es) <- splitAt 4 xs = e" – Sarah
Esperaba algo tan "limpio" como as-patterns, pero gracias de todos modos. – byrondrossos
No se puede hacer eso, una razón es que a:b:c:d
no es una expresión bien tipada. Por la unión en la definición de f
, a, b, c, d
todos tienen el mismo tipo, responda t
, pero el tipo de la lista constructor es
(:) :: t -> [t] -> [t]
Puede ordenar de lograr lo que quiere mediante la unión let foo = take 4 inputList
. Es cierto que es torpe, pero no puedo pensar en nada mejor en la parte superior de mi cabeza.
+1 para explicar el problema. –
- 1. Coincidencia de patrones de la lista anidada en Haskell
- 2. vinculantes
- 3. Lista completa de sinónimos para reducir
- 4. ¿La "Lista" se maneja especialmente en la coincidencia de patrones de Haskell?
- 5. Seq de coincidencia de patrones en Haskell
- 6. coincidencia de patrones variables de equivalentes en Haskell, como en Prolog
- 7. Haskell: no se puede usar "map putStrLn"?
- 8. cadena Haskell a la lista
- 9. ¿Cómo configurar WebView como no pantalla completa?
- 10. ¿Los patrones aritméticos son legales Haskell?
- 11. Lista de patrones de conversión Log4net
- 12. ¿Por qué obtengo "patrones no exhaustivos en la función ..." cuando invoco mi función de subcadena Haskell?
- 13. En Haskell, ¿por qué los patrones no exhaustivos no son errores en tiempo de compilación?
- 14. ¿Se puede usar la coincidencia de patrones para enlazar el último elemento de una lista?
- 15. Jquery como selector en Haskell
- 16. Haskell reemplazar elemento en la lista
- 17. p4v no muestra la lista completa de archivos desprotegidos
- 18. Haskell Coincidencia de patrones en el conjunto vacío
- 19. Lista completa de define para Delphi versiones
- 20. ¿Debo usar extensiones GHC Haskell o no?
- 21. ¿Qué álgebra lineal usar para OpenGL en Haskell?
- 22. coincidencia de patrones Haskell en GADTs con tipos de datos
- 23. Coincidencia de patrones no especializados
- 24. Listas definidas como ¿Tal vez en Haskell? Por qué no?
- 25. Haskell: Convertir a la lista de datos
- 26. Me siento como una rata en una fábrica de tuberías. ¿Estrategia para diseñar soluciones vinculantes WPF?
- 27. subversion python vinculantes documentación?
- 28. Subdividiendo una lista en haskell
- 29. Convierte la lista de enteros en un int (como concat) en haskell
- 30. patrón no exhaustiva en Haskell lista por comprensión
Querrá usuario la sintaxis correcta, e @ (a: b: c: d: es) – Sarah
Oh, ya veo a lo que te refieres Si está usando (e @ (a: b: c: d): is), entonces se trata de una lista de listas donde d es la cola de las listas internas. No creo que puedas ayudar con esto como patrones, ya que los parens para agrupar serán necesarios. – Sarah