2

多くの場合、再帰関数でリストを作成したいのですが、正しい方法を見つけることができません。

たとえば(役に立たないが、私が見つけることができる最短)リストから要素を1つずつ取得し、最初のリストと同じ新しいリストを作成したい。

(defn f [x] (list 
          (first x) 
          (if (not= (rest x) '())
          (f (rest x))
          '()       
)))

(f '(1 2 3))

私は手に入れたい

(1 2 3)

しかし、私は得る

(1 (2 (3 ())))

flattenは使いたくない。たとえば、この入力

(f '([1 1] [2 2] [3 3]))

flatten によって破壊されます。

4

1 に答える 1

4

Replace list with cons:

(defn f [x] 
  (cons (first x) 
        (if (not= (rest x) '())
          (f (rest x))
          '())))

Operation (list x y) returns list of two elements: (x y). Operation (cons x y) returns list which head (i.e. first element) is x and tail (the rest of the list) is y where y should be list itself.

于 2013-02-18T08:52:58.993 に答える