scheme – 将数字转换为数字列表

如何将数字转换为数字列表?

我目前在做:

;; (num->list 12345) -> '(1 2 3 4 5)
(define (num->list n)
  (local 
    ((define (num->list n)
       (map (lambda (c)
              (char->num c))
            (string->list (number->string n))))

    (define (char->num c)
      (- (char->integer c) 48)))

    (num->list n)))

但是想知道是否有更好的方法.

最佳答案
这是我的标准前奏的digits功能:

(define (digits n . args)
  (let ((b (if (null? args) 10 (car args))))
    (let loop ((n n) (d '()))
      (if (zero? n) d
          (loop (quotient n b)
                (cons (modulo n b) d))))))

你的函数版本在字符串和数字之间来回传递;我的版本纯粹算术.我的版本还提供十进制以外的基数.

转载注明原文:scheme – 将数字转换为数字列表 - 代码日志