Comment detail

逆順になるあみだくじ (Nested Flatten)

This comment is reply for 771 rubikitch: 再帰つらい…orz(逆順になるあみだくじ). Go to thread root.

同じアルゴリズムをモダンなSchemeっぽく書き直してみました。数値でループを回すならsrfi-42のcomprehensionが圧倒的に楽です。また、Schemeといえば再帰、ですが、実際のコードではmapやfoldなどの高階関数とかnamed letなどを使うことが圧倒的に多く、明示的な再帰はそんなに頻繁に出てきません(複雑な相互再帰とか、データ構造もツリーのように再帰的になっている場合など)。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
(use srfi-42)

(define (bars n)
  (define lim (- (* 2 n) 1))
  (append-ec (: i 1 lim)
             (: j (if (odd? i) 1 2) (+ i 1) 2)
             (if (<= (+ i j) lim) `((,i . ,j)) '())))

(define (draw n bars)
  (do-ec (: i (- (* 2 n) 1))
         (: j 1 (+ n 1))
         (format #t "|~a"
                 (cond [(= j n) "\n"]
                       [(member (cons i j) bars) "-"]
                       [else " "])))
  )

(define (amida n) (draw n (bars n)))

Index

Feed

Other

Link

Pathtraq

loading...