Hatena::Groupsicp

a666666の日記 このページをアンテナに追加 RSSフィード

2010-01-05

P03 (*) Find the K'th element of a list.

| 02:40 | P03 (*) Find the K'th element of a list. - a666666の日記 を含むブックマーク はてなブックマーク - P03 (*) Find the K'th element of a list. - a666666の日記 P03 (*) Find the K'th element of a list. - a666666の日記 のブックマークコメント

明けましておめでとうございます。今年の目標は L-99 を完走して Perl Cookbook チャレンジも完走して The Little Schemer を全部読み終えたいです。 SICP にはまだまだ届く気がしない。

    The first element in the list is number 1.
    Example:
    * (element-at '(a b c d e) 3)
    C
(define (element-at l n)
  (cond
   ((= n 1) (car l))
   (else (element-at (cdr l) (- n 1)))))

(element-at '(a b c d e) 3)
;; => c
(element-at '(a b c d e) 1)
;; => a
(element-at '(a b c d e) 5)
;; => e

再帰を使って。こんなんでいいのかな。ちょっと例が意地悪だな。最初 (element-at '(a b c d e) 1) が e になるコードを書いてしまって、解答をみたら妙ちきりんで複雑なことをやってるように見えて引数を変えて実行してみて間違いに気づいた。最初から n が 3 以外になってる例だったらすぐ気づいたのになぁ。結局、解答を見てから改めて書き直したので、見ながら書いたわけじゃないとはいえ自力で解いたとは言い難い。

Emacsプログラム部分を書いてからコピペしてるのでローカルのファイルとここの内容が同期してないのがちょっとやなかんじ。 Emacs から直接投稿できるやつを使うようにすべきか。