;; http://d.hatena.ne.jp/yad-EL/20100921/p1 ;; (myfind 10) => error ;; (myfind 'a) => error ;; (myfind '((x 10) (y 20) (x 30)) 'x) => 10 ;; (myfind '((x 10) (y 20) (z 30)) 'i) => #f (define (myfind ls key) (let/cc hop (fold (lambda (e seed) (if (eq? key (car e)) (hop (cadr e)) seed)) #f ls))) (myfind 10) ;; error (myfind 'a) ;; error (myfind '((x 10) (y 20) (x 30)) 'x) (myfind '((x 10) (y 20) (z 30)) 'i) => #f