CommonLisp Scheme Part13 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
05/05/12 21:44:01
過去スレ
Part1: URLリンク(piza2.2ch.net)
Part2: URLリンク(pc.2ch.net)
Part3: URLリンク(pc.2ch.net)
Part4: URLリンク(pc.2ch.net)
Part5: URLリンク(pc3.2ch.net)
Part6: URLリンク(pc3.2ch.net)
Part7: URLリンク(pc5.2ch.net)
Part8: URLリンク(pc5.2ch.net)
Part9: スレリンク(tech板)
Part10: スレリンク(tech板)
Part11: スレリンク(tech板)
Part12: スレリンク(tech板)

関連リンクは>>2-10あたり

2:デフォルトの名無しさん
05/05/12 21:45:39
>>1
スレ立て代行して頂きまして、
どうもありがとうございました。。。

世の中、良い人も居るんだなぁ〜とチョと嬉しくなりますた。

3:デフォルトの名無しさん
05/05/12 21:46:16
□参考リンク□

日本Lispユーザ会(日本語)
URLリンク(jp.franz.com)
ここにかなりの情報があります。
URLリンク(jp.franz.com)
削るとAllegro Common Lispのページへ

プログラミング言語Scheme(日本語)
URLリンク(www.sci.toyama-u.ac.jp)
Schemeの人はまずここを見ましょう。

Lisper への道(日本語)
URLリンク(www.geocities.co.jp)
判りやすいLISP入門サイト。

Schemeへの道(日本語)
URLリンク(www.stdio.h.kyoto-u.ac.jp)
ここはschemeの入門サイト。


4:デフォルトの名無しさん
05/05/12 21:46:28
□参考リンク□

日本Lispユーザ会(日本語)
URLリンク(jp.franz.com)
ここにかなりの情報があります。
URLリンク(jp.franz.com)
削るとAllegro Common Lispのページへ

プログラミング言語Scheme(日本語)
URLリンク(www.sci.toyama-u.ac.jp)
Schemeの人はまずここを見ましょう。

Lisper への道(日本語)
URLリンク(www.geocities.co.jp)
判りやすいLISP入門サイト。

Schemeへの道(日本語)
URLリンク(www.stdio.h.kyoto-u.ac.jp)
ここはschemeの入門サイト。

5:デフォルトの名無しさん
05/05/12 21:47:00
慶応の授業のページ・記号処理プログラミング 2001
URLリンク(buri.sfc.keio.ac.jp)

Practical Scheme(日本語)
URLリンク(www.shiro.dreamhost.com)
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)

Scheme Hash(英語)
URLリンク(okmij.org)
S式でXMLを使える様にするSXMLなど

John McCarthy's Home Page
URLリンク(www-formal.stanford.edu)
LISPの生みの親、J・マッカーシーのページだそうです。

Association of Lisp Users
URLリンク(www.alu.org)
米国のLispユーザ会

6:デフォルトの名無しさん
05/05/12 21:47:30
□SICP関係□

SICP(英語)
URLリンク(mitpress.mit.edu)
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。

計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
URLリンク(www.ipl.t.u-tokyo.ac.jp)

SICPの回答集
URLリンク(www.melt.kyutech.ac.jp)
URLリンク(pluto.aurorasd.co.jp)
URLリンク(www.ipl.t.u-tokyo.ac.jp)
URLリンク(www.sampou.org)

7:デフォルトの名無しさん
05/05/12 21:48:41
□その他□

Schemeで書かれた正規表現ライブラリ
URLリンク(www.cs.rice.edu)

幻の「入門Scheme」
URLリンク(www4.ocn.ne.jp)
オンラインで読める

各種scheme処理系をcygwin上からビルドする方法など。
URLリンク(www.geocities.co.jp)

Bit - Implantation compacte de Scheme
URLリンク(www.iro.umontreal.ca)
mini-schemeよりも小さい(?)bytecode変換系

Lisp 言語処理系: CAMPUS LIsP, Lemon version
URLリンク(aten.aial.hiroshima-u.ac.jp)
Cコードによるわずか1000行の実装

Cliki
URLリンク(www.cliki.net)
CommonLispのプログラムがたくさん紹介されているのでここを当たるべし。

8:デフォルトの名無しさん
05/05/12 21:49:14
encyCMUCLopedia
URLリンク(www.isr.ist.utl.pt)
cmucl以外でも有益なはず

CMUのLisp Repository
fURLリンク(ftp.cs.cmu.edu)
新旧様々なプログラムが置いてある

Tiny CLOS Tutorial
URLリンク(home.adelphi.edu)

Schemix
URLリンク(www.abstractnonsense.com)
Linuxのkernelへのパッチで、/dev/として扱えるTinyScheme

Bibliography of Scheme-related Research
URLリンク(library.readscheme.org)
Scheme関連の論文リンク集

9:デフォルトの名無しさん
05/05/12 21:50:32
その他よさそうなリンク

awkで書かれたわずか500行のLispインタプリタ
awklispを読めばLispが理解できる
URLリンク(www.accesscom.com)

Emacs Lisp 2
スレリンク(tech板)

* Hotdog Scheme URLリンク(rover.cs.nwu.edu)
 MS が金出してたみたい
* Bigloo URLリンク(www-sop.inria.fr)
 CLR 用のコードを吐けるようになったらしい

継続

なんでも継続
URLリンク(www.shiro.dreamhost.com)
Schemeへの道:継続
URLリンク(www.stdio.h.kyoto-u.ac.jp)
継続の使い方
URLリンク(www.geocities.co.jp)
継続の使用法
URLリンク(www.ice.nuie.nagoya-u.ac.jp)
CPS(継続渡しスタイル)の説明
URLリンク(www.csl.sony.co.jp)
Kahua: 継続ベースのアプリケーションサーバー
URLリンク(www.kahua.org)

