”漢数字からアラビア数字”をschemeで3
artonさんのトコを見たら
で、こんな感じになった。
KINDEX = "十一二三四五六七八九" ARABIC = [ 10, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] def kj_to_arabic(s) n = 0 s.each_char do |c| if n < 10 && n > 0 n *= 10 else n += ARABIC[KINDEX.index(c)] end end n.to_s endL'eclat des jours(2010-12-10)
ということになってたので、やっぱりschemeで置き換えてみる
(define (kj_to_ar kj-string) (define kj-number '((#\十 10) (#\一 1) (#\二 2) (#\三 3) (#\四 4) (#\五 5) (#\六 6) (#\七 7)(#\八 8) (#\九 9))) (define (kj-ref kj) (cadr (assoc kj kj-number))) (let ((kj-lis (string->list kj-string))) (define (iter rest result) (if (null? rest) result (if (and (< result 10) (< 0 result)) (iter (cdr rest) (* result 10)) (iter (cdr rest) (+ result (kj-ref (car rest))))))) (iter kj-lis 0)))
なるほど。vectorとか使った方が良いのかなぁ。