2014-09-01 68 views
1

我很新,所以我很抱歉,如果這似乎微不足道。如何在這裏正確使用nth?

當試圖使用nth時,我得到一個IndexOutOfBoundsException,因爲lst的大小可能小於2.我該如何解決這個問題?

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

謝謝!

+1

使用'if'先測試長度。 – Barmar 2014-09-01 23:43:41

+1

Gah!我早些時候嘗試過,我一定搞砸了我的if語句。儘管這次工作。非常感謝! – 2014-09-01 23:52:44

+1

你也可以使用'second',如果'lst'爲空或零,則返回nil。當然,如果這不是你想要的,你必須檢查零或空序列。 – 2014-09-02 00:39:06

回答

0

nth函數有一個3-arity選項的情況下,你不希望拋出一個例外,因爲出界。您提供了作爲第三個參數的索引超出範圍時要返回的值。這樣可以避免首先檢查長度,然後以不計數的順序執行nth的低效率。

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

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