My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
; behaves like `car&cdr` [see exercise 1.18.2], but does not use `compose` in its output
(define car&cdr2
(lambda (s slist errvalue)
(let ((result (car&cdr2-2 s slist errvalue 'x)))
(if (equal? result errvalue)
errvalue
(cons 'lambda (cons '(x) (list result)))))))

(define car&cdr2-2
(lambda (s slist errvalue path)
(cond
((null? slist) errvalue)
((equal? (car slist) s) (cons 'car (list path)))
(else (let (
(car-result
(if (list? (car slist))
(car&cdr2-2 s (car slist) errvalue (cons 'car (list path)))
errvalue)))
(if (equal? car-result errvalue)
(car&cdr2-2 s (cdr slist) errvalue (cons 'cdr (list path)))
car-result))))))



(car&cdr2 'a '(a b c) 'fail)
; (lambda (x) (car x))

(car&cdr2 'c '(a b c) 'fail)
; (lambda (x) (car (cdr (cdr x))))

(car&cdr2 'dog '(cat lion (fish dog ()) pig) 'fail)
; (lambda (x) (car (cdr (car (cdr (cdr x))))))

(car&cdr2 'a '(b c) 'fail)
; fail

Change log

r2 by jonathan.hefner on Jun 8, 2008   Diff
Initial commit
Go to: 
Project members, sign in to write a code review

Older revisions

All revisions of this file

File info

Size: 1115 bytes, 35 lines
Powered by Google Project Hosting