top recent

プログラミング言語:Lisp

関連ページ

プログラミング言語 プログラミング

目次

  1. S式を使った前置記法のプログラミング言語...
  2. S式とリスト...
  3. (Scheme) (Lisp)...
  4. DrScheme...
  5. Lispのあの特徴的(だよね?)なインデントは...
  6. インデントの規則は、文法に沿ったものです。文法を覚えればおのずと分かります。...
  7. プログラム自体がデータだから、プログラムの整形も処理系が得意とする、...
  8. pretty-print...
  9. [超括弧]...
  10. Schemeを作ろう...
  11. ケータイSchemeって有るの?...
  12. awklisp...
  13. Schemer's way...
  14. デザインの「悪い方がよい」原則...
  15. eieio...
  16. CLOS (Common Lisp Object System)...
  17. rhizome/pi...
  18. 日本のLisp処理系...
  19. もうひとつのLISP製オブジェクト指向Webサーバー...
  20. macro charactorとreadtable (common lisp)...
  21. ちょっと寄り道...
  22. chi のページ...
  23. elispでcurry...
  24. WindowsでSchemeを...
  25. DrSchemeってひょっとしてすごい?...

S式を使った前置記法のプログラミング言語


Lispの仲間
- 純Lisp
- CommonLisp
- EmacsLisp
- Scheme

関連する話題
- クロージャとオブジェクト
- プログラミング言語:高階関数
- [[プログラミング言語:Lisp:マクロ]]
- λ算法

[[id:694]] 2002-06-13 18:39:28


S式とリスト

S式はリストの外部表現であり、両者は相互に変換可能である。
Lispにおいては関数もリストとして表現され、関数の集合であるプログラムもS式として記述される。
リストを操作する関数を使って関数自体を操作することもできる。

[[id:695]] 2002-06-13 18:46:16


(Scheme) (Lisp)

schemeで書き捨てスクリプトを書くためのPerl風マクロセットPerl.scmなど。

signature: SHIMADA

[[id:627]] 2002-06-13 17:40:03


DrScheme

http://www.edu.cs.kobe-u.ac.jp/Enshu6/2000/scheme_web/info_first_facilities.html#step から手繰って手繰って、
http://www.cs.rice.edu/CS/PLT/packages/drscheme/ に行き着く。

[[id:699]] 2002-06-14 12:54:16


Lispのあの特徴的(だよね?)なインデントは

-どういう規則なんでしょう?個人的直感および習慣(C系)からの類推が困難に感じてます。
-どうやって実現しましょう?(Emacsじゃない環境で) Cのcbに相当するものが既に有りますか?

[[id:700]] 2002-06-14 12:59:53


インデントの規則は、文法に沿ったものです。文法を覚えればおのずと分かります。

Schemeはよく知らないのでCommonLisp/EmacsLispで書きますが、defun, let, if, cond などは、その引数の意味に応じて読みやすいようにインデントの仕方がだいたい決められていると思いますが、それ以外はアルゴル系と大差ないんじゃないでしょうか。
それよりなにより多分閉じカッコを最後の行にまとめて書くという風習が一番抵抗大きいのかもしれませんが、あれは構造エディタを使っていないと怖くて仕方ないかも。vi使いの方は :set showmatch しておくべきでしょう。


自動インデント機能ですが、たいていの処理系は pretty-print という関数を持っていて、関数を引数に渡すとインデントをそろえて印字してくれますから、整形に困ることはないでしょう。

[[id:701]] 2002-06-15 07:31:26


プログラム自体がデータだから、プログラムの整形も処理系が得意とする、

