2009/08/11

[scheme]九九っぽい

(use srfi-1)
(define 9x9
  (lambda (row cnt inc mul)
    (append
     (cons
      (map (lambda (n)
             (cons (cons mul n)(cons (* n mul) '())))
           (iota cnt 1 inc))
      (if (zero? row)
          '()
          (9x9 (- row 1) cnt inc (+ mul 1)))))))



(9x9 9 9 1 1)
;; =>  ((((1 . 1) 1) ((1 . 2) 2) ((1 . 3) 3) ((1 . 4) 4) ((1 . 5) 5) ((1 . 6) 6) ((1 . 7) 7) ((1 . 8) 8) ((1 . 9) 9)) (((2 . 1) 2) ((2 . 2) 4) ((2 . 3) 6) ((2 . 4) 8) ((2 . 5) 10) ((2 . 6) 12) ((2 . 7) 14) ((2 . 8) 16) ((2 . 9) 18)) (((3 . 1) 3) ((3 . 2) 6) ((3 . 3) 9) ((3 . 4) 12) ((3 . 5) 15) ((3 . 6) 18) ((3 . 7) 21) ((3 . 8) 24) ((3 . 9) 27)) (((4 . 1) 4) ((4 . 2) 8) ((4 . 3) 12) ((4 . 4) 16) ((4 . 5) 20) ((4 . 6) 24) ((4 . 7) 28) ((4 . 8) 32) ((4 . 9) 36)) (((5 . 1) 5) ((5 . 2) 10) ((5 . 3) 15) ((5 . 4) 20) ((5 . 5) 25) ((5 . 6) 30) ((5 . 7) 35) ((5 . 8) 40) ((5 . 9) 45)) (((6 . 1) 6) ((6 . 2) 12) ((6 . 3) 18) ((6 . 4) 24) ((6 . 5) 30) ((6 . 6) 36) ((6 . 7) 42) ((6 . 8) 48) ((6 . 9) 54)) (((7 . 1) 7) ((7 . 2) 14) ((7 . 3) 21) ((7 . 4) 28) ((7 . 5) 35) ((7 . 6) 42) ((7 . 7) 49) ((7 . 8) 56) ((7 . 9) 63)) (((8 . 1) 8) ((8 . 2) 16) ((8 . 3) 24) ((8 . 4) 32) ((8 . 5) 40) ((8 . 6) 48) ((8 . 7) 56) ((8 . 8) 64) ((8 . 9) 72)) (((9 . 1) 9) ((9 . 2) 18) ((9 . 3) 27) ((9 . 4) 36) ((9 . 5) 45) ((9 . 6) 54) ((9 . 7) 63) ((9 . 8) 72) ((9 . 9) 81)) (((10 . 1) 10) ((10 . 2) 20) ((10 . 3) 30) ((10 . 4) 40) ((10 . 5) 50) ((10 . 6) 60) ((10 . 7) 70) ((10 . 8) 80) ((10 . 9) 90)))

Schemeによる記号処理入門

0 件のコメント:

コメントを投稿