Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-03-27

GOOでL-99 (P03 リストのK番目の要素を取り出す)

| 17:08 | GOOでL-99 (P03 リストのK番目の要素を取り出す) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P03 リストのK番目の要素を取り出す) - わだばLisperになる

GOOはLISP1なのですが、LISP1では、変数名に、関数名と同じものを使うと関数がシャドウされてしまうので、なんだか気持ち悪かったり不便だったりします。

GOOでは、通常のLISPでいうlistは、lstで、エイリアスとして、listも使える、という感じなので、listもlstも変数名として使うには気持ち悪いので、uを使うことにしてみました。

uは、LISP 1.5の時代には、リスト用の変数名としてメジャーだったようです。その流れなのか、スタンフォード大学では、Uや、Vなどが好んで使われていました。

repは、Schemeでいう名前付きletです。

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

(dm element-at ((u <lst>) (k <int>))
  (rep loop ((u u) (cnt 1))
    (if (or (= k cnt) (nul? u))
        (head u)
        (loop (tail u) (1+ cnt)))))

;(elt '(a b c d e) 2)
;=> c