2014-04-21 3 views

답변

12

Elm에는 이에 해당하는 것이 없습니다. 물론 직접 구현할 수도 있습니다.

(참고 : 이것은 "합계"기능이 아니므로 색인이 범위를 벗어날 때 예외를 만듭니다.)

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

더 나은 방법은 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) 
+0

그냥 다른 대안을 추가 할 수있는 (마지막() 색인 목록을 -.> 인덱스는 0 또는 1이 아닌 경우에만 작동하지만 당신은 아이디어를 얻을 사용할 때 –

+0

하스켈 범위 부족 예외를 제기 (!) 범위를 벗어났습니다. 아마 사용하는 것이 맞을 것 같지만 목록에서 요소를 요청하고 목록에있는 요소의 형식이 아닌 형식을 얻는 것이 이상하게 보입니다 (이 경우에는) – TheSeamau5

+6

최근 버전의 Elm에서는'get n xs = List.head (List.drop n xs)'를 정의 할 수 있으며,이 함수는 완료되었습니다. 위의'| '구문은 0.16에서 제거되었습니다. – mgold

26

엘름은 0.12.1에 배열을 추가했습니다.

import Array 

myArray = Array.fromList [1..5] 

myItem = Array.get 2 myArray 

배열의 인덱스는 0입니다. 음수 인덱스는 현재 지원되지 않습니다 (허풍, 나는 알고 있습니다).

참고 : myItem : Maybe Int. Elm은 런타임 오류를 피할 수있는 모든 작업을 수행하므로 범위를 벗어난 액세스는 명시 적으로 Nothing을 반환합니다.

머리와 꼬리가 아닌 목록에 색인을 추가하려는 경우 배열을 사용해야합니다.

Array documentation중요 : 코어 배열 구현이 손상되었습니다. 대신 this one을 사용하십시오!

+0

'negativeGet index array = get (index + length array) array' – hoosierEE

+0

https://github.com/elm-lang/에 비추어 마지막 줄이 참이 유지됩니까? core/issues/649? – KillerX

+0

고정 배열 구현이 병합되었지만 해제되지 않았습니다. – mgold

0

나는 이것을 사용했습니다 : 물론

(!!): 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 

당신은 아마 얻을 당신은 당신이이 기능을 사용 할 때 랩을 해제해야합니다. 목록이 비어 있지 않거나 (1000과 같은) 불가능한 색인을 요구한다는 보장은 없습니다 - 그래서 elm 컴파일러가 귀하에게 해당 사례를 설명하도록합니다.

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 
관련 문제