Added last-pair and tests
svn: r9422 original commit: 13c5e3812d252bab985f29210862308ae8623396
This commit is contained in:
parent
821142782e
commit
e523655315
|
@ -1,10 +1,9 @@
|
|||
#lang mzscheme
|
||||
|
||||
(module list mzscheme
|
||||
;; The `first', etc. operations in this library
|
||||
;; work on pairs, not lists.
|
||||
|
||||
;; The `first', etc. operations in this library
|
||||
;; work on pairs, not lists.
|
||||
|
||||
(require (only scheme/base
|
||||
(require (only scheme/base
|
||||
foldl
|
||||
foldr
|
||||
|
||||
|
@ -25,9 +24,10 @@
|
|||
(only scheme/list
|
||||
cons?
|
||||
empty?
|
||||
empty))
|
||||
empty
|
||||
last-pair))
|
||||
|
||||
(provide first
|
||||
(provide first
|
||||
second
|
||||
third
|
||||
fourth
|
||||
|
@ -65,8 +65,8 @@
|
|||
sort
|
||||
merge-sorted-lists)
|
||||
|
||||
;; a non-destructive version for symmetry with merge-sorted-lists!
|
||||
(define (merge-sorted-lists a b less?)
|
||||
;; a non-destructive version for symmetry with merge-sorted-lists!
|
||||
(define (merge-sorted-lists a b less?)
|
||||
(cond [(null? a) b]
|
||||
[(null? b) a]
|
||||
[else (let loop ([x (car a)] [a (cdr a)] [y (car b)] [b (cdr b)])
|
||||
|
@ -81,14 +81,14 @@
|
|||
(list* x y b)
|
||||
(cons x (loop (car a) (cdr a) y b)))))]))
|
||||
|
||||
;; deprecated!
|
||||
(define quicksort sort)
|
||||
(define mergesort sort)
|
||||
;; deprecated!
|
||||
(define quicksort sort)
|
||||
(define mergesort sort)
|
||||
|
||||
(define (first x)
|
||||
(define (first x)
|
||||
(unless (pair? x) (raise-type-error 'first "non-empty list" x))
|
||||
(car x))
|
||||
(define-syntax define-lgetter
|
||||
(define-syntax define-lgetter
|
||||
(syntax-rules ()
|
||||
[(_ name npos)
|
||||
(define (name l0)
|
||||
|
@ -97,24 +97,15 @@
|
|||
(if (eq? pos 1) (car l) (loop (cdr l) (sub1 pos)))
|
||||
(raise-type-error
|
||||
'name (format "list with ~a or more items" npos) l0))))]))
|
||||
(define-lgetter second 2)
|
||||
(define-lgetter third 3)
|
||||
(define-lgetter fourth 4)
|
||||
(define-lgetter fifth 5)
|
||||
(define-lgetter sixth 6)
|
||||
(define-lgetter seventh 7)
|
||||
(define-lgetter eighth 8)
|
||||
(define-lgetter second 2)
|
||||
(define-lgetter third 3)
|
||||
(define-lgetter fourth 4)
|
||||
(define-lgetter fifth 5)
|
||||
(define-lgetter sixth 6)
|
||||
(define-lgetter seventh 7)
|
||||
(define-lgetter eighth 8)
|
||||
|
||||
(define (rest x)
|
||||
(define (rest x)
|
||||
(unless (pair? x)
|
||||
(raise-type-error 'rest "non-empty list" x))
|
||||
(cdr x))
|
||||
|
||||
(define (last-pair l)
|
||||
(if (pair? l)
|
||||
(let loop ([l l] [x (cdr l)])
|
||||
(if (pair? x)
|
||||
(loop x (cdr x))
|
||||
l))
|
||||
(raise-type-error 'last-pair "pair" l))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user