首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数字的数字列表

数字的数字列表
EN

Stack Overflow用户
提问于 2014-02-25 16:02:11
回答 2查看 313关注 0票数 0

我正在尝试编写一个函数,它接受一个数字并返回该数字的数字列表。例如:

代码语言:javascript
运行
复制
(list-num 648)
;=> (6 4 8)

我编写了一些代码,但是它返回(8 4 6),我不能使用reverse。到目前为止我的代码是:

代码语言:javascript
运行
复制
(define (list-num n)
  (if (not (equal? (quotient n 10) 0))
      (cons (modulo n 10) (list-num(quotient n 10)))
      (cons (modulo n 10) '())))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 16:24:51

您可以使用您的函数作为内部函数,并包装一个执行相反操作的外部函数:

代码语言:javascript
运行
复制
(define (list-num n)
  ; inner function - your initial function      
  (define (sub n)
    (if (not (equal? (quotient n 10) 0))
        (cons (modulo n 10) (sub (quotient n 10)))
        (cons (modulo n 10) '())))
  ; call inner function
  (reverse (sub n)))

然后

代码语言:javascript
运行
复制
> (list-num 648)
'(6 4 8)

您还可以使用命名的let和累加器:

代码语言:javascript
运行
复制
(define (list-num n)
  (let loop ((n n) (acc '())) ; named let, acc=accumulator
    (let ((q (quotient n 10)) (r (remainder n 10)))
      (if (= q 0)
          (cons r acc)
          (loop q (cons r acc))))))
票数 1
EN

Stack Overflow用户

发布于 2014-02-25 20:24:21

共有的Lisp:

代码语言:javascript
运行
复制
CL-USER 21 > (map 'list #'digit-char-p (princ-to-string 648))
(6 4 8)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22019634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档