carをつかわずにリストの先頭要素を取り出す

@baal5084さんの出題

スキームクーイズ!さて突然ですがここで Schemer の皆さんに問題です。 Q1. リストの最初の要素を car と list-ref を使わず取り出してください。

http://twitter.com/baal5084/status/8226643131


@athos0220さんの模範解答(http://twitter.com/athos0220/status/8227286234

(apply (lambda (x . _) x) lst)


自分もやってみた

(define (my-car lst) (set-cdr! lst '()) (apply (lambda (x) x) lst))

リストをぶっ壊すとかちょっとありえない。2度とcdrできないし

ということで元のリストが壊れないようにしてみた

(define (my-car lst)
  (let ((temp (append lst '())))
    (set-cdr! temp '())
    (apply (lambda (x) x) temp)))