パスワードを忘れた? アカウント作成
452613 journal

umqの日記: 背伸びして lisp 2

日記 by umq

このへん(どこだよ)に触発されて elisp でこんなの書いてみたのだが
scheme の named-let 使ったらカッコヨクなるかと思って書いてみた

(define (coltonum x)
  ((lambda (y)
      (let loop ((x y) (ret 0))
          (case (length x)
            ((0) ret)
            ((1) (- (+ (* ret 26) (car x)) 1))
            (else (loop (cdr x) (+ (* ret 26) (car x)))))))
  (map (lambda (y)
          (modulo (char->integer y) 32))
      (string->list
          (if (and (string? x)
    (rxmatch #/^[[:alpha:]]{0,4}$/ x))
              x "")))))

長くなってる……

[2003-10-22]@340
Jadawinさんの例を参考に書き直してみました
こころもちスッキリ

(define (coltonum x)
  ((lambda (y)
      (- (let loop ((x (reverse y)))
            (cond
              ((null? x) 0)
              (else (+ (car x)
                        (* 26 (loop (cdr x)))))))
        1))
    (map (lambda (y)
          (modulo (char->integer y) 32))
        (string->list
          (if (and (string? x)
                  (rxmatch #/^[[:alpha:]]{0,4}$/ x))
              x "")))))

↓添削はこちらへ

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 単に26進数の変換なら、こんなんでいけんでしょか?

    (define (rowtonum str)
        (let loop ((lst (reverse (string->list str)))
                              (power 1) )
            (cond
              ((null? lst) -1)
              (else
                (+ (* power (- (char->integer (car lst)) 64))
                      (loop (cdr lst)
                                  (* power 26)) )))))

    #むう。「ホントのテキスト形式」でもインデントがずれるか。
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...