2014-09-01 52 views

回答

3

这应该可以解决这个问题:

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

(defn invert [lst] 
    (if (empty? lst) 
    () 
    (cons (invert-helper lst) (invert (rest lst))))) 

这就是:invert-helper功能必须在invert第一次使用之前定义。

+0

这是有道理的,但现在我得到和索引超出界限异常clojure.lang.RT.nthFrom(RT.java:795)。 – 2014-09-01 21:50:27

+1

@ChrisPhillips你打电话给'(第nth lst 1)''lst'可能只有一个元素 - 这会抛出你看到的异常。 – soulcheck 2014-09-01 21:53:10

+1

@ChrisPhillips在soulcheck中提到,错误是由于lst'可能少于两个元素造成的。可以肯定的是:不要忘记clojure中的索引从0开始,即:第一个元素是'(第n个1)',第2个元素是'(第1个1)',依此类推。 – 2014-09-01 21:58:36

2

另一种选择,除了使用它们之前定义的所有功能,可能会宣布invert-helperinvert

(declare invert-helper) 

(defn invert [lst] 
    (if (empty? lst) 
    () 
    (cons (invert-helper lst) (invert (rest lst))))) 

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

你还呼吁(nth lst 1)其中lst可能只有一个元素 - 这将抛出一个异常。