Skip to content

(liii list)

列表操作库,基于 SRFI-1 并添加扩展。

导入

scheme
(import (liii list))

SRFI-1 函数

构造函数

scheme
(iota 5)              ; => (0 1 2 3 4)
(circular-list 1 2)   ; => #(1 2 1 2 ...)
(cons* 1 2 3 '(4 5))  ; => (1 2 3 4 5)
(xcons '(a b) 'c)     ; => (c a b)

选择器

scheme
(first '(1 2 3 4 5))     ; => 1
(second '(1 2 3 4 5))    ; => 2
(tenth '(1 2 3 4 5 ...)) ; => 10th element

(take '(1 2 3 4 5) 3)    ; => (1 2 3)
(drop '(1 2 3 4 5) 3)    ; => (4 5)
(take-right '(1 2 3 4 5) 2)   ; => (4 5)
(drop-right '(1 2 3 4 5) 2)   ; => (1 2 3)

(last '(1 2 3))          ; => 3
(last-pair '(1 2 3))     ; => (3)

折叠与映射

scheme
(fold + 0 '(1 2 3 4 5))      ; => 15
(fold-right cons '() '(1 2 3)) ; => (1 2 3)
(reduce + 0 '(1 2 3 4 5))    ; => 15

(filter even? '(1 2 3 4 5))  ; => (2 4)
(remove odd? '(1 2 3 4 5))   ; => (2 4)
(partition odd? '(1 2 3 4 5)) ; => (1 3 5) (2 4)

搜索

scheme
(find even? '(1 2 3 4 5))     ; => 2
(any even? '(1 2 3 4 5))      ; => #t
every odd? '(1 3 5))          ; => #t
(list-index even? '(1 2 3))   ; => 1

(take-while odd? '(1 3 5 2 4))  ; => (1 3 5)
(drop-while odd? '(1 3 5 2 4))  ; => (2 4)

扩展函数

长度检查

scheme
(length=? 3 '(1 2 3))      ; => #t
(length>? '(1 2 3) 2)      ; => #t
(length>=? '(1 2) 2)       ; => #t

安全 take/drop

scheme
(list-take '(1 2 3) 5)     ; => (1 2 3)  ; 不报错
(list-drop '(1 2 3) 5)     ; => ()       ; 不报错
(list-take '(1 2 3) -1)    ; => ()       ; 负数返回空

列表判断

scheme
(list-null? '())           ; => #t
(list-not-null? '(1))      ; => #t
(not-null-list? '(1 2))    ; => #t

扁平化

scheme
(flatten '((1 2) (3 4)))           ; => (1 2 3 4)
(flatten '((1 2) (3 (4 5))) 2)     ; => (1 2 3 4 5)
(flatten '((1 2) (3 (4 5))) 'deepest) ; => (1 2 3 4 5)

其他

scheme
(flat-map (lambda (x) (list x x)) '(1 2 3))
;; => (1 1 2 2 3 3)

基于 Apache 2.0 许可发布