10:デフォルトの名無しさん
05/05/12 21:51:06
仕様関係)
CLtL2: Common Lisp the Language 2nd edition
URLリンク(www-2.cs.cmu.edu)
CLHS: Common Lisp Hyper Spec
URLリンク(www.ai.mit.edu)
R5RS: Revised(5) Scheme(ja)
URLリンク(www.sci.toyama-u.ac.jp)

便利な情報リソース)
The Common Lisp Cookbook: いわゆる Cookbook
URLリンク(cl-cookbook.sourceforge.net)

小さい実装)
SECDR-Scheme: SECD machine model に基づく実装
URLリンク(lily.fan.gr.jp)
Minischeme: 1 ファイルに凝縮された Scheme 処理系
URLリンク(tinyscheme.sourceforge.net)
TinyScheme: Minischeme を色々弄ったもの
URLリンク(tinyscheme.sourceforge.net)
KI-Scheme, AM-Scheme, etc...
URLリンク(www.nifty.com)
LispMe: Palm 上で動く Scheme 処理系. これも SECD virtual machine.
URLリンク(www.lispme.de)

11:デフォルトの名無しさん
05/05/12 21:51:34
LISP Scheme Part9 (html化)
URLリンク(ruku.qp.tc)

独習 Scheme 三週間
URLリンク(www.sampou.org)
Schemeの教科書

よろずや
URLリンク(www.geocities.co.jp)
lispの実用的な情報が色々。

12:デフォルトの名無しさん
05/05/12 21:54:42
>>1-11 おつかれさまです

13:前すれ995
05/05/12 22:06:47
すまん駄目だった。
何も書かないってのはまずかったな。
かえってストレス溜まるわ。
>1乙

14:デフォルトの名無しさん
05/05/12 22:55:58
こいつらも貼っておこうぜ

Common-Lisp.net: 多くのプロジェクトがホスティングされてる
URLリンク(common-lisp.net)

Bill Clementson's Blog: Lisp関連の話題が中心のBlog
URLリンク(home.comcast.net)

Practical Common Lisp: S式の羅列で現実的な問題をどう解くのかそのギャップに悩まされてる人に
URLリンク(www.gigamonkeys.com)

15:デフォルトの名無しさん
05/05/12 23:02:53
>>13 乙です。

