tabla lista ejemplos basicos alimentos alcalinos acidos list elm

ejemplos - lista de alimentos alcalinos



¿Cómo consigo un elemento de la lista por índice en elm? (3)

Tengo una lista, y ahora quiero el artículo nth. En Haskell lo usaría !! , pero no puedo encontrar una variante de olmo de eso.


Elm agregó matrices en 0.12.1 .

import Array myArray = Array.fromList [1..5] myItem = Array.get 2 myArray

Las matrices están indexadas a cero. Los índices negativos no son compatibles actualmente (bummer, lo sé).

Tenga en cuenta que myItem : Maybe Int . Elm hace todo lo posible para evitar los errores de tiempo de ejecución, por lo que el acceso fuera de límites devuelve un Nothing explícito.

Si se encuentra mirando para indexar en una lista en lugar de tomar la cabeza y la cola, debe considerar el uso de una matriz.

Documentación de la matriz Importante: la implementación de la matriz principal está rota; usa este en su lugar!


He usado esto:

(!!): Int -> List a -> Maybe a (!!) index list = -- 3 [ 1, 2, 3, 4, 5, 6 ] if (List.length list) >= index then List.take index list -- [ 1, 2, 3 ] |> List.reverse -- [ 3, 2, 1 ] |> List.head -- Just 3 else Nothing

Por supuesto, obtienes un Maybe y necesitas desenvolverlo cuando usas esta función. No hay garantía de que su lista no esté vacía, o de que solicite un índice imposible (como 1000), por eso es que el compilador de Elm lo obliga a tener en cuenta ese caso.

main = let fifthElement = case 5 !! [1,2,3,4,255,6] of // not sure how would you use it in Haskell?! But look''s nice as infix function. (inspired by @Daniël Heres) Just a -> a Nothing -> -1 in div [] [ text <| toString fifthElement ] // 255


No hay equivalente de esto en Elm. Por supuesto, podrías implementarlo tú mismo.

(Nota: esta no es una función "total", por lo que crea una excepción cuando el índice está fuera de rango).

infixl 9 !! (!!) : [a] -> Int -> a xs !! n = head (drop n xs)

Una mejor manera sería definir una función total, utilizando el tipo de datos Maybe.

infixl 9 !! (!!) : [a] -> Int -> Maybe a xs !! n = if | n < 0 -> Nothing | otherwise -> case (xs,n) of ([],_) -> Nothing (x::xs,0) -> Just x (_::xs,n) -> xs !! (n-1)