像转换(1 2 3 4)1234〜如何在列表中将列表转换为num?
1
A
回答
2
这听起来像一个家庭作业的问题...
想想10的幂,什么在一些每个数字:1234其实就是。
1
我写的代码如下~~~它的工作原理,但代码可能太长~~~
(define (power b e)
(define (power-product a b e)
(if (= e 0)
a
(power-product (* a b) b (- e 1))))
(power-product 1 b e))
(define (length items)
(if (null? items)
0
(+ 1 (length (cdr items)))))
(define (list->num lst)
(if (null? lst)
0
(+ (* (power 10 (- (length lst) 1)) (car lst)) (list->num (cdr lst)))))
1
既然你已经发布你的工作的解决方案,我会后这一点。 如果你不能使用let,你可以用辅助函数做类似的事情。
(define (list->num l)
(let loop ((n 0) (l l))
(if (empty? l)
n
(loop (+ (* 10 n) (car l)) (cdr l)))))
一本书像“小策士”价格低廉,容易和有趣的阅读,它真的让你在“计划模式”的思想。它将帮助您编写更简洁的解决方案。
4
问题的特征在于聚结列表成一个单一的值,强烈暗示使用折叠的:
(define (fold-left op initial items)
(define (loop result rest)
(if (null? rest)
result
(loop (op result (car rest))
(cdr rest))))
(loop initial items))
(define (list->num list)
(fold-left (lambda (value digit)
(+ (* value 10) digit))
0
list))
(list->num '(1 2 3 4))
;Value: 1234
1
下面是一个使用仅尾递归
(define (list->num l)
(cond
((null? l) 0)
((null? (cdr l)) (car l))
(else (let ([first (* 10 (car l))][rest (cdr l)])
(list->num (cons (+ first (car rest)) (cdr rest)))))))
2
这里有两个溶液从我的Standard Prelude功能,在数字和数字列表之间进行转换;都采用可选参数来指定要使用的基数。它们使用标准的R4RS计划编写,并应在任何最新的计划系统中工作。
(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))))))
(define (undigits ds . args)
(let ((b (if (null? args) 10 (car args))))
(let loop ((ds ds) (n 0))
(if (null? ds) n
(loop (cdr ds) (+ (* n b) (car ds)))))))
相关问题
- 1. 如何将列表列表转换为列表列表?
- 2. 如何将列表列表转换为列表序列?
- 3. 如何将列表[Double]转换为列?
- 4. 如何将元素列表转换为列表列表
- 5. 如何将Python整数列表转换为列表列表?
- 6. 在python中将列表和列表的列表转换为csv
- 7. 将列表转换为链接列表
- 8. 将列表转换为字典列表
- 9. 如何将列表的列表转换为Python中的字典?
- 10. 如何将X列表转换为C#中的Y列表?
- 11. 如何将3D列表转换为Python中的2D列表?
- 12. 如何将系列列表转换为列表?
- 13. 将转换列表转换为水星中的元组列表
- 14. 将Sage列表列表转换为R列表列表
- 15. 如何将user_input转换为列表?
- 16. 如何将csv列表转换为int?
- 17. 如何将dictonaries列表转换为....?
- 18. 如何将concurrentbag转换为列表?
- 19. 如何将集合转换为列表?
- 20. 如何将列表转换为xexpr?
- 21. 如何将`numpy.datetime64`列表转换为`matplotlib.dates`?
- 22. 如何将int转换为列表?
- 23. 如何将Pandas DataFrame转换为列表?
- 24. 如何将数组转换为列表
- 25. 如何将列表值转换为int
- 26. 如何将列表转换为csv?
- 27. 如何将表列转换为数组?
- 28. 如何将索引转换为列表?
- 29. 如何将gtk.ListStore转换为列表?
- 30. 如何将列表转换为矩阵?
虽然'expt'是后者的名字,''length'和'power'已经在Scheme中定义。 – 2009-11-06 07:14:07