> インデントの規則は、文法に沿ったものです。文法を覚えればおのずと分かります。 (#6)
>pretty-print

(タイトル)というわけですか。なるほど。さすがLisp。

>インデントをそろえて印字してくれます

ということは、viでも、指定範囲の文章を子プロセスに整形させる、というコマンドを活用することができそうですね。
子プロセスとしてLisp処理系を指定し、(pretty-print *)の*の部分に整形したい範囲を流しこむということになるでしょうか。

ソースの特定の部分(全部ではなくリストの中の指定した個所)を標準入力から受けつける処理系は、一般的ですか?

>閉じカッコを最後の行にまとめて書くという風習が一番抵抗大きい

そのとおりです。結果的に醸し出される雰囲気は、 [[Python]] を思いだしました。
というか歴史的順序から推察すると、PythonがLispの真似なのでしょうか。

>構造エディタを使っていないと怖くて

ここではEmacsを指しているのでしょうか。
構造というより、Lispの構造を知るエディタ(ないしはそういう設定)が必要なのでしょうね。
おなじ構造といってもPascalの構造を理解するエディタはまた話が違ってくるでしょうから。

> :set showmatch しておくべきでしょう。

showmatchはあまり好みません。制御が一瞬機械に奪われるのが気持ち悪くて。
それよりも手動で%を使って確認するほうが好みです。

あとは、開き括弧を書いたら必ず即座に対応する閉じ括弧も書く、という習慣は結構使えるようです。
少なくともC/Pascal系言語では有効でした。Lispほど括弧が多くなっても有効かどうかは不明ですが。

[[id:702]] 2002-06-15 12:06:18


pretty-print

Emacs では pretty-print は pp() という名前でした。
シンボルからその関数を表すラムダ式を引っ張ってくる symbol-function()
と組み合わせると、任意の関数を整形印字してくれます。

(pp (symbol-function 'emacs-wiki-search))

(lambda
(text)
"Search for the given TEXT string in the Wiki directories."
(interactive
(list
(let
((str
(concat emacs-wiki-grep-command))
pos)
(while
(string-match "%W" str)
(setq pos
(1+
(match-beginning 0)))
(setq str
(replace-match "" t t str)))
(read-from-minibuffer "Search command: "
(cons str pos)
nil nil 'emacs-wiki-search-history))))
(emacs-wiki-grep text))

[[id:747]] 2002-06-20 09:30:10


[超括弧]

手書きの時に便利。
[((((((((((]

(((((((((((((((((((((((]
で書いて、あとはpretty-printする。
(define (some? pred seq)
(let loop ((x seq))
(and (pair? x)
(let [(r (pred (car x]
(if r r (loop (cdr x]

[[id:703]] 2002-06-15 13:19:38


Schemeを作ろう

http://www.jah.ne.jp/~naoyuki/Writings/Writings.html

[[id:720]] 2002-06-16 16:33:16


ケータイSchemeって有るの?

iアプリでbasicを実装した人は居ると聞きましたが、
Schemeの実装とかも有るんでしょうか?(^^;

-dW:S式を使った拡張性 (Java)

[[id:746]] 2002-09-01 09:42:09


awklisp

PHilipsのキーテクノロジー(違

http://lambda.weblogs.com/discuss/msgReader$2078 で発見

[[id:758]] 2002-06-24 16:34:10


Schemer's way

http://www.shiro.dreamhost.com/scheme/docs/schemersway-j.html

signature: URL

[[id:582]] 2002-06-24 16:35:59


デザインの「悪い方がよい」原則

The Rise of "Worse is Better"
http://cl.aist-nara.ac.jp/~daiti-m/text/worse-is-better-ja.html

[[id:816]] 2002-06-30 12:09:29


eieio

http://cedet.sourceforge.net/eieio.shtml

>EIEIO also has object browsing functions

:-D~~~~

[[id:817]] 2002-06-30 12:18:17


CLOS (Common Lisp Object System)

概要だけでも分かるサイトはないでしょうか。(日本語で…)

外国語論文講読 1996年冬学期
- http://dolphin.c.u-tokyo.ac.jp/~nisimu6/comp/clos/

Thumbnail CLOS Summary
- http://www.apl.jhu.edu/~hall/Lisp-Notes/CLOS-Summary.html

MITのサイトから
- http://www.ai.mit.edu/projects/iiip/doc/cl-http/common-lisp.html#CLOS

dmoz (open dictionary project)
- http://dmoz.org/Computers/Programming/Languages/Lisp/CLOS/

[[id:819]] 2002-07-02 12:45:13


rhizome/pi

http://www.kt.rim.or.jp/~qfwfq/rhiz-pi/

[[id:852]] 2002-07-07 23:23:26


日本のLisp処理系

http://jp.franz.com/jlug/ja/resources/implementations.html
『プログラマなら一度はLISPを作るとも言われており…』
やっぱりそうだよなー。

[[id:853]] 2002-07-08 12:36:07


もうひとつのLISP製オブジェクト指向Webサーバー

http://www.crl.co.jp/product/prod_lispache.html

社長へのインタビュー
http://sdc.sun.co.jp/news/200201/danwa01.html (ところでこの頁、めちゃ重ですね -戯)
- LISPのマクロは開発効率を高める。IDEのウィザードベースのコードは生成後はベターっとした巨大なものだが、マクロはコンパイルされるまで抽象化された塊のまま。開発後のメンテナンス性は後者の方が高い。(IDE製のコードは5年後10年後そのツールが無くなったらお手上げ)

----
反論(^^;。「ビジュアルエディターがソースを生成する」というが、
それはそんなダサイことをするビジュアルエディタが悪いのであって、
そうでない(ビジュアル)エディタならば良いのではなかろうか?
というか、そういうことが可能な(少しは上を行く)言語ならば良いかなと。

たとえば少なくともDelphiは、(どうせマクロは無いがそれはさておき)
「展開済みのコード」を生成してあげる必要が、C++やJavaよりも少ないはず。
メタクラスやプロパティの仕掛は、マクロほど何でもアリというわけではないものの、幾つかの場面において、
そういう無用なコードの生成を不要にしてくれる。 -戯

言いかえれば、Lispとビジュアルエディタも共存可能だ、と思います。

----
語ってみる(ぉ -戯
-「apache(略)2.0のリリースについてはどうなるか見えてこない理由(中略)多くのプログラマーが自分の才能を無償で提供することに嫌気がさしてきているから」と言うが、無償提供するか否かの選択権は最初から"自由な"プログラマの手に有るはずだ。自分が飯の種にしなかったもので他人が飯を食うことが不愉快なら、最初からそういうビジネスモデルが出現することを嫌悪(そして忌避)していれば良かったろうに。
--まして長期視野の有無なんて無関係。嫌気がさしちゃう人間のほうが余程短気だとしか思えないなあ。
-「バイトコードだけは保証せよ!」って? javaはいつからbytecode互換性を捨てたんだっけ?
--だいたいそんなに心配なら、堅持すべきはbytecode以前にソースだろ? どうせソースでしか(ご懸念の)メンテは出来ないのだし。
--妙なもの(ぉ)を作ってるのはむしろ非Sunのほうでは? あえて言うならGCJもその仲間かと(ぉ
-「Sunも(略)本物の次世代のOSをやっていて欲しい」…人それをJavaOSと呼びます(ぉ
-IBMのLinuxって、それこそ商売として選んだものだと思うが。技術的コアである筈ないじゃん? JavaOSの商業的惨敗(悔しいが)はIBMをも商業的に躊躇させたというだけのことでしょ。
-「PC(略)街の発明家であり街のエンジニア(略)未来はデカくなるのではなくむしろ小さくなる(略)Sunには次のOSをどうしようかと議論してほしい」だそうだが、街からどうして新世代OSが出ないと思うんだろう? 街からOS実装なら出た(=Linux)。それより1段だけ(笑)高級なものだって出て悪くないと思うが?
--必要なのはしっかり身につけた「メタ」技術だと思うぞ。技術そのものだけじゃ駄目だってのは認めるが、メタ技術の有無はPC文化(=街)かどうかとは直交じゃないかな?

---
まぁ、トマベチ氏はああいうキャラクタだから…

オープンコミュニティの話はちょっとよくわからなかったけれど、「街」の議論は分からないでもない。
現時点で、例えば数10テラバイトのデータをメンテしたり、数万トランザクション/秒みたいなアクセスをさばいたり、そういうシステムを24/7で運用したりっていうことは、PC文化にはそれほど要求されていない。その必要もないしね。
けれど、じゃあ10年後にエンドユーザの手元に届いて処理される情報量がどうなってるかって考えると、やっぱりその時に安定して使えるインフラの技術ってのは、現在のハイエンドで開発しているようなものじゃないと無理なんじゃないかな、とは思う。
もちろん技術はそれだけじゃないわけで、特にエンドユーザインタフェースみたいなものはむしろ街の側から出て行くものかもしれないし。

--Schemer

----
街に今需要が無いから街では近未来インフラが育たない、というならば、
書籍 ヒューメイン・インタフェース―人に優しいシステムへの新たな指針 (本棚) で言及されているような理由で、エンドユーザインタフェースも街から出てこない恐れが有るかと。

慣れというか、言語(環境?)は思考を規定するというか、あれです。 -戯

こんなことはフェラガモがとっくの昔に看破してることなのだが、なんか世間にはあまり理解されてないですね。

[[id:857]] 2002-07-11 12:38:21


macro charactorとreadtable (common lisp)

コンパイラを拡張するForthの真骨頂 (プログラミング言語:URLメモ) にやられっぱなしでは寝覚めがわるいんで。:)

ストリームから式を読み込む関数 read() は「入力マクロ」という単純な機構によって動作する。
#プログラムのS式を変形して構文を拡張する、普通に言われるマクロとは別物なので注意。

ストリームから英数字が来るとそれから始まるシンボルや数を読み、マクロ文字がくると、そのマクロ文字に対応する入力関数を呼び出す。
たとえば "(" はリストを読み込むための入力関数に結びつけられている。

スペシャル変数 *readtable* に束縛されている「入力テーブル」と呼ばれるデータが、マクロ文字と入力関数を結びつけている。
入力テーブルを変更することで、ユーザーが自由に処理系の構文を変更することができる。

マクロ文字の例
- ``"'' ... 文字列
- ``('' ... リスト
- ``)'' ... リストの終わり
- ' ... クオート
- ``;'' ... コメント(改行までを読み飛ばす)
- ```'' ... (普通に言う)マクロのバッククオート
- ``,'' ... バッククオート中の値の埋め込み
- ``#'' ... シャープマクロ。次の文字によってディスパッチされる
----
xyzzyでの例
*readtable*
=> #<readtable>

(get-macro-character #\()
=> system:|(-reader|

(get-macro-character #\')
=> system:|'-reader|

[[id:898]] 2002-07-26 09:00:05


ちょっと寄り道

http://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp.html

CommonLispてゆーかxyzzyの頁なんだけど、ここの「ちょっと寄り道」ってのが、いい感じだ。
いろんなアルゴリズム/データ構造の解説とか。

[[id:863]] 2002-08-05 12:44:37


chi のページ

http://members.tripod.co.jp/zzyyb/
「SRFI 勝手に翻訳プロジェクト」などすばらしい。

[[id:1052]] 2002-08-27 10:29:23


elispでcurry

Schemeの例を真似してやってみる。--SHIMADA
----
お手本:
(define (curry f)
(lambda (x)
(lambda (y)
(f x y))))

で、これ。

(defun curry (f)
(function (lambda (x)
(function (lambda (y)
(funcall f x y))))))

(defun add (x y) (+ x y))

(funcall (funcall (curry #'add) 1) 2)
=> Symbol's value as variable is void: f

あれ? スコープが‥‥‥

[[id:1127]] 2002-09-04 17:40:23


WindowsでSchemeを

http://www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/index.html
エッセイが面白い。

[[id:1132]] 2002-09-05 11:23:51


DrSchemeってひょっとしてすごい?

イメージを変数にバインドし、評価するとイメージが返るの図。
http://cake.dyndns.org/drscm.jpg

- うぉ、かっちょええ。 --Schemer。
- 本家ではこれ? http://www.drscheme.org/tour/202/tour-Z-H-5.html#%_chap_Temp_9
- これ非常に興味深いですが、schemeオブジェクトとしては何になるんでしょう?画像オブジェクトみたいなのを付け足したのかな。

[[id:1165]] 2002-09-11 16:58:33


top recent

HashedWiki version 3 beta
SHIMADA Keiki