我需要一個程序寫的程序的子程序,採用一個整數,比如說34109,並將其放入一個元素爲3,4,1,0,9的列表中。該整數可以是任意長度。有沒有人有這個技巧?我曾想過爲每個地方使用模數,但我認爲它不應該那麼複雜。計劃編號列表
Q
計劃編號列表
2
A
回答
3
最簡單的方法我能想到的是,通過使用算術運算和用於實現尾遞歸的named let
:
(define (number->list num)
(let loop ((num num)
(acc '()))
(if (< num 10)
(cons num acc)
(loop (quotient num 10)
(cons (remainder num 10) acc)))))
或者,您也可以使用字符串操作解決這個問題:
(define char-zero (char->integer #\0))
(define (char->digit c)
(- (char->integer c) char-zero))
(define (number->list num)
(map char->digit
(string->list (number->string num))))
這可以被壓縮成一個單一的功能,但我相信它更容易理解,如果我們在子部分分割爲上述問題。
(define (number->list num)
(map (lambda (c) (- (char->integer c) (char->integer #\0)))
(string->list
(number->string num))))
反正結果如預期:
(number->list 34109)
> '(3 4 1 0 9)
+0
感謝您的'讓'解決方案 – demas
2
事情是這樣的:
(define (num2list-helper num lst)
(cond ((< num 10) (cons num lst))
(else (num2list-helper (floor (/ num 10)) (cons (modulo num 10) lst)))))
(define (num2list num)
(num2list-helper num '()))
(num2list 1432)
由於itsbruce評論,你可以躲在裏面最主要的一個輔助函數:
(define (num2list num)
(define (num2list-helper num lst)
(cond ((< num 10) (cons num lst))
(else (num2list-helper (floor (/ num 10)) (cons (modulo num 10) lst)))))
(num2list-helper num '()))
(num2list 1432)
未完待續......
0
我不是人工循環的粉絲,所以這裏的基礎上展開(負載SRFI 1和SRFI 26第一)的解決方案:
(define (digits n)
(unfold-right zero? (cut modulo <> 10) (cut quotient <> 10) n))
儘管這會返回一個空列表。如果你希望它返回(0)
相反,我們添加一個特殊情況:
(define (digits n)
(case n
((0) '(0))
(else (unfold-right zero? (cut modulo <> 10) (cut quotient <> 10) n))))
當然,你也可以概括爲這樣其他基地。在這裏,我實現這個使用可選參數,因此,如果您沒有指定基數,則默認爲10:
(define (digits n (base 10))
(case n
((0) '(0))
(else (unfold-right zero? (cut modulo <> base) (cut quotient <> base) n))))
不同的方案實現使用可選參數不同的語法;以上使用球拍式(和/或SRFI 89式)語法。
相關問題
- 1. 從計劃中編號和編號或列表和編號構建列表
- 2. 計劃 - 定義列表VS符號
- 3. 計劃 - 列表
- 4. 計劃 - 在列表
- 5. 計劃返回對列表
- 6. 計劃通過列表
- 7. 計劃:遞歸和列表
- 8. 返回計劃列表
- 9. 在列表中插入列表計劃
- 10. 編號表列
- 11. 計劃 - 預計非空列表
- 12. 計劃列表計數功能
- 13. 計劃表設計
- 14. 以編程方式更新計劃表基於表的Quartz計劃程序
- 15. 編號列表框
- 16. 子列表編號
- 17. UL列表編號
- 18. 「計劃接收信號‘SIGABRT’
- 19. 表計劃
- 20. 星號和前女友撥號計劃?
- 21. 計劃 - 雙引號可以分號嗎?
- 22. 變換的非編號列表編號列表使用XSLT
- 23. 在計劃中分配原子列表
- 24. 計劃乘法列表項目
- 25. 通過搜索列表和計劃(DrRacket)
- 26. 生成計劃中的倍數列表
- 27. 計劃 - 在列表中插入數
- 28. 計劃中模塊的導出列表
- 29. 計劃 - 列表中的子集
- 30. 試圖在計劃中反轉列表
使用模數,這不是compilcated :)我不知道你的意思是'每個地方'。您只需用模10提取有效數字,將數字除以10,然後重複(也許遞歸)。 – piokuc
嗨,感謝piokuc,這對於使用部門以及減少數量有意義。 – Matt