2014-09-01 4 views
1

저는이 문제에 익숙하지 않으므로 사소한 일인가 사과드립니다.여기서 nth를 올바르게 사용하려면 어떻게해야합니까?

lst의 크기가 2가 될 수 있으므로 n 번째를 사용하려고하면 IndexOutOfBoundsException이 표시됩니다. 어떻게 해결할 수 있습니까?

(defn invert-helper [lst] 
    (list (nth lst 1) (first lst))) 

감사합니다!

+1

길이를 먼저 테스트하려면 'if'를 사용하십시오. – Barmar

+1

가! 나는 그것을 일찍 시도했고 나는 if 문을 망쳤어야했다. 그래도 이번에 일했습니다. 고마워요! –

+1

'second'도 사용할 수 있습니다.'lst'가 비어 있거나 nil이면 nil을 반환합니다. 물론 그것이 당신이 원하는 것이 아니면 nil이나 빈 시퀀스를 확인해야 할 것입니다. –

답변

0

범위를 벗어난 경우 예외가 발생하지 않도록하려면 nth 함수에 3-arity 옵션이 있습니다. 인덱스가 범위를 벗어날 경우를 대비하여 반환 할 값을 세 번째 인수로 제공합니다. 이렇게하면 처음으로 길이를 확인한 다음 계산되지 않은 순서로 nth을 수행하는 비효율을 피할 수 있습니다.

user=> (nth [1 2 3] 5 nil) 
nil 

user=> (nth [1 2 3] 5 ::not-found) 
:user/not-found 
관련 문제