例如 我想制作一个列表,其中包含下面显示的 20 个数字。分开
(list 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20)
进入列表列表,每个列表包含 10 个数字。就像下面一样
(list (list 1 2 3 4 5 6 7 8 9 10)
(list 11 12 13 14 15 16 17 18 19 20))
最好的方法是什么?
//抱歉我的英语不好。
最佳答案
(define (take n xs)
(if (or (= n 0)
(null? xs) )
'()
(cons (car xs)
(take (- n 1)
(cdr xs) ))))
(define (drop n xs)
(if (or (= n 0)
(null? xs) )
xs
(drop (- n 1)
(cdr xs) )))
(define (split n xs)
(if (null? xs) '()
(cons (take n xs)
(split n (drop n xs)) )))
(display
(split 3 (list 1 2 3 4 5)) ) ; `((1 2 3) (4 5))`
替代的 split
定义,使用命名 let 消除包装递归:
(define (split n xs)
(let spl ((xs' xs)) ; Named let
(if (null? xs') '()
(cons (take n xs')
(spl (drop n xs')) ))))
关于scheme - 将列表拆分为最大长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43430919/