« プログラミングを始めるには(26) | Main | プログラミングを始めるには(28) »

August 24, 2014

プログラミングを始めるには(27)

さて、これまで大した說明も無しにいくつかのプログラムを書いてきたが、ここらでまとめて書いておく。ただし、ここに書く說明は私の思い込みというかイメージのようなものであり、正式なものはEmacsのヘルプやInfoを參照してもらいたい。

defun is a special form in `C source code'.
(defun name arglist [docstring] body...)

Define name as a function.
The definition is (lambda arglist [docstring] body...).
See also the function `interactive'.

まず、elispでファンクションを書く場合に必ずと言って良いほどよく使用するのがdefunである。上はEmacsが表示するdefunのヘルプであるが、機能の名前を定義する、もしくは機能としての名前を定義するというふうに訳せる。defundefine functionの造語ではないのか?と思う人も居るだろう。定義するのは機能でなく名前の方?というわけだ。このへんのニュアンスは日本語よりも英語の方が敏感であり、物事の真理を突いているかもしれない。おそらくここでlambdaのことを書けば納得出来るかもしれないが、そうするとここの説明がかなり長くなってしまうし、プログラミングを始めたばかりの人には混乱するだけであろう。

(defun name (args)
  "docstring"
  body)

(fset 'name (function (lambda (args)
			"docstring"
			body)

なので、ここではnameというシンボルのファンクションセルにlambdaリストをバインドするという意味で、機能の名前を定義するというニュアンスになる...ということにしておこう。

defun2番目のパラメータはarglistなっている。普段何の氣なしに(defun funcname (arg)...と書いている(arg)のことである。argではなく(arg)、つまりリストなのだ。C言語の場合は、main(){}と書くと、それはメイン關數の定義になり、mainに續く()の中にパラメータを書ける。しかし、その場合の()lispでいうところのリストを意味するわけではなく、ただそういうシンタックスだというだけだ。これに關してはあまりクドクド書いてもピンと來ないかもしれないが、interactiveとの關連でこの先イヤでもちゃんと理解する必要が出てくる。

3番目のdocstringは、ファンクションの說明を書くところだ。いい加減なことを書くくらいなら省畧しても良い。書くのであれば、他のファンクションのヘルプを參照して、何を書くべきかを考えた方が良い。とくにそのファンクションを他のプログラマに提供する場合は、入出力仕樣くらいは明確にした方が良いだろう。このdocstringに記載した内容は、そのファンクションのヘルプに揭載される。

4番目のbody...はファンクションの處理を記述する部分だ。俗に暗默のprognフォームと呼ばれており、最後に評價される式の結果がそのファンクションの戾り値になることを意識して書く必要がある。

|

« プログラミングを始めるには(26) | Main | プログラミングを始めるには(28) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/60199148

Listed below are links to weblogs that reference プログラミングを始めるには(27):

« プログラミングを始めるには(26) | Main | プログラミングを始めるには(28) »