Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-10-13

ClojureでL-99 (P22 指定した範囲の数列のリスト)

| 06:26 | ClojureでL-99 (P22 指定した範囲の数列のリスト) - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでL-99 (P22 指定した範囲の数列のリスト) - わだばLisperになる

fromの反対のdownfromとか定義してみましたが、もう一工夫という感じです。

ちなみに、標準で、Clojureには、rangeがありますが、このお題と同じ動きではありません。

(defn downfrom 
  ([start]
     (downfrom start 1))
  ([start step]
     (iterate #(- % step) start)))

(defn
  #^{:doc "P22 (*) Create a list containing all integers within a given range."
     :test (do (test= (my-range 4 9)
                      '(4 5 6 7 8 9))
               (test= (my-range 9 4)
                      '(9 8 7 6 5 4))
               (test= (my-range 3 3)
                      '(3)))}
; --------
  my-range
; --------
  ([start end]
     (cond (< start end) 
           (take (+ 1 (- start) end) (from start))
           (> start end) 
           (take (+ 1 start (- end)) (downfrom start))
           :else
           (list start))))