;; 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