scheme - 将列表拆分为最大长度的列表

标签 scheme lisp racket

例如 我想制作一个列表,其中包含下面显示的 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/

相关文章:

在reduce上使用和运算符的方案

functional-programming - 用于查找给定函数的列表的最小元素的 Racket 函数

scheme - "scheme and: bad syntax in: and"是什么意思

scheme - 如何在 Breakout 中让球与砖 block 碰撞( Racket )

scheme - Racket - 最简洁的列表理解方式?

math - 费马小定理和 SICP 实现之间的对应关系是什么?

list - Lisp 两个列表相乘并相加两个值

javascript - 有哪些学习如何实现方案宏的好资源?

search - Lisp - 爬山

unicode - 以重音字符为键的 Common Lisp 哈希表