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

昔のLISPの関数名に記号が使われないのはなぜなのか

| 12:17 | 昔のLISPの関数名に記号が使われないのはなぜなのか - わだばLisperになる を含むブックマーク はてなブックマーク - 昔のLISPの関数名に記号が使われないのはなぜなのか - わだばLisperになる

昔のLISPの関数名(昔といっても、Lisp 1.5の話なのでかなり古いです)は(- 3 2)ではなく、(difference 3 2)と書きました。このように、やたら長いスペルの関数名はあるものの直感的に思い付くような-や+記号というのは、まったく見掛けません。

以前から何でなんだろうなあ、と思っていたのですが、昨日のifや、condのエントリで、M式を書いていて、もしかしたら!という理由を思い付きました。

それは、M式で書くと、

difference[3;2]

と書くのは、まあ普通に見て状況を把握できますが、

-[3;2]

だと、何が何だか良く分からない、ということなんじゃないかなと。

M式以外にも、Eval quoteという表記方法があるんですが、これはトップレベルは、M式のように書くというもの。Lisp 1.5や、INTERLISPで可能な表記形態だったのですが、これも同様に、

difference(3 2)

は良くても

-(3 2)

は何となく変。INTERLISPにも記号で書いた方が完結な長い関数名がずっと残っていましたが、この辺をずっと継承していたからなのではないか?!ということなのですね。

…しかし実際のところ、真相は知る由もございません。

以上、重箱の隅過ぎてトリビアにさえならないネタでした。

ちなみに改めて確認したところ、INTERLISPでは中間記法が使え、その場合は記号が使えました。

ということで、トップレベルでは、

3 - 2

と書くと、1となります。

お馴染のfibはINTERLISPだと

defineq((fib (n)
	     (if (lessp n 2)
	       then
		 n
	       else 
		 (fib n - 1) + (fib n - 2))))

fib(15)
;-> 610

と書けます。