|
|
|
@ -14,8 +14,12 @@
|
|
|
|
(else
|
|
|
|
(else
|
|
|
|
(flatten-helper (cdr lst) (cons (car lst) acc) stk))))
|
|
|
|
(flatten-helper (cdr lst) (cons (car lst) acc) stk))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; Flatten an input list, that is: if any entry in the list is itself a list
|
|
|
|
|
|
|
|
;;the entries in that list are 'unwrapped'. This occurs recursively.
|
|
|
|
(define (flatten lst) (flatten-helper lst '() '()))
|
|
|
|
(define (flatten lst) (flatten-helper lst '() '()))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; Evaluates (p (car ls1) (car ls2)) and accumulate into a return list as long
|
|
|
|
|
|
|
|
;;as that evauluation results in #t.
|
|
|
|
(define (lp& p ls1 ls2)
|
|
|
|
(define (lp& p ls1 ls2)
|
|
|
|
(let loop ((ls1 ls1) (ls2 ls2))
|
|
|
|
(let loop ((ls1 ls1) (ls2 ls2))
|
|
|
|
(cond ((not (and (pair? ls1) (pair? ls2)))
|
|
|
|
(cond ((not (and (pair? ls1) (pair? ls2)))
|
|
|
|
@ -25,6 +29,8 @@
|
|
|
|
(else '())
|
|
|
|
(else '())
|
|
|
|
)))
|
|
|
|
)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;; Collect entries from the beginning of the given lists as long as those
|
|
|
|
|
|
|
|
;;entries are equivalent according to (eqv?)
|
|
|
|
(define (l& ls1 ls2)
|
|
|
|
(define (l& ls1 ls2)
|
|
|
|
(cond ((eqv? ls1 ls2) ls1)
|
|
|
|
(cond ((eqv? ls1 ls2) ls1)
|
|
|
|
(else (lp& eqv? ls1 ls2))))
|
|
|
|
(else (lp& eqv? ls1 ls2))))
|
|
|
|
|