Comment detail

アルファベットの繰り上がり (Nested Flatten)
Arc にも iota みたいなのが欲しい。

実行例:
arc> (make-alnum-list 100)
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
(def dec-to-ib26-list (x)
  ((rfn lp (x ret)
     (if (is 0 x) ret
         (< (/ x 26) 1) (cons x ret)
         (is (type (/ x 26)) 'int) (lp (- (/ x 26) 1) (cons 26 ret))
         (lp (trunc (/ x 26)) (cons (mod x 26) ret))))
   x nil))

(def to-alnum (x)
  (apply string (map [coerce (+ _ 64) 'char] (dec-to-ib26-list x))))

(def iota (x . z)
  (with (limit x
         start (if (car z) (car z) 0)
         step  (if (cadr z) (cadr z) 1))
    (rev (let x nil (repeat limit (do (push start x) (++ start step))) x))))

(def make-alnum-list (n)
  (map [coerce (to-alnum _) 'sym] (iota n 1 1)))
似たような機能にはrangeがあるようです。
私も以前に自作したiotaを投稿してから気づいた
のですが…^^;
あ〜ホントだ!ありがとうございます。
ただ step の指定はできないみたいですね。
今回のお題では関係ありませんが...。

Index

Feed

Other

Link

Pathtraq

loading...