末尾再帰
(define fact
 (lambda (n)
  (letrec ((fact-tailrecursion
        (lambda (n prod)
              (if (= n 1)
               prod
               (fact-tailrecursion (- n 1) (* prod n)) ) ) ))
       (fact-tailrecursion n 1) ) )



上記の末尾再帰は、下記のiterationと等価。

(define fact-iteration
 (lambda (n)
  (do ((n n (- n 1))
     (prod 1 (* prod n)) )
     ((= n 1) prod) ) ) )


16:デフォルトの名無しさん
05/05/12 23:04:11
新スレわざわざ立てずとも、
末尾再帰最適化でなんとかならんのかw

17:デフォルトの名無しさん
05/05/12 23:07:54
継続があれば

18:デフォルトの名無しさん
05/05/12 23:09:10
とりあえず gc しときますね。

19:デフォルトの名無しさん
05/05/12 23:40:23
ゴミがまったくなかったらGCなんて無意味

20:デフォルトの名無しさん
05/05/13 09:23:04
ゴミのないものなどない
>1 乙

21:デフォルトの名無しさん
05/05/13 20:09:25
再利用できないゴミばっかだったらGCなんて無意味

22:デフォルトの名無しさん
05/05/14 22:25:15
                Prolog  →       …       → Progol
              /
μPlannner→Planner → Conniver→ Scheme → Common Lisp → ISO Lisp
              \      /      ▲このスレ
                Plasma  →    →    →    → ABCL → ...

Simula67→ Smalltalk70 → … → Smalltalk80 →     …          → Java , C# (w

目的指向プログラミング   論理プログラミング            帰納論理プログラミング
積み木の世界       Actor理論               並列オブジェクト 分散オブジェクト
                                                 マルチエージェント  セマンティックWeb

23:デフォルトの名無しさん
05/05/15 02:45:27
>>22は何?

24:デフォルトの名無しさん
05/05/15 02:55:24
gcされなくなるので参照しないこと

25:デフォルトの名無しさん
05/05/15 03:52:27
2ちゃんで異様に伸びてるスレって、
大抵ネイティブ住人はとうの昔に消えて、
荒しが初期のスレの拡大再生産してるだけだって噂、本当なんだな。

ここまで荒廃してるとは知らなかった。もうこねぇよ。じゃぁな


26:デフォルトの名無しさん
05/05/15 03:55:18
>>25は何?

27:デフォルトの名無しさん
05/05/15 04:07:19
>>22>>25

28:デフォルトの名無しさん
05/05/15 04:14:59
よくわかりませんが、ここに (gc) 置いときますね

29:デフォルトの名無しさん
05/05/15 10:32:03
>>22
いろいろ消し過ぎ....gcのバグか?

30:デフォルトの名無しさん
05/05/15 11:57:14
以下の処理が実行できない理由を教えて下さい。

(define a 33)
(letrec ((c a)(a 10)) c)


31:30
05/05/15 12:22:26
すみません。自己解決しました。

letrecで、cとaの未初期化領域が生成され、cには未初期化のaの値がはいる。
そのため、gaucheだと#undefがでてくる。

letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。


32:デフォルトの名無しさん
05/05/15 12:29:16
>>31
 それは違う

33:デフォルトの名無しさん
05/05/15 15:51:50
recはrecurs-のrec

34:デフォルトの名無しさん
05/05/16 09:37:17
>>31
>letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。
これは違うと思う。30の例はシンタックスエラーになるべきだと思うんだが。

> gaucheだと#undefがでてくる
ということは、もしかしてgaucheだと
(define a 33)
(letrec ((c a) (a 10))
 (set! c a)
 c)
--> 10
になるのかな?
そうなるとしたら、ちょっと不味いと思うんだが....どう?


35:デフォルトの名無しさん
05/05/16 09:41:09
>>34
それで10になるのは全然問題なさそうに思うんだけど、どうまずいの?


36:34
05/05/16 09:52:10
>>35
gaucheの#undefがどういう意味で出力されているのか知らないから聞いたんだけど、もしこれがletrec全体の評価結果として出力しているとしたら、これはシンタックスエラーを無視して実行していると思えたからなんだ。
これは、cにaを束縛しようとした時点で未定義変数への参照によるエラーが発生するべきだと思うからなんだけど....
これは正しいプログラムなら実行結果は同じになるからいいんだけど、schemeの勉強に使うにはちょっと不味いんじゃないかと思ったんだ。
実際、30は勘違いしたみたいだし。

37:デフォルトの名無しさん
05/05/16 10:43:01
補足:
R5RS 4.2.2 より
(letrec

38:デフォルトの名無しさん
05/05/16 10:46:37
補足:
R5RS 4.2.2 より
(letrec

39:デフォルトの名無しさん
05/05/16 12:11:05
>>36
エラーを出さなくてもR5RS違反ではないけどね。学習用として不親切ではあるな。



40:デフォルトの名無しさん
05/05/16 12:20:51
局所変数定義 letrec使ってエラーだエラーじゃないって?
頭が可笑しい人のレスか

41:デフォルトの名無しさん
05/05/16 12:32:23
letrec ではすべての局所変数が定義されてから初期化されますが、
初期化中に局所変数をアクセスするとエラーになってしまいますので注意。
すべての初期化が終わってからでないとアクセス出来ません。

letrec は、再帰関数を定義するのに使います。

(letrec
  ((fact (lambda (x) (if (> x 0) (* (fact (- x 1))) 1))))
 (fact 10))

42:デフォルトの名無しさん
05/05/16 13:15:00
学習用の DrScheme でもエラーにならないね。
(letrec ((x a) (a 1)) ...) を
(let ((x 未定義) (a 未定義)) (set! x a) (set! a 1) ...) のように展開
する実装では、チェックが難しいのかな。

43:デフォルトの名無しさん
05/05/16 13:36:54
エラーになる処理系ある?

44:デフォルトの名無しさん
05/05/16 16:07:24
SCM はエラー出すみたい。

45:デフォルトの名無しさん
05/05/16 21:36:19
>>9
>継続の使用法
>URLリンク(www.ice.nuie.nagoya-u.ac.jp)

これの学生さん卒業したのかな
2005 年 4 月以降どうなるか不明と書いてある

Bill Clementson's Blog も移動するみたいだね
URLリンク(home.comcast.net)

46:デフォルトの名無しさん
05/05/16 22:00:06
ああ。学生の頃の自分思い出して、やり切れない気持ちになった。
特にLispって研究テーマにはなりにくいよなぁ。
最近は、ソフトウェア実装屋を対象とした学部/研究科が増えてるらしいけど。

俺の友人で、どうしても哲学をやりたくて、社会人入学した香具師がいる。
まだ数年前、塾だか予備校で飯代稼ぎながら、いろいろ模索してた。
そこまで真剣に学問の道を考えるなら、きっと誰か拾ってくれるでしょ。と祈りたい(w

47:デフォルトの名無しさん
05/05/17 02:55:59
どっかで見た話題だなあと思ったら、似たのが sicp の練習問題にあるね。
letlec じゃなくて internal define だけど。
URLリンク(mitpress.mit.edu)

確か r6rs では internal define と関連して letlec* が追加されるとかいう話だけど、
未束縛の変数に左から順に set! していく、て実装だったら
そっちの方がやってる事に即している感じはするな。

48:デフォルトの名無しさん
05/05/17 13:10:19
r6rsって出るのかなぁ

49:デフォルトの名無しさん
05/05/17 13:17:03
今議論してるんだから、出るだろ。そのうち。


50:デフォルトの名無しさん
05/05/17 22:52:50
R6RSに含まれる機能は何でしょう?
おれが欲しいと思ってるのは

・名前空間
(せめてパッケージ)はぜひとも導入して欲しい。
いつまでも大域letで囲むなんて馬鹿げてる。

・多値のファーストクラス化
インタプリタの延長みたいな実装がほとんどの現状で
多値を効率よく扱える手段がないとまともに使いたくない。
(let ((v (values 1 2 3)))
(if (values? v)
 (value-ref v 2) ;; => 3
 (error "excepted values"))
とか。
せめて上のvalues?のように関数の返す値が多値かどうか
呼び出し側で判らないと使い物にならないだろう。

・関数呼び出し側の名前つき引数。
VBのアレは便利だろ?

あと
・キーワード、定義済マクロ名の参照はエラーにする
くだらん論争の種を潰す。

とか。

51:デフォルトの名無しさん
05/05/17 23:18:59
URLリンク(www.schemers.org)

52:デフォルトの名無しさん
05/05/17 23:39:22
>>51
>remove multiple values
正気かよ。

って、まだ決まってないのか。
消すんじゃなくて発展させる方向に行かないかね。
副作用記述減らせる手段の1つなのに。

53:デフォルトの名無しさん
05/05/17 23:49:43
>>50
> ・名前空間
> ・関数呼び出し側の名前つき引数。

Common Lisp で幸せ

54:デフォルトの名無しさん
05/05/17 23:51:41
いや、CommonLispに転向するぐらいならLISP辞めたほうがマシ

55:デフォルトの名無しさん
05/05/17 23:52:37
以降、CL厨が暴れます。。。

56:デフォルトの名無しさん
05/05/17 23:58:10
R6RS より CLtL3 をやってほしい

57:デフォルトの名無しさん
05/05/18 00:03:09
>>54
>副作用記述減らせる手段の1つなのに。
詳しく。

58:デフォルトの名無しさん
05/05/18 00:19:04
リスト内包表現が簡単に書けた。拡張可能だしhaskellより便利になり得る。
(define-syntax %inner-tuple
(syntax-rules (<-)
((_ (<- ret) form var val rest ...)
(%inner-tuple ret (set! ret (cons form ret)) var val rest ...))
((_ ret form () ()) (let ((ret '())) form (reverse! ret)))
((_ ret form (pred rest-var ...) (<- rest-val ...))
(%inner-tuple ret (if pred form) (rest-var ...) (rest-val ...)))
((_ ret form (var rest-var ...) (val rest-val ...))
(%inner-tuple ret
(let lp ((lis val))
(if (null? lis) '()
(let ((var (car lis))) lis
form (lp (cdr lis)))))
(rest-var ...) (rest-val ...)))
((_ ret form (var ...) (val ...) (var1 <- val1) rest ...)
(%inner-tuple ret form (var1 var ...) (val1 val ...) rest ...))
((_ ret form (var ...) (val ...) pred rest ...)
(%inner-tuple ret form (pred var ...) (<- val ...) rest ...))
))
(define-syntax tuple
(syntax-rules ()
((_ form args ...)
(%inner-tuple (<- ret) form () () args ...))))
(tuple (cons i j) (i <- (iota 10)) (j <- (iota 10)))

59:デフォルトの名無しさん
05/05/18 03:22:06
クロージャ用シンタックスシュガー?

60:デフォルトの名無しさん
05/05/18 05:09:08
多値なんて (関数引数と戻り値の対称性に関する神学的な論争を除けば)
パフォーマンスハックにすぎないんだから、ファーストクラス化しちゃったら
唯一のメリットが失われるじゃん。
>>50 みたいに扱いたいならリスト返すか、(receive v (values 1 2 3) ...)
で受ければいいだけだしさ。


61:デフォルトの名無しさん
05/05/18 23:48:39
神学的な論争こそがschemeの本質なのに!

62:デフォルトの名無しさん
05/05/19 00:00:16
否定はすまい

63:デフォルトの名無しさん
05/05/19 00:14:04
……………… き り と り せ ん ………………

64:デフォルトの名無しさん
05/05/20 01:34:32
合理性 → HASKELL
神学的論争 → SCHEME
実用性 → その他

65:デフォルトの名無しさん
05/05/20 02:10:31
実用性 → Common Lisp に決まってる

66:デフォルトの名無しさん
05/05/20 03:57:47
……………… き り と り せ ん ………………

67:デフォルトの名無しさん
05/05/20 22:23:21
久々にSchemeインタプリタ作った
やっぱええわ

68:デフォルトの名無しさん
05/05/20 23:25:37
久々にCommon Lispコンパイラ作った
やっぱ疲れるわ <湯浅>

69:デフォルトの名無しさん
05/05/20 23:31:35
「ええ、PM経験した僕も、一昨年は近山PMの下でスーパークリエータとしてデビューしました。
 はぎゃー君も誘ったんだけど、彼は真面目だから付き合ってくれませんでした。
 成果物は国際学会の発表ネタに使いまわしたんですけど、
 サスマン教授は『素晴らしい。是非このロボを譲ってくれないか』って激賞されちゃいましたよ」

だいたいマジ

70:デフォルトの名無しさん
05/05/21 00:09:28
おとなげない

71:デフォルトの名無しさん
05/05/21 00:17:04
いみふめ。

こだわらずに楽しい事をやろうとする精神、
そして応募して採択されたもん勝ちだよんとアピールする姿に、
なんか楽しくなっちゃったけどなw

72:デフォルトの名無しさん
05/05/21 00:23:16
重要なのは、言語でなくライブラリだよ

73:デフォルトの名無しさん
05/05/21 00:28:59
>>72
だよねー

74:デフォルトの名無しさん
05/05/21 00:42:32
また頭悪そうなのが粘着しはじめたな

75:デフォルトの名無しさん
05/05/21 01:46:28
言語仕様(意味論込)として、scheme 以上にすっきりした言語
ってなにがありんすか?


76:デフォルトの名無しさん
05/05/21 01:48:10
○ransk?

77:デフォルトの名無しさん
05/05/21 02:03:40
アセンブリ

78:デフォルトの名無しさん
05/05/21 02:05:48
万能チューリング機械

79:デフォルトの名無しさん
05/05/21 02:10:23
brainf*ck

80:デフォルトの名無しさん
05/05/21 02:25:38
>>50
>・名前空間
>(せめてパッケージ)はぜひとも導入して欲しい。
>いつまでも大域letで囲むなんて馬鹿げてる。
遅レスすまそ。let使ってパッケージもどきを作る方法があるの?
Schemeだとlet内でdefineしてもグローバルに反映されないから無理だと
思ってたんだけど(Common Lispならできる)。
モジュールじゃおおげさな時に使いたいので教えて。


81:デフォルトの名無しさん
05/05/21 07:56:06
横スレだが、わたしゃこうしてる。
(define export:foo #f)
(let () (define foo ...) ... (set! export:foo foo))
(define foo export:foo)

82:デフォルトの名無しさん
05/05/21 09:15:39
それならグローバルなハッシュテーブルに詰め込んでおく方が。

パッケージとは別に、CommonLisp風のset!(ローカルでunboundなら
グローバルにbindする)ができたら便利だとは思うが、Schemeじゃ多分無理。

83:デフォルトの名無しさん
05/05/21 09:29:09
俺はこうかな
(define foo #f)
(define bar #f)
(let ()
 (define hoge ...)
 (set! foo (lambda (...)...))
 (set! bar (lambda (...)...))
)
でも、最適化が効きにくくて>>81より遅くなりそうだな...(考え中)

>それならグローバルなハッシュテーブルに詰め込んでおく方が。
それってどんなやりかた?

84:デフォルトの名無しさん
05/05/21 11:15:02
えぇー、scm.libとかでやってる方法がデフォルトだと思ってた

85:デフォルトの名無しさん
05/05/21 11:20:08
(make-hash-table xxx-package)

(let (pi 3.141692)
(define hoge ...)
(hash-table-put! xxx-package 'foo (lambda (...) ...))
(hash-table-put! xxx-package 'bar (lambda (...) ...))
)

(define foo (hash-table-get xxx-package 'foo))
(define bar (hash-table-get xxx-package 'bar))

>>83 こんな感じ。実際こうやって使ったことないからちゃんと動くかわからないけど。
>>84 それはパッケージ管理?CommonLisp風のset!の提供の方?

86:84
05/05/21 11:40:44
>>85
パケージ管理の話してるんだろ、ここ?

87:84
05/05/21 11:57:22
slibの話のつもりだったんだけど・・・あれ?パッケージ管理してねぇや。。。スレ汚しすまそ

88:デフォルトの名無しさん
05/05/21 11:58:31
slibの話のつもりだったんだけど・・・あれ?パッケージ管理してるけど名前空間は分けてないや。。。スレ汚し^2すまそ

89:デフォルトの名無しさん
05/05/21 12:11:23
つまらんことで悩んでないで Common Lisp 使え

90:デフォルトの名無しさん
05/05/21 12:14:26
うぜ

91:83
05/05/21 15:17:48
>>85
なるほどそういう使い方があったのか THX!
すると例えば
(define-syntax define-package
 (syntax-rules (export)
  ((_ pkgname (export id ...) body ...)
    (begin (define pkgname (make-hash-table))
     (let ()
      body ...
      (hash-table-put! pkgname 'id id) ...)
     (define id (hash-table-get pkgname 'id)) ...))))
とやって
(define-package foo-package
 (export foo bar)
 (define hoge 9)
 (define foo (lambda (x) (- x hoge)))
 (define bar (lambda (y) (+ y hoge))))
とすれば
hoge => #unbound
(foo 10) => 1
(bar 10) => 19
となるわけか。
実装に依存したくない時はいいかも!


92:デフォルトの名無しさん
05/05/21 16:11:17
hash-table自体が実装に依存する罠
まあ後付で作れるけどさ

93:デフォルトの名無しさん
05/05/22 03:54:25
すごく遅くてもいいならalist使えばいい。


94:ミミ
05/05/22 19:28:26
Scheme でクラスを定義する場合、
メンバ変数の命名規則はどうしていますか?

Java や C++ だと m_var とか _var とか var_ とかで
命名すると思いますが、Scheme でアンダースコアは
あまり使われませんよね。

95:デフォルトの名無しさん
05/05/22 22:43:35
>>94
そうでもない。アンダースコアも普通に使うよ。

96:デフォルトの名無しさん
05/05/22 22:55:17
入力したlistを整数倍してlistで返すにはどうすればいいんですか?(list 3 4) → (list 6 8) みたいな感じです。
consでかえるようにならできたんですが。

97:デフォルトの名無しさん
05/05/22 22:56:18
map

98:デフォルトの名無しさん
05/05/22 22:58:57
>>96
(map (lambda (elt) (* elt 2)) (list 3 4))
--> (6 8)
ってことかな?

99:デフォルトの名無しさん
05/05/22 22:59:39
((cut map * 2 <>) '(3 4))
=> (6 8)
cut :: SRFI 26: Notation for Specializing Parameters without Currying


100:デフォルトの名無しさん
05/05/22 23:02:09
(map (lambda (n) (* n 2)) (list 3 4))
LISPなど全く知らない俺が適当に書いてみました

101:デフォルトの名無しさん
05/05/22 23:16:22
(define-syntax m-list
 (syntax-rules ()
  ((_) ())
  ((_ dat ...) (list (* dat 2) ...))))
(m-list 3 4)
--> (6 8)

102:デフォルトの名無しさん
05/05/22 23:23:36
(define-syntax rewrite-list
 (syntax-rules (list)
  ((_ n (list dat ...))
  (list 'list (* dat n) ...))))
(rewrite-list 2 (list 3 4))
--> (list 6 8)

103:ミミ
05/05/22 23:28:13
>>95
クラスのメンバ変数をアンダースコアで命名していますか?

104:デフォルトの名無しさん
05/05/22 23:36:35
クラスのメンバ変数など存在しない

105:デフォルトの名無しさん
05/05/22 23:46:45
ハイフォンが使えるのにアンダースコア使う理由って何?
と、LISPなど全く知らない俺が適当に聞いてみる

106:ミミ
05/05/22 23:50:28
>>104
どういうこと?

107:デフォルトの名無しさん
05/05/23 00:03:56
>>105
単に単語の区切りの意味でハイフンは使うから区別したいんじゃね?

108:デフォルトの名無しさん
05/05/23 00:08:48
>>107
わかるようなわからんような、実例プリーズ

109:デフォルトの名無しさん
05/05/23 03:27:32
すみません。scheme というか lisp 初めたばかりなのですが、
list と cons の意味がわかりません。
(cons 1 2) と (list 1 2) はどう違うんでしょうか。
両方とも car と cdr の結果は同じですよね?


110:デフォルトの名無しさん
05/05/23 03:36:08
>>109
car は同じだけど、 cdr は違うよ。

(car (cons 1 2))
1
(cdr (cons 1 2))
2

(car (list 1 2))
1
(cdr (list 1 2))
(2)


111:デフォルトの名無しさん
05/05/23 04:07:51
はい。
(cdr (list 1 2))
が (2) になるのはどういった理由かわからないのです…


112:デフォルトの名無しさん
05/05/23 04:18:46
あぁ、pair と list の項目を読んでみたら、なんとなくわかった気がします。
スレよごし、スミマセン。


113:デフォルトの名無しさん
05/05/23 08:34:12
>>112
cons は「core」で、list は「library」みたいな区別をしてみるのもいいかも.
「library」は「core」から導くことができるんだね. 例えば
list は (lambda x x) と等価とかね ( もちろん lambda は「core」).
後になって、define-syntax とかでマクロを組むときに、きっと役に立つよ.

雑談スマソ

114:デフォルトの名無しさん
05/05/23 09:25:14
わざわざオレ用語で説明せんでも。


115:デフォルトの名無しさん
05/05/23 11:07:33
>>113
lambda は「library」でいいじゃん
(define-syntax λ
(syntax-rules ()
((_ formals body1 body2 ...)
(let-syntax ((dummy (syntax-rules () ((dummy) #f))))
(define (proc . formals)
body1 body2 ...)
proc))))

116:3歳児
05/05/23 11:13:33
たんなることばのもんだいだと思いまちた

117:デフォルトの名無しさん
05/05/23 17:04:35
>>111
(cadr (list 1 2))が2になる、って言ったら解る?
(car (cdr (list 1 2)))と同じ。

あと、(list 1 2)は(cons 1 (list 2))と同じ

図で描くと解りやすいけど、図入りの本は持ってないの?

118:デフォルトの名無しさん
05/05/23 17:11:34
最もプリミティブなのは点対だからね。
(a b c) ってのは (a . (b . (c . ()))) の略だということを思い出そう。

119:3歳児
05/05/23 17:15:23
このすれのれべる、がくっとさがりまちたねぇ

120:デフォルトの名無しさん
05/05/23 17:28:09
>>114
R5RS読めば?

121:デフォルトの名無しさん
05/05/23 18:09:23
R5RSの「primitive」のことを「core」なんて命名してるからオレ言語と
揶揄されてるんじゃないの?

122:Scheme 初心者
05/05/23 23:57:52
>>115

define は lambda を使って定義できると思うのですが・・・

123:デフォルトの名無しさん
05/05/24 00:08:48
>>122
つか (define (f args...) body...) って (define f (lambda (args...) body...) の省略形だから(ry

124:デフォルトの名無しさん
05/05/24 00:21:28
let も lambda で書ける

125:112
05/05/24 00:40:23
>>115 >>123

1変数関数の場合で、例えばフィボナッチ数列を
求める関数をdefineを使わないで定義したいときは、

(((lambda (f)
((lambda (p)
(f (lambda (arg) ((p p) arg))))
(lambda (p)
(f (lambda (arg) ((p p) arg))))))
(lambda (fib)
(lambda (n)
(if (<= n 1)
1
(+ (fib (- n 1)) (fib (- n 2)))))))
10)

で定義できるから、lambdaがprimitiveでdefineはlibraryじゃないの?
マジで初心者だから教えてよママン!

126:デフォルトの名無しさん
05/05/24 01:53:11
>>125
基本的には正しい。lambdaがあれば変数の束縛もできるからdefineの代用になる。

127:デフォルトの名無しさん
05/05/24 02:18:50
トップレベル以外はな

128:デフォルトの名無しさん
05/05/24 08:02:54
トップレベルもset!があればR5RS的には○。IEEE的には●でなかったっけ?

129:デフォルトの名無しさん
05/05/24 09:21:37
R5RSだと、define で割り当てされてないと set! はエラーじゃなかったっけ

130:?デフォルトの名無しさん
05/05/24 11:52:15
R5RS 5.2.1 の最後の段落の日本語訳によれば
「Schemeの実装によっては、初期環境として、可能なあらゆる変数がなんらかの場所に束縛されており、そしてその場
所の大多数が未定義値を入れている、という環境を使う。このような実装ではトップ・レベル定義は代入と全く等価である。」
とあるんだけど....
これはそういう実装でもかまわないって意味なのかねぇ?

131:デフォルトの名無しさん
05/05/24 11:59:00
そういうこと。


132:デフォルトの名無しさん
05/05/24 16:24:30
手元の処理系 (Gauche、Guile、PLT Scheme) では、未定義変数の参照、変更
はいずれもエラーになったな。>>130 からするとエラーにしなくてもかまわない
みたいだけど、そういった処理系ある?

133:デフォルトの名無しさん
05/05/24 19:45:26
petite chezではエラーにならないようだ。
SCMもオプションでそうできた記憶があるけど未確認ですまぬ。

134:デフォルトの名無しさん
05/05/24 21:25:05
schemeのquasiquote書いてみました。これで合ってます?

(define-syntax qq
 (syntax-rules (quote quasiquote unquote unquote-splicing)
  ((qq x)           (qq "in" 0 x))
  ((qq "in" lv (quote x))   (list 'quote (qq "in" lv x)))
  ((qq "in" lv (quasiquote x)) (list 'quasiquote (qq "in" (1 . lv) x)))
  ((qq "in" 0 (unquote x))   x)
  ((qq "in" (1 . lv) (unquote x))
   (list 'unquote (qq "in" lv x)))
  ((qq "in" 0 (unquote-splicing x))
   x)
  ((qq "in" lv ((unquote-splicing x) . xs))
   (append (qq "in" lv (unquote-splicing x)) (qq "in" lv xs)))
  ((qq "in" lv (x . xs))    (cons (qq "in" lv x) (qq "in" lv xs)))
  ((qq "in" lv #(x ...))    (list->vector (qq "in" lv (x ...))))
  ((qq "in" lv x)       (quote x))))


135:デフォルトの名無しさん
05/05/28 00:57:22
LISP の歴史
URLリンク(community.computerhistory.org)

INTERLISP の絵が可愛い

136:デフォルトの名無しさん
05/05/28 04:29:05
>>135
可愛いね。壁紙にしよう。

137:デフォルトの名無しさん
05/05/28 09:20:32
すごく2chのAAっぽいんだが。

138:デフォルトの名無しさん
05/05/28 09:24:53
>>137
2chのやりすぎ(w

139:デフォルトの名無しさん
05/05/28 15:42:08
>>136
壁紙には風太くんの写真だよ。

140:デフォルトの名無しさん
05/05/30 01:33:40
やった、LISP をものにしたぞ!

141:デフォルトの名無しさん
05/05/30 03:57:12
>>140
悟れた?

142:デフォルトの名無しさん
05/05/30 09:14:27
Windows/VC++版のGauche-0.8.3w-03公開記念age


143:デフォルトの名無しさん
05/05/30 22:20:33
あはは、やっとWindowsで動かないと糞だってことが透過したか
その調子でCMUCLのWindowsポーティングも頼むよ

144:デフォルトの名無しさん
05/05/30 22:32:25
>>143
取り敢えず、ここら辺りから頑張ってみれ。

URLリンク(www.caddr.com)

145:デフォルトの名無しさん
05/05/30 22:36:20
15年位前の記憶だけど、
CMUCLはKCLと違って、
RISC CPU (SPARC)専用にチューニングされてるから
Intelには移植しにくそう・・・つう風評を聞いたな。

146:デフォルトの名無しさん
05/05/30 22:39:08
こっちの方が良かったかな。

URLリンク(www.dridus.com)

一年もあれば何とかなるんじゃなかろうか。

147:デフォルトの名無しさん
05/05/30 22:44:37
いまどき、CMUCL移植までして動かすアプリって何なんだろ?
当時は 制約ベースのGUIツールキットとか、音楽関係で動かしたいアプリがあったような記憶があるけど。

148:デフォルトの名無しさん
05/05/30 22:47:00
>>146
もしかして、シグウィン上で動かしているの?
折れ、cygwin嫌いなんだよな。 昔、ノーパソに入れたら恐ろしく遅かったから。。
多分、日本語も今市だし。

149:デフォルトの名無しさん
05/05/30 22:48:13
いや、君が嫌いだろうと好きだろうと、俺は別に構わんが。

150:デフォルトの名無しさん
05/05/30 23:06:14
>>145
今でも CMUCL のメインのメンテナは SPARC 使いだね。
メインのプラットフォームは x86 と言って間違いないと思うけど。

151:145
05/05/30 23:07:54
>>144
なるほど。
SPARCベッタリのCMUCLとは別に、
移植性の高いCMUCLクローンを
Pythonベースのクロスコンパイラを種に
ブートストラップ方式で作る、つうプロジェクトっすか。

  CMU CL:カーネギー氏とメロン氏が鉄鋼業で貯めたお金で作った大学のCommon Lisp
  SB CL: 例の 鉄でガッポリ儲けた所が作ったのとよく似たCommon Lisp

っすか。なんじゃこのネーミングセンスはw

152:デフォルトの名無しさん
05/05/30 23:14:49
>>150 ・・・今じゃx86で動くんですか。DOS Extender時代(pre Linux時代)とは隔世の感だなぁ

153:デフォルトの名無しさん
05/05/30 23:22:13
ずいぶん前にSchemeのContinuationの実装方法をここで議論した事があったんだけど、
議論と思ってたのは俺だけ、実はお相手は随分なプロヘッショナルな方だったのね。
某所でプロが揃い踏みしてるの見て、ちょっとビビってしまった(いやいや俺もプロだし・・・何のプロだろう?

154:Schemer
05/05/30 23:22:18
Lisper からみたら Schemer ってどうみえるのでしょうか?
自分の中では、

 Lisp = 松下(統制されている)またはブリーフ(チソポが窮屈)
 Scheme = ホンダ (自由にしてる)またはトランクス(チソポがフリー)

という感じがする。

155:153
05/05/30 23:22:52
あらら、一瞬にしてレベルが低下してるし

156:デフォルトの名無しさん
05/05/30 23:31:50
Lisp遣い・・・・・・数式処理や並列計算、専用ハード設計、あと駅スパートシステムとかWebアプリのプロヘッショナル
Scheme遣い・・・実物見た事ないっす。厳選された奇妙な形のブロックでお城を建てる哲学者?

157:デフォルトの名無しさん
05/05/30 23:32:28
>>151
鉄はカーネギーで、メロンは銀行だよ。だからスチール(鉄)バンク(銀行)。
最近は SBCL の方が UNICODE やネイティブスレッドの採用など、CMUCL
よりも使い易くなってると思います。移植性も良いし。

SPARC は tagged arithmetic があるから Lisp コンパイラを作り易いという
話だけど、ユーザーベースから言ったらやっぱり x86 な訳で、開発者にも
Linux 使いが多い感じ。あと、意外にも Mac ユーザが多いっぽいね。

158:デフォルトの名無しさん
05/05/30 23:35:49
>>157
すまそ、Steel Bank Common Lisp Developper MLの一通目を斜め読みするのがやっとで、
バンクをなんとなく無視してますた。

> SPARCは tagged arithmetic
そうそうw 
SUN のSPARC関連論文漁ってると、SPARCは最初からLispのサポートを視野に入れていたとか見た。
・・・Java CPUは一体どうなったんだろう(w

159:デフォルトの名無しさん
05/05/30 23:37:05
>>154
Schemer: "Buddha is small, clean, and serious."
   Lispnik: "Buddha is big, has hairy armpits, and laughs."

Nikodemus 氏のシグニチャだけど、名言だね。

160:デフォルトの名無しさん
05/05/30 23:41:22
>>158
ググると、Lucid Common Lisp の為に用意されたって記述があるけど
真偽の程はどうでしょう。
Lucid の社長さんって Sun に居た気がしたけど、今どうしてるのかな。

161:デフォルトの名無しさん
05/05/30 23:53:24
>>159
綺麗でかわいいブッダと、
腋毛ボウボウの豪傑ブッダかよ!

科学では、少ない原則でより多くの事柄を説明できる理論を採用する。
すると、Schemeが示そうとしているScienceは一体なんなんだろう。。。

>>160
Lucid 社長・・・わかんない。名前は聞いた事あるけど。
最近、Lisperの臭いをくんくん嗅ぎ分けながら業界のたくってるんだけど、
Frantz社長の名前くらいしか聞かなかった。あとは元Symbolicsで今は紺猿の人とか。

162:デフォルトの名無しさん
05/05/31 00:06:15
閑話休題


163:デフォルトの名無しさん
05/05/31 00:42:03
Lucid は今の LispWorks じゃないかな。
以前評価したときは Allegro より高速だった(on x86)けど、日本ではマイナーかな。

164:デフォルトの名無しさん
05/05/31 07:51:23
tagged arithmeticって、何?

165:デフォルトの名無しさん
05/05/31 07:57:43
6月19日-22日に開催されるInternational Lisp Conference 2005のスピーカーリストには、
Richard Gabriel, Sun Labs (Menlo Park, CA)
って書いてある。現在も、Sunにいるらしい。
URLリンク(www.international-lisp-conference.org)

166:デフォルトの名無しさん
05/05/31 13:01:32
>>164
32bit wordの下位2ビットをタグとして扱うことができる。

167:flatline@Vim%Chalice ◆r6EONKKhcc
05/05/31 18:24:40
サイト移転しますた
URLリンク(user.ecc.u-tokyo.ac.jp)

168:flatline@Vim%Chalice ◆r6EONKKhcc
05/05/31 18:24:55
サイト移転しますた
URLリンク(user.ecc.u-tokyo.ac.jp)

169:デフォルトの名無しさん
05/05/31 18:38:51
・・・確かに「lispは25歳以下のスポーツ」と呼ばれるだけの事があるなw

170:デフォルトの名無しさん
05/05/31 20:01:18
>>169 それはつらいなあ.私はヘキサでもギリギリだ.

171:デフォルトの名無しさん
05/05/31 21:56:57
URLリンク(i.loveruby.net)

上のページの Y-Combinator を,練習を兼ねて Common Lisp に移植してみました.

(setf (symbol-function 'Y)
#'(lambda (f)
((lambda (proc)
(funcall f #'(lambda (arg) (funcall (funcall proc proc) arg))))
#'(lambda (proc)
(funcall f #'(lambda (arg) (funcall (funcall proc proc) arg)))))))


(setf (symbol-function 'fact0)
#'(lambda (f)
#'(lambda (n)
(if (zerop n)
1
(* n (funcall f (- n 1)))))))


(funcall (Y #'fact0) 5) => 120

...やっぱり大変だ,これ.もっといい書き方はないものでしょうか.


172:デフォルトの名無しさん
05/05/31 22:52:36
(setf (symbol-function ... はムリムリ感が強いなあ。

(defvar Y
(lambda (f)
((lambda (proc)
(funcall f (lambda (arg) (funcall (funcall proc proc) arg))))
(lambda (proc)
(funcall f (lambda (arg) (funcall (funcall proc proc) arg)))))))

(defvar fact0
(lambda (f)
(lambda (n)
(if (zerop n)
1
(* n (funcall f (- n 1)))))))

(funcall (funcall Y fact0) 5) => 120

173:デフォルトの名無しさん
05/05/31 23:07:36
>>172 なるほど,無理に関数側にセットするより,funcall を使う前提で変数
側にセットした方が,かえって自然ですね.

しかし,funcall が林立するのは,どうしようもないのかなあ.

174:デフォルトの名無しさん
05/05/31 23:13:58
evalが林立するよりはイイw

175:デフォルトの名無しさん
05/06/01 00:34:04
Gauche 0.8.4 キタ━━(゚∀゚)━━ッ!!


176:デフォルトの名無しさん
05/06/01 03:35:54
>>159
さしずめ Scheme 屋は三論の学僧で Lisp 屋は禅坊主ってところっすか。
仲が悪くてもしかたないな。

>>173
確かに関数をぐるぐる渡していくとなると面倒ですよね。
CPS とかでちょっと書いてみる位でも結構うんざりしたり。
#`(f ...) -> (funcall f ...) とかなリーダマクロでも書いてみるとか。あんま変わらないか。

177:デフォルトの名無しさん
05/06/01 11:10:12
私は Scheme から入ったのだけど,他の Lisp の良さも知りたいなあ.
Schemer と Common Lisper は仲が悪いみたいだけど,どちらも Lisp 文化の
主要な担い手なのだから.Scheme の方が短いコードでその優秀性を示しやす
いのか,こういう場では Scheme のよさが目立ちがちな気がする.だけど,
Common Lisp の優秀性もぜひお教えいただきたいものです.

自分の知っている例だと,かの「グリーンスパンの第10法則」のグリーンスパ
ン氏の blog から
URLリンク(philip.greenspun.com)

「Common Lisp はロバストで効率的.Scheme ではハイパワーマシンでもこな
せなかった処理を,Common Lisp だと非力なマシンでも成し遂げることができ
た」

こんな感じで,自分の知っている言語の良さを出し合っていけたらなあ,と思
うのです.Scheme や Common Lisp や,スレ違いだけど Emacs Lisp までも.

(Y-Combinator を Emacs Lisp に移植しようとして,動かない原因がしばら
くわからなかったのは秘密.気が付いてみたら当たり前.動的スコープだから
クロージャにならないのだもの...絶対に無理)


178:デフォルトの名無しさん
05/06/01 12:52:55
ところで,Common Lisp で,末尾再帰の最適化をやってくれる処理系って,ど
んなものがあるでしょうか?xyzzy がバージョンアップしたみたいなので,試
してみたのだけど,やっぱりスタック数40,000 程度でオーバーフロー.

(defun tail-rec (x y)
(if (<= x 0)
y
(tail-rec (- x 1) (+ y 1))))

(tail-rec 40000 0) => オーバーフロー

Petite Chez Scheme だったら 100,000,000 でも軽々動くのに.こういうのは
再帰にせず,堂々と loop で書くのが Common Lisp 的なのだろうか.

(define (tail-rec x y)
(if (<= x 0)
y
(tail-rec (1- x) (1+ y)))

(tail-rec 100000000 0) => 100000000



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5252日前に更新/268 KB
担当:undef