CommonLisp Scheme Part13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/12(木) 21:44:01Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: http://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: http://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part11: http://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part12: http://pc8.2ch.net/test/read.cgi/tech/1100229366/
関連リンクは>>2-10あたり
0002デフォルトの名無しさん
2005/05/12(木) 21:45:39スレ立て代行して頂きまして、
どうもありがとうございました。。。
世の中、良い人も居るんだなぁ〜とチョと嬉しくなりますた。
0003デフォルトの名無しさん
2005/05/12(木) 21:46:16日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
http://jp.franz.com/
削るとAllegro Common Lispのページへ
プログラミング言語Scheme(日本語)
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。
Lisper への道(日本語)
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html
判りやすいLISP入門サイト。
Schemeへの道(日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
ここはschemeの入門サイト。
0004デフォルトの名無しさん
2005/05/12(木) 21:46:28日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
http://jp.franz.com/
削るとAllegro Common Lispのページへ
プログラミング言語Scheme(日本語)
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。
Lisper への道(日本語)
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html
判りやすいLISP入門サイト。
Schemeへの道(日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
ここはschemeの入門サイト。
0005デフォルトの名無しさん
2005/05/12(木) 21:47:00http://buri.sfc.keio.ac.jp/lisp/menu.html
Practical Scheme(日本語)
ttp://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)
Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
S式でXMLを使える様にするSXMLなど
John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。
Association of Lisp Users
http://www.alu.org/alu/home
米国のLispユーザ会
0006デフォルトの名無しさん
2005/05/12(木) 21:47:30SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。
計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
http://www.ipl.t.u-tokyo.ac.jp/sicp/
SICPの回答集
http://www.melt.kyutech.ac.jp/~gogogo/sicp_ex/
http://pluto.aurorasd.co.jp/~mkama/sicp/
http://www.ipl.t.u-tokyo.ac.jp/sicp/solution.root.html
http://www.sampou.org/scheme/sicp/answer/
0007デフォルトの名無しさん
2005/05/12(木) 21:48:41Schemeで書かれた正規表現ライブラリ
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html
幻の「入門Scheme」
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
オンラインで読める
各種scheme処理系をcygwin上からビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/
Bit - Implantation compacte de Scheme
http://www.iro.umontreal.ca/~dube/
mini-schemeよりも小さい(?)bytecode変換系
Lisp 言語処理系: CAMPUS LIsP, Lemon version
http://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
Cコードによるわずか1000行の実装
Cliki
http://www.cliki.net/index
CommonLispのプログラムがたくさん紹介されているのでここを当たるべし。
0008デフォルトの名無しさん
2005/05/12(木) 21:49:14http://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/
cmucl以外でも有益なはず
CMUのLisp Repository
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html
新旧様々なプログラムが置いてある
Tiny CLOS Tutorial
http://home.adelphi.edu/~sbloch/class/272/tclos/tutorial.shtml
Schemix
http://www.abstractnonsense.com/schemix/
Linuxのkernelへのパッチで、/dev/として扱えるTinyScheme
Bibliography of Scheme-related Research
http://library.readscheme.org/
Scheme関連の論文リンク集
0009デフォルトの名無しさん
2005/05/12(木) 21:50:32awkで書かれたわずか500行のLispインタプリタ
awklispを読めばLispが理解できる
ttp://www.accesscom.com/~darius/
Emacs Lisp 2
http://pc2.2ch.net/test/read.cgi/tech/1068467385/
* Hotdog Scheme http://rover.cs.nwu.edu/~scheme/
MS が金出してたみたい
* Bigloo http://www-sop.inria.fr/mimosa/fp/Bigloo/
CLR 用のコードを吐けるようになったらしい
継続
なんでも継続
ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
Schemeへの道:継続
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html
継続の使い方
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation
継続の使用法
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
CPS(継続渡しスタイル)の説明
http://www.csl.sony.co.jp/person/masui/Forum/data/20011215023622/
Kahua: 継続ベースのアプリケーションサーバー
ttp://www.kahua.org/
0010デフォルトの名無しさん
2005/05/12(木) 21:51:06CLtL2: Common Lisp the Language 2nd edition
http://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
CLHS: Common Lisp Hyper Spec
http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/FrontMatter/Chapter-Index.html
R5RS: Revised(5) Scheme(ja)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html
便利な情報リソース)
The Common Lisp Cookbook: いわゆる Cookbook
http://cl-cookbook.sourceforge.net/
小さい実装)
SECDR-Scheme: SECD machine model に基づく実装
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu
Minischeme: 1 ファイルに凝縮された Scheme 処理系
http://tinyscheme.sourceforge.net/minischeme.tar.gz
TinyScheme: Minischeme を色々弄ったもの
http://tinyscheme.sourceforge.net/
KI-Scheme, AM-Scheme, etc...
http://www.nifty.com/download/dos/prog/lisp/
LispMe: Palm 上で動く Scheme 処理系. これも SECD virtual machine.
http://www.lispme.de/lispme/
0011デフォルトの名無しさん
2005/05/12(木) 21:51:34http://ruku.qp.tc/dat2ch/0403/01/1069594582.html
独習 Scheme 三週間
http://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html
Schemeの教科書
よろずや
http://www.geocities.co.jp/SiliconValley-SanJose/7474/
lispの実用的な情報が色々。
0012デフォルトの名無しさん
2005/05/12(木) 21:54:420013前すれ995
2005/05/12(木) 22:06:47何も書かないってのはまずかったな。
かえってストレス溜まるわ。
>1乙
0014デフォルトの名無しさん
2005/05/12(木) 22:55:58Common-Lisp.net: 多くのプロジェクトがホスティングされてる
ttp://common-lisp.net/
Bill Clementson's Blog: Lisp関連の話題が中心のBlog
ttp://home.comcast.net/~bc19191/blog/
Practical Common Lisp: S式の羅列で現実的な問題をどう解くのかそのギャップに悩まされてる人に
ttp://www.gigamonkeys.com/book/
0015デフォルトの名無しさん
2005/05/12(木) 23:02:53末尾再帰
(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) ) ) )
0016デフォルトの名無しさん
2005/05/12(木) 23:04:11末尾再帰最適化でなんとかならんのかw
0017デフォルトの名無しさん
2005/05/12(木) 23:07:540018デフォルトの名無しさん
2005/05/12(木) 23:09:100019デフォルトの名無しさん
2005/05/12(木) 23:40:230020デフォルトの名無しさん
2005/05/13(金) 09:23:04>1 乙
0021デフォルトの名無しさん
2005/05/13(金) 20:09:250022デフォルトの名無しさん
2005/05/14(土) 22:25:15/
μPlannner→Planner → Conniver→ Scheme → Common Lisp → ISO Lisp
\ / ▲このスレ
Plasma → → → → ABCL → ...
Simula67→ Smalltalk70 → … → Smalltalk80 → … → Java , C# (w
目的指向プログラミング 論理プログラミング 帰納論理プログラミング
積み木の世界 Actor理論 並列オブジェクト 分散オブジェクト
マルチエージェント セマンティックWeb
0023デフォルトの名無しさん
2005/05/15(日) 02:45:270024デフォルトの名無しさん
2005/05/15(日) 02:55:240025デフォルトの名無しさん
2005/05/15(日) 03:52:27大抵ネイティブ住人はとうの昔に消えて、
荒しが初期のスレの拡大再生産してるだけだって噂、本当なんだな。
ここまで荒廃してるとは知らなかった。もうこねぇよ。じゃぁな
0026デフォルトの名無しさん
2005/05/15(日) 03:55:180027デフォルトの名無しさん
2005/05/15(日) 04:07:190028デフォルトの名無しさん
2005/05/15(日) 04:14:590029デフォルトの名無しさん
2005/05/15(日) 10:32:03いろいろ消し過ぎ....gcのバグか?
0030デフォルトの名無しさん
2005/05/15(日) 11:57:14(define a 33)
(letrec ((c a)(a 10)) c)
003130
2005/05/15(日) 12:22:26letrecで、cとaの未初期化領域が生成され、cには未初期化のaの値がはいる。
そのため、gaucheだと#undefがでてくる。
letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。
0032デフォルトの名無しさん
2005/05/15(日) 12:29:16それは違う
0033デフォルトの名無しさん
2005/05/15(日) 15:51:500034デフォルトの名無しさん
2005/05/16(月) 09:37:17>letrecの本質は、ローカル変数定義時にエラーを出さずに本体を実行するという部分にあるのですね。
これは違うと思う。30の例はシンタックスエラーになるべきだと思うんだが。
> gaucheだと#undefがでてくる
ということは、もしかしてgaucheだと
(define a 33)
(letrec ((c a) (a 10))
(set! c a)
c)
--> 10
になるのかな?
そうなるとしたら、ちょっと不味いと思うんだが....どう?
0035デフォルトの名無しさん
2005/05/16(月) 09:41:09それで10になるのは全然問題なさそうに思うんだけど、どうまずいの?
003634
2005/05/16(月) 09:52:10gaucheの#undefがどういう意味で出力されているのか知らないから聞いたんだけど、もしこれがletrec全体の評価結果として出力しているとしたら、これはシンタックスエラーを無視して実行していると思えたからなんだ。
これは、cにaを束縛しようとした時点で未定義変数への参照によるエラーが発生するべきだと思うからなんだけど....
これは正しいプログラムなら実行結果は同じになるからいいんだけど、schemeの勉強に使うにはちょっと不味いんじゃないかと思ったんだ。
実際、30は勘違いしたみたいだし。
0037デフォルトの名無しさん
2005/05/16(月) 10:43:01R5RS 4.2.2 より
(letrec
0038デフォルトの名無しさん
2005/05/16(月) 10:46:37R5RS 4.2.2 より
(letrec
0039デフォルトの名無しさん
2005/05/16(月) 12:11:05エラーを出さなくてもR5RS違反ではないけどね。学習用として不親切ではあるな。
0040デフォルトの名無しさん
2005/05/16(月) 12:20:51頭が可笑しい人のレスか
0041デフォルトの名無しさん
2005/05/16(月) 12:32:23初期化中に局所変数をアクセスするとエラーになってしまいますので注意。
すべての初期化が終わってからでないとアクセス出来ません。
letrec は、再帰関数を定義するのに使います。
(letrec
((fact (lambda (x) (if (> x 0) (* (fact (- x 1))) 1))))
(fact 10))
0042デフォルトの名無しさん
2005/05/16(月) 13:15:00(letrec ((x a) (a 1)) ...) を
(let ((x 未定義) (a 未定義)) (set! x a) (set! a 1) ...) のように展開
する実装では、チェックが難しいのかな。
0043デフォルトの名無しさん
2005/05/16(月) 13:36:540044デフォルトの名無しさん
2005/05/16(月) 16:07:240045デフォルトの名無しさん
2005/05/16(月) 21:36:19>継続の使用法
>ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
これの学生さん卒業したのかな
2005 年 4 月以降どうなるか不明と書いてある
Bill Clementson's Blog も移動するみたいだね
ttp://home.comcast.net/~bc19191/blog/index.html
0046デフォルトの名無しさん
2005/05/16(月) 22:00:06特にLispって研究テーマにはなりにくいよなぁ。
最近は、ソフトウェア実装屋を対象とした学部/研究科が増えてるらしいけど。
俺の友人で、どうしても哲学をやりたくて、社会人入学した香具師がいる。
まだ数年前、塾だか予備校で飯代稼ぎながら、いろいろ模索してた。
そこまで真剣に学問の道を考えるなら、きっと誰か拾ってくれるでしょ。と祈りたい(w
0047デフォルトの名無しさん
2005/05/17(火) 02:55:59letlec じゃなくて internal define だけど。
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-26.html#%_thm_4.19
確か r6rs では internal define と関連して letlec* が追加されるとかいう話だけど、
未束縛の変数に左から順に set! していく、て実装だったら
そっちの方がやってる事に即している感じはするな。
0048デフォルトの名無しさん
2005/05/17(火) 13:10:190049デフォルトの名無しさん
2005/05/17(火) 13:17:030050デフォルトの名無しさん
2005/05/17(火) 22:52:50おれが欲しいと思ってるのは
・名前空間
(せめてパッケージ)はぜひとも導入して欲しい。
いつまでも大域letで囲むなんて馬鹿げてる。
・多値のファーストクラス化
インタプリタの延長みたいな実装がほとんどの現状で
多値を効率よく扱える手段がないとまともに使いたくない。
(let ((v (values 1 2 3)))
(if (values? v)
(value-ref v 2) ;; => 3
(error "excepted values"))
とか。
せめて上のvalues?のように関数の返す値が多値かどうか
呼び出し側で判らないと使い物にならないだろう。
・関数呼び出し側の名前つき引数。
VBのアレは便利だろ?
あと
・キーワード、定義済マクロ名の参照はエラーにする
くだらん論争の種を潰す。
とか。
0051デフォルトの名無しさん
2005/05/17(火) 23:18:590052デフォルトの名無しさん
2005/05/17(火) 23:39:22>remove multiple values
正気かよ。
って、まだ決まってないのか。
消すんじゃなくて発展させる方向に行かないかね。
副作用記述減らせる手段の1つなのに。
0053デフォルトの名無しさん
2005/05/17(火) 23:49:43> ・名前空間
> ・関数呼び出し側の名前つき引数。
Common Lisp で幸せ
0054デフォルトの名無しさん
2005/05/17(火) 23:51:410055デフォルトの名無しさん
2005/05/17(火) 23:52:370056デフォルトの名無しさん
2005/05/17(火) 23:58:100057デフォルトの名無しさん
2005/05/18(水) 00:03:09>副作用記述減らせる手段の1つなのに。
詳しく。
0058デフォルトの名無しさん
2005/05/18(水) 00:19:04(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)))
0059デフォルトの名無しさん
2005/05/18(水) 03:22:060060デフォルトの名無しさん
2005/05/18(水) 05:09:08パフォーマンスハックにすぎないんだから、ファーストクラス化しちゃったら
唯一のメリットが失われるじゃん。
>>50 みたいに扱いたいならリスト返すか、(receive v (values 1 2 3) ...)
で受ければいいだけだしさ。
0061デフォルトの名無しさん
2005/05/18(水) 23:48:390062デフォルトの名無しさん
2005/05/19(木) 00:00:160063デフォルトの名無しさん
2005/05/19(木) 00:14:040064デフォルトの名無しさん
2005/05/20(金) 01:34:32神学的論争 → SCHEME
実用性 → その他
0065デフォルトの名無しさん
2005/05/20(金) 02:10:310066デフォルトの名無しさん
2005/05/20(金) 03:57:470067デフォルトの名無しさん
2005/05/20(金) 22:23:21やっぱええわ
0068デフォルトの名無しさん
2005/05/20(金) 23:25:37やっぱ疲れるわ <湯浅>
0069デフォルトの名無しさん
2005/05/20(金) 23:31:35はぎゃー君も誘ったんだけど、彼は真面目だから付き合ってくれませんでした。
成果物は国際学会の発表ネタに使いまわしたんですけど、
サスマン教授は『素晴らしい。是非このロボを譲ってくれないか』って激賞されちゃいましたよ」
だいたいマジ
0070デフォルトの名無しさん
2005/05/21(土) 00:09:280071デフォルトの名無しさん
2005/05/21(土) 00:17:04こだわらずに楽しい事をやろうとする精神、
そして応募して採択されたもん勝ちだよんとアピールする姿に、
なんか楽しくなっちゃったけどなw
0072デフォルトの名無しさん
2005/05/21(土) 00:23:160073デフォルトの名無しさん
2005/05/21(土) 00:28:59だよねー
0074デフォルトの名無しさん
2005/05/21(土) 00:42:320075デフォルトの名無しさん
2005/05/21(土) 01:46:28ってなにがありんすか?
0076デフォルトの名無しさん
2005/05/21(土) 01:48:100077デフォルトの名無しさん
2005/05/21(土) 02:03:400078デフォルトの名無しさん
2005/05/21(土) 02:05:480079デフォルトの名無しさん
2005/05/21(土) 02:10:230080デフォルトの名無しさん
2005/05/21(土) 02:25:38>・名前空間
>(せめてパッケージ)はぜひとも導入して欲しい。
>いつまでも大域letで囲むなんて馬鹿げてる。
遅レスすまそ。let使ってパッケージもどきを作る方法があるの?
Schemeだとlet内でdefineしてもグローバルに反映されないから無理だと
思ってたんだけど(Common Lispならできる)。
モジュールじゃおおげさな時に使いたいので教えて。
0081デフォルトの名無しさん
2005/05/21(土) 07:56:06(define export:foo #f)
(let () (define foo ...) ... (set! export:foo foo))
(define foo export:foo)
0082デフォルトの名無しさん
2005/05/21(土) 09:15:39パッケージとは別に、CommonLisp風のset!(ローカルでunboundなら
グローバルにbindする)ができたら便利だとは思うが、Schemeじゃ多分無理。
0083デフォルトの名無しさん
2005/05/21(土) 09:29:09(define foo #f)
(define bar #f)
(let ()
(define hoge ...)
(set! foo (lambda (...)...))
(set! bar (lambda (...)...))
)
でも、最適化が効きにくくて>>81より遅くなりそうだな...(考え中)
>それならグローバルなハッシュテーブルに詰め込んでおく方が。
それってどんなやりかた?
0084デフォルトの名無しさん
2005/05/21(土) 11:15:020085デフォルトの名無しさん
2005/05/21(土) 11:20:08(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!の提供の方?
008784
2005/05/21(土) 11:57:220088デフォルトの名無しさん
2005/05/21(土) 11:58:310089デフォルトの名無しさん
2005/05/21(土) 12:11:230090デフォルトの名無しさん
2005/05/21(土) 12:14:26009183
2005/05/21(土) 15:17:48なるほどそういう使い方があったのか 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
となるわけか。
実装に依存したくない時はいいかも!
0092デフォルトの名無しさん
2005/05/21(土) 16:11:17まあ後付で作れるけどさ
0093デフォルトの名無しさん
2005/05/22(日) 03:54:250094ミミ
2005/05/22(日) 19:28:26メンバ変数の命名規則はどうしていますか?
Java や C++ だと m_var とか _var とか var_ とかで
命名すると思いますが、Scheme でアンダースコアは
あまり使われませんよね。
0095デフォルトの名無しさん
2005/05/22(日) 22:43:35そうでもない。アンダースコアも普通に使うよ。
0096デフォルトの名無しさん
2005/05/22(日) 22:55:17consでかえるようにならできたんですが。
0097デフォルトの名無しさん
2005/05/22(日) 22:56:180098デフォルトの名無しさん
2005/05/22(日) 22:58:57(map (lambda (elt) (* elt 2)) (list 3 4))
--> (6 8)
ってことかな?
0099デフォルトの名無しさん
2005/05/22(日) 22:59:39=> (6 8)
cut :: SRFI 26: Notation for Specializing Parameters without Currying
0100デフォルトの名無しさん
2005/05/22(日) 23:02:09LISPなど全く知らない俺が適当に書いてみました
0101デフォルトの名無しさん
2005/05/22(日) 23:16:22(syntax-rules ()
((_) ())
((_ dat ...) (list (* dat 2) ...))))
(m-list 3 4)
--> (6 8)
0102デフォルトの名無しさん
2005/05/22(日) 23:23:36(syntax-rules (list)
((_ n (list dat ...))
(list 'list (* dat n) ...))))
(rewrite-list 2 (list 3 4))
--> (list 6 8)
0103ミミ
2005/05/22(日) 23:28:13クラスのメンバ変数をアンダースコアで命名していますか?
0104デフォルトの名無しさん
2005/05/22(日) 23:36:350105デフォルトの名無しさん
2005/05/22(日) 23:46:45と、LISPなど全く知らない俺が適当に聞いてみる
0106ミミ
2005/05/22(日) 23:50:28どういうこと?
0107デフォルトの名無しさん
2005/05/23(月) 00:03:56単に単語の区切りの意味でハイフンは使うから区別したいんじゃね?
0108デフォルトの名無しさん
2005/05/23(月) 00:08:48わかるようなわからんような、実例プリーズ
0109デフォルトの名無しさん
2005/05/23(月) 03:27:32list と cons の意味がわかりません。
(cons 1 2) と (list 1 2) はどう違うんでしょうか。
両方とも car と cdr の結果は同じですよね?
0110デフォルトの名無しさん
2005/05/23(月) 03:36:08car は同じだけど、 cdr は違うよ。
(car (cons 1 2))
1
(cdr (cons 1 2))
2
(car (list 1 2))
1
(cdr (list 1 2))
(2)
0111デフォルトの名無しさん
2005/05/23(月) 04:07:51(cdr (list 1 2))
が (2) になるのはどういった理由かわからないのです…
0112デフォルトの名無しさん
2005/05/23(月) 04:18:46スレよごし、スミマセン。
0113デフォルトの名無しさん
2005/05/23(月) 08:34:12cons は「core」で、list は「library」みたいな区別をしてみるのもいいかも.
「library」は「core」から導くことができるんだね. 例えば
list は (lambda x x) と等価とかね ( もちろん lambda は「core」).
後になって、define-syntax とかでマクロを組むときに、きっと役に立つよ.
雑談スマソ
0114デフォルトの名無しさん
2005/05/23(月) 09:25:140115デフォルトの名無しさん
2005/05/23(月) 11:07:33lambda は「library」でいいじゃん
(define-syntax λ
(syntax-rules ()
((_ formals body1 body2 ...)
(let-syntax ((dummy (syntax-rules () ((dummy) #f))))
(define (proc . formals)
body1 body2 ...)
proc))))
01163歳児
2005/05/23(月) 11:13:330117デフォルトの名無しさん
2005/05/23(月) 17:04:35(cadr (list 1 2))が2になる、って言ったら解る?
(car (cdr (list 1 2)))と同じ。
あと、(list 1 2)は(cons 1 (list 2))と同じ
図で描くと解りやすいけど、図入りの本は持ってないの?
0118デフォルトの名無しさん
2005/05/23(月) 17:11:34(a b c) ってのは (a . (b . (c . ()))) の略だということを思い出そう。
01193歳児
2005/05/23(月) 17:15:230120デフォルトの名無しさん
2005/05/23(月) 17:28:09R5RS読めば?
0121デフォルトの名無しさん
2005/05/23(月) 18:09:23揶揄されてるんじゃないの?
0122Scheme 初心者
2005/05/23(月) 23:57:52define は lambda を使って定義できると思うのですが・・・
0123デフォルトの名無しさん
2005/05/24(火) 00:08:48つか (define (f args...) body...) って (define f (lambda (args...) body...) の省略形だから(ry
0124デフォルトの名無しさん
2005/05/24(火) 00:21:280125112
2005/05/24(火) 00:40:231変数関数の場合で、例えばフィボナッチ数列を
求める関数を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じゃないの?
マジで初心者だから教えてよママン!
0126デフォルトの名無しさん
2005/05/24(火) 01:53:11基本的には正しい。lambdaがあれば変数の束縛もできるからdefineの代用になる。
0127デフォルトの名無しさん
2005/05/24(火) 02:18:500128デフォルトの名無しさん
2005/05/24(火) 08:02:540129デフォルトの名無しさん
2005/05/24(火) 09:21:370130?デフォルトの名無しさん
2005/05/24(火) 11:52:15「Schemeの実装によっては、初期環境として、可能なあらゆる変数がなんらかの場所に束縛されており、そしてその場
所の大多数が未定義値を入れている、という環境を使う。このような実装ではトップ・レベル定義は代入と全く等価である。」
とあるんだけど....
これはそういう実装でもかまわないって意味なのかねぇ?
0131デフォルトの名無しさん
2005/05/24(火) 11:59:000132デフォルトの名無しさん
2005/05/24(火) 16:24:30はいずれもエラーになったな。>>130 からするとエラーにしなくてもかまわない
みたいだけど、そういった処理系ある?
0133デフォルトの名無しさん
2005/05/24(火) 19:45:26SCMもオプションでそうできた記憶があるけど未確認ですまぬ。
0134デフォルトの名無しさん
2005/05/24(火) 21:25:05(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))))
0135デフォルトの名無しさん
2005/05/28(土) 00:57:22http://community.computerhistory.org/scc/projects/LISP/
INTERLISP の絵が可愛い
0136デフォルトの名無しさん
2005/05/28(土) 04:29:05可愛いね。壁紙にしよう。
0137デフォルトの名無しさん
2005/05/28(土) 09:20:320138デフォルトの名無しさん
2005/05/28(土) 09:24:532chのやりすぎ(w
0139デフォルトの名無しさん
2005/05/28(土) 15:42:08壁紙には風太くんの写真だよ。
0140デフォルトの名無しさん
2005/05/30(月) 01:33:400141デフォルトの名無しさん
2005/05/30(月) 03:57:12悟れた?
0142デフォルトの名無しさん
2005/05/30(月) 09:14:270143デフォルトの名無しさん
2005/05/30(月) 22:20:33その調子でCMUCLのWindowsポーティングも頼むよ
0144デフォルトの名無しさん
2005/05/30(月) 22:32:25取り敢えず、ここら辺りから頑張ってみれ。
http://www.caddr.com/macho/archives/sbcl-devel/2004-7/3690.html
0145デフォルトの名無しさん
2005/05/30(月) 22:36:20CMUCLはKCLと違って、
RISC CPU (SPARC)専用にチューニングされてるから
Intelには移植しにくそう・・・つう風評を聞いたな。
0146デフォルトの名無しさん
2005/05/30(月) 22:39:08ttp://www.dridus.com/~nyef/sbcl-on-win32.png
一年もあれば何とかなるんじゃなかろうか。
0147デフォルトの名無しさん
2005/05/30(月) 22:44:37当時は 制約ベースのGUIツールキットとか、音楽関係で動かしたいアプリがあったような記憶があるけど。
0148デフォルトの名無しさん
2005/05/30(月) 22:47:00もしかして、シグウィン上で動かしているの?
折れ、cygwin嫌いなんだよな。 昔、ノーパソに入れたら恐ろしく遅かったから。。
多分、日本語も今市だし。
0149デフォルトの名無しさん
2005/05/30(月) 22:48:130150デフォルトの名無しさん
2005/05/30(月) 23:06:14今でも CMUCL のメインのメンテナは SPARC 使いだね。
メインのプラットフォームは x86 と言って間違いないと思うけど。
0151145
2005/05/30(月) 23:07:54なるほど。
SPARCベッタリのCMUCLとは別に、
移植性の高いCMUCLクローンを
Pythonベースのクロスコンパイラを種に
ブートストラップ方式で作る、つうプロジェクトっすか。
CMU CL:カーネギー氏とメロン氏が鉄鋼業で貯めたお金で作った大学のCommon Lisp
SB CL: 例の 鉄でガッポリ儲けた所が作ったのとよく似たCommon Lisp
っすか。なんじゃこのネーミングセンスはw
0152デフォルトの名無しさん
2005/05/30(月) 23:14:490153デフォルトの名無しさん
2005/05/30(月) 23:22:13議論と思ってたのは俺だけ、実はお相手は随分なプロヘッショナルな方だったのね。
某所でプロが揃い踏みしてるの見て、ちょっとビビってしまった(いやいや俺もプロだし・・・何のプロだろう?
0154Schemer
2005/05/30(月) 23:22:18自分の中では、
Lisp = 松下(統制されている)またはブリーフ(チソポが窮屈)
Scheme = ホンダ (自由にしてる)またはトランクス(チソポがフリー)
という感じがする。
0155153
2005/05/30(月) 23:22:520156デフォルトの名無しさん
2005/05/30(月) 23:31:50Scheme遣い・・・実物見た事ないっす。厳選された奇妙な形のブロックでお城を建てる哲学者?
0157デフォルトの名無しさん
2005/05/30(月) 23:32:28鉄はカーネギーで、メロンは銀行だよ。だからスチール(鉄)バンク(銀行)。
最近は SBCL の方が UNICODE やネイティブスレッドの採用など、CMUCL
よりも使い易くなってると思います。移植性も良いし。
SPARC は tagged arithmetic があるから Lisp コンパイラを作り易いという
話だけど、ユーザーベースから言ったらやっぱり x86 な訳で、開発者にも
Linux 使いが多い感じ。あと、意外にも Mac ユーザが多いっぽいね。
0158デフォルトの名無しさん
2005/05/30(月) 23:35:49すまそ、Steel Bank Common Lisp Developper MLの一通目を斜め読みするのがやっとで、
バンクをなんとなく無視してますた。
> SPARCは tagged arithmetic
そうそうw
SUN のSPARC関連論文漁ってると、SPARCは最初からLispのサポートを視野に入れていたとか見た。
・・・Java CPUは一体どうなったんだろう(w
0159デフォルトの名無しさん
2005/05/30(月) 23:37:05Schemer: "Buddha is small, clean, and serious."
Lispnik: "Buddha is big, has hairy armpits, and laughs."
Nikodemus 氏のシグニチャだけど、名言だね。
0160デフォルトの名無しさん
2005/05/30(月) 23:41:22ググると、Lucid Common Lisp の為に用意されたって記述があるけど
真偽の程はどうでしょう。
Lucid の社長さんって Sun に居た気がしたけど、今どうしてるのかな。
0161デフォルトの名無しさん
2005/05/30(月) 23:53:24綺麗でかわいいブッダと、
腋毛ボウボウの豪傑ブッダかよ!
科学では、少ない原則でより多くの事柄を説明できる理論を採用する。
すると、Schemeが示そうとしているScienceは一体なんなんだろう。。。
>>160
Lucid 社長・・・わかんない。名前は聞いた事あるけど。
最近、Lisperの臭いをくんくん嗅ぎ分けながら業界のたくってるんだけど、
Frantz社長の名前くらいしか聞かなかった。あとは元Symbolicsで今は紺猿の人とか。
0162デフォルトの名無しさん
2005/05/31(火) 00:06:150163デフォルトの名無しさん
2005/05/31(火) 00:42:03以前評価したときは Allegro より高速だった(on x86)けど、日本ではマイナーかな。
0164デフォルトの名無しさん
2005/05/31(火) 07:51:230165デフォルトの名無しさん
2005/05/31(火) 07:57:43Richard Gabriel, Sun Labs (Menlo Park, CA)
って書いてある。現在も、Sunにいるらしい。
http://www.international-lisp-conference.org/speakers.html
0166デフォルトの名無しさん
2005/05/31(火) 13:01:3232bit wordの下位2ビットをタグとして扱うことができる。
0167flatline@Vim%Chalice ◆r6EONKKhcc
2005/05/31(火) 18:24:40ttp://user.ecc.u-tokyo.ac.jp/~t50473/
0168flatline@Vim%Chalice ◆r6EONKKhcc
2005/05/31(火) 18:24:55ttp://user.ecc.u-tokyo.ac.jp/~t50473/
0169デフォルトの名無しさん
2005/05/31(火) 18:38:510170デフォルトの名無しさん
2005/05/31(火) 20:01:180171デフォルトの名無しさん
2005/05/31(火) 21:56:57上のページの 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
...やっぱり大変だ,これ.もっといい書き方はないものでしょうか.
0172デフォルトの名無しさん
2005/05/31(火) 22:52:36(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
0173デフォルトの名無しさん
2005/05/31(火) 23:07:36側にセットした方が,かえって自然ですね.
しかし,funcall が林立するのは,どうしようもないのかなあ.
0174デフォルトの名無しさん
2005/05/31(火) 23:13:580175デフォルトの名無しさん
2005/06/01(水) 00:34:040176デフォルトの名無しさん
2005/06/01(水) 03:35:54さしずめ Scheme 屋は三論の学僧で Lisp 屋は禅坊主ってところっすか。
仲が悪くてもしかたないな。
>>173
確かに関数をぐるぐる渡していくとなると面倒ですよね。
CPS とかでちょっと書いてみる位でも結構うんざりしたり。
#`(f ...) -> (funcall f ...) とかなリーダマクロでも書いてみるとか。あんま変わらないか。
0177デフォルトの名無しさん
2005/06/01(水) 11:10:12Schemer と Common Lisper は仲が悪いみたいだけど,どちらも Lisp 文化の
主要な担い手なのだから.Scheme の方が短いコードでその優秀性を示しやす
いのか,こういう場では Scheme のよさが目立ちがちな気がする.だけど,
Common Lisp の優秀性もぜひお教えいただきたいものです.
自分の知っている例だと,かの「グリーンスパンの第10法則」のグリーンスパ
ン氏の blog から
http://philip.greenspun.com/bboard/q-and-a-fetch-msg?msg_id=0006XQ
「Common Lisp はロバストで効率的.Scheme ではハイパワーマシンでもこな
せなかった処理を,Common Lisp だと非力なマシンでも成し遂げることができ
た」
こんな感じで,自分の知っている言語の良さを出し合っていけたらなあ,と思
うのです.Scheme や Common Lisp や,スレ違いだけど Emacs Lisp までも.
(Y-Combinator を Emacs Lisp に移植しようとして,動かない原因がしばら
くわからなかったのは秘密.気が付いてみたら当たり前.動的スコープだから
クロージャにならないのだもの...絶対に無理)
0178デフォルトの名無しさん
2005/06/01(水) 12:52:55んなものがあるでしょうか?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
0179デフォルトの名無しさん
2005/06/01(水) 13:04:24Allegro CLは大丈夫だったよ。
0180デフォルトの名無しさん
2005/06/01(水) 13:06:37> ところで,Common Lisp で,末尾再帰の最適化をやってくれる処理系って,ど
> んなものがあるでしょうか?
インタプリタではほとんどの処理系がやってない。
コンパイラではほとんどの処理系がやっている。
0181デフォルトの名無しさん
2005/06/01(水) 13:10:37xyzzyのことはわからないけど、一般的にソースの頭に
(optimize speed)
と書いておくと末尾再帰をループ扱いしてくれるとか。
速度も上がるだろうしメモリも定量で済むはず。
0182デフォルトの名無しさん
2005/06/01(水) 13:58:05CLispで試してみた。>>180氏の言うとおりだった。
[1]> (defun tail-rec (x y)
(if (<= x 0)
y
(tail-rec (- x 1) (+ y 1))))
TAIL-REC
[2]> (tail-rec 40000 0)
*** - Program stack overflow. RESET
[3]> (compile 'tail-rec)
TAIL-REC ;
NIL ;
NIL
[4]> (tail-rec 40000 0)
40000
[5]> (tail-rec 10000000 0)
10000000
0183デフォルトの名無しさん
2005/06/01(水) 14:52:06ディスアセンブルしてみませう。
0184178
2005/06/01(水) 17:11:03Scheme だと
・まずは普通に再帰で書く
・うまく動くようになったら,末尾再帰にして最適化
という書き方をすることが多いですが,
Common Lisp だと加えて
・コンパイル
という一連のステップで行けばよいということですね.
さて,問題は xyzzy です.(optimize speed)も効かなかったし,残念ながら
バイトコンパイルしても最適化されませんでした.どのようにコーディングし
たら良いものか.やっぱり loop しかないのかなあ...と,そろそろスレ違い
ですが.
0185デフォルトの名無しさん
2005/06/01(水) 22:49:23Common Lisp では末尾呼び出しの最適化が保証されてないんだから
特定の処理系に依存させたくないのなら
> Common Lisp だと加えて
> ・コンパイル
ではなく、繰り返しに展開しないと。
0186デフォルトの名無しさん
2005/06/01(水) 23:22:59clisp + emacs + slimeでWin上でも結構快適と思うけど。emacsもxyzzyも
メモリ消費量は変わらない。 ディスク消費量はemacsの方が多いが。。
なぜかWin上では、clisp 2.33.2ではslimeが動かなかったので、2.33.1にしたら
ちゃんと動いた。
0187デフォルトの名無しさん
2005/06/01(水) 23:30:180188デフォルトの名無しさん
2005/06/02(木) 00:03:46Y-Combinatorにはならないのだろうが、
lambdaだけで再帰を書くのなら動的スコープのほうが楽じゃない?
(funcall
((lambda (f) (lambda (x) (funcall f x)))
(lambda (x) (if (= x 0) 1 (* x (funcall f (- x 1))))))
5)
120
ところで自由変数使わずに束縛変数だけ使うのなら
動的スコープも静的スコープも一緒じゃないの?
ちょっとEmacs LispでY-Combinatorやってみるよ。
0189デフォルトの名無しさん
2005/06/02(木) 01:00:57読みやすい様な、読みにくい様な...
しばらく真似してみよ.
0190デフォルトの名無しさん
2005/06/02(木) 04:31:42トランポリンでも仕込んでみるってのはどう?
0191デフォルトの名無しさん
2005/06/02(木) 04:39:47俺んとこではなるよ。そっちでは何が返ってるんだ?
0192デフォルトの名無しさん
2005/06/02(木) 09:12:17今は「トランポリン」がイディオムの名前だってこと知らない人多いかもよ?
0193デフォルトの名無しさん
2005/06/02(木) 09:23:34生成される小さなコードのことしか思い出さない。イディオムとしての
トランポリンてどういうの?
0194デフォルトの名無しさん
2005/06/02(木) 10:07:13ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
を参照してちょ
0195178
2005/06/02(木) 10:46:43> ではなく、繰り返しに展開しないと。
うう,再帰を繰り返しに展開するのって,面倒くさいし,バグの元になりませ
んか?やっぱり,汎用性を目指すなら,初めから繰り返しで書いた方がいいの
かなあ.しかし,再帰のほうがきれいで扱いやすいし... Common Lisper の皆
さんは,普段どのようにお書きなんでしょうか?
>>188
> ところで自由変数使わずに束縛変数だけ使うのなら
> 動的スコープも静的スコープも一緒じゃないの?
それはないです.例えば >>172 の fact0 という関数は lambda 式を返すけど,
その式の最後の行の f は,fact0 の外に出たら,動的スコープだと何にも束
縛されなくなっちゃうでしょう?(と言うか,実行するとそのエラーがでる)
しかし,動的スコープの方が歴史的には古いのだから,もしかしたら動的スコー
プのための Y-Combinator が先に存在していたのかもしれません.私が知らな
いだけで.
>>192 今は「トランポリン」がイディオムの名前だってこと知らない人多いか
>もよ?
それは私です.Google検索したら見つかったのが「何でも継続」だったので赤
面.身になってないなあ.
0196178
2005/06/02(木) 11:08:23> clisp + emacs + slimeでWin上でも結構快適と思うけど。
じつは,いろいろ思うところがありまして,将来的に個人的な環境をなるべく
Linux一本に移行したいと思っているのです.ただ,slime は全然知りません
でした.大変便利なものをお教えいただき,ありがとうございました.
http://www.geocities.co.jp/SiliconValley-SanJose/7474/LispDevelopEnvironment.html#slime
0197デフォルトの名無しさん
2005/06/02(木) 12:31:340198デフォルトの名無しさん
2005/06/02(木) 14:02:50Windows用のemacs風エディタとしてはかなり素敵。
0199デフォルトの名無しさん
2005/06/02(木) 14:12:00豊富なライブラリがあるから離れられず、ダイナミックスコープ氏ねと
思いながら Emacs Lisp パッケージのメンテナンスをして、それが...
のスパイラル。
0200デフォルトの名無しさん
2005/06/02(木) 14:31:060201デフォルトの名無しさん
2005/06/02(木) 14:38:09ttp://xyzzy.s53.xrea.com/wiki/
0202デフォルトの名無しさん
2005/06/02(木) 18:22:120203デフォルトの名無しさん
2005/06/02(木) 18:45:5310年前のスペックだな。
0204デフォルトの名無しさん
2005/06/02(木) 20:16:41普通に使えてる。確か Pentium の メモリ32メガ。
0205187
2005/06/02(木) 23:28:180.5 が返ります。
ちなみに WINXP HOME SP2 で gcc 3.3.3 。mingw版も駄目 Athron 650
(print (- (/ 1 2))) => 0.5
(print (- (- 1 2)))=> -1
(print (- (+ 1 2)))=> 3
(print (- (* 1 2)))=> 2
(print (- (expt 2 2)))=> -4
(print (- (- 1)))=> -1
(print (- (- (- 1))))=> -1
(print (- (+ (- 1))))=> -1
(print (- (and 1 1)))=> -1
(print (- (or 1 1)))=> -1
(print (/ (/ 1 2)))=> 2.0
(print (/ (- 1 2)))=> -1.0
(print (/ (+ 1 2)))=> 0.3333333333333333
(print (/ (* 1 2)))=> 0.5
(print (/ (- 1)))=> -1.0
(print (/ (- (- 1))))=> -1.0
(print (/ (+ (- 1))))=> -1.0
0206デフォルトの名無しさん
2005/06/02(木) 23:55:40ここに書く意図が分からない
0207デフォルトの名無しさん
2005/06/03(金) 00:34:010208デフォルトの名無しさん
2005/06/03(金) 00:51:460209デフォルトの名無しさん
2005/06/03(金) 13:02:21私も便利に使わせていただいてます.だけど,Common Lisp インタプリタとし
ては,ちょっと遅いのではないでしょうか?
;;;竹内関数 aka たらいまわしべんち (or 'Common 'Emacs) Lisp
(defun tarai (x y z)
(if (<= x y)
y
(tarai (tarai (1- x) y z)
(tarai (1- y) z x)
(tarai (1- z) x y))))
(tarai 12 6 0) => 12
これの実行に65秒かかりました.バイトコンパイルしても30秒.
(Celeron 2.6GHz, 756MB RAM)
Petite Chez Scheme なら1秒前後で終わるのですが.
0210デフォルトの名無しさん
2005/06/03(金) 13:15:29久しぶりに回してみた。((tarai 12 6 0) @ Athlon FX-55)
clisp インタプリタ 12秒
clisp コンパイラ 1.7秒
gcl インタプリタ 12秒
gcl コンパイラ 1.4秒
プチチーズ優秀だね。
0211209
2005/06/03(金) 13:46:23Scheme が速すぎるから,びっくりするような相対値になったのですね.
Gauche とかだとどうなんだろう.
Emacs Lisp でも試してみようと思ったけれど,エラーになって動かない.
(error "Lisp nesting exceeds max-lisp-eval-depth")
Emacs はなかなかよく分かりません.
あと,野暮かも知れませんが,一応,
Chez Scheme => しぇすきーむ
Petite Chez Scheme => ぷてぃとしぇすきーむ
Paul Graham => ぽーるぐれあむ
が原音に近いのではないかと.
0212デフォルトの名無しさん
2005/06/03(金) 14:22:05Emacs 21.3: インタプリタ 10.4秒、コンパイラ 4.7秒
Gauche 0.8.4: 3.3秒
SBCL 0.9.1: 0.4秒
(tarai 12 6 0) @ Pentium 4 2.4GHz
> (error "Lisp nesting exceeds max-lisp-eval-depth")
再帰の深さが変数 max-lisp-eval-depth を超えたってことなんで増やせばいい
0213210
2005/06/03(金) 15:28:201.4秒→1.2秒になったがその他は変化無し。思ったほど効かないな。
0214デフォルトの名無しさん
2005/06/03(金) 16:18:46cmuclの結果も知りたい。
0215デフォルトの名無しさん
2005/06/03(金) 16:38:47インタプリタだと66秒、コンパイルすると1秒以下になった。
0216212
2005/06/03(金) 17:03:28CMUCL 19a:
インタプリタ: 92秒
コンパイラ: 0.55秒
コンパイラ (declare (type fixnum x y z)): 0.23秒
コンパイラ (declare (optimize speed)): 0.53秒
コンパイラ (declare (optimize speed) (type fixnum x y z)): 0.23秒
SBCL 0.9.1:
コンパイラ: 0.42秒
コンパイラ (declare (type fixnum x y z)): 0.31秒
コンパイラ (declare (optimize speed)): 0.38秒
コンパイラ (declare (optimize speed) (type fixnum x y z)): 0.21秒
0217209
2005/06/03(金) 20:23:37になりました.
ところで,おまけとして,ラムダ式による遅延評価版を書いてみました.
(参考)http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Scheme%3a%a4%bf%a4%e9%a4%a4%a4%de%a4%ef%a4%b7%a4%d9%a4%f3%a4%c1
;;;竹内関数 aka たらいまわしべんち (or 'Common 'Emacs) Lisp
;;;遅延評価版
(defun tarai (x y z)
(if (<= (funcall x) (funcall y))
(funcall y)
(tarai (lambda () (tarai (lambda () (- (funcall x) 1)) y z))
(lambda () (tarai (lambda () (- (funcall y) 1)) z x))
(lambda () (tarai (lambda () (- (funcall z) 1)) x y)))))
こちらだと,引数が12 だとあっという間に終わってしまいますので,数字を
変えました.
(tarai (lambda () 192) (lambda () 96) (lambda () 0)) => 192
先ほどの条件で,xyzzy だと13秒程度でした.いささか極端な例とは言え,遅
延評価のありがたみを痛感します.
0218デフォルトの名無しさん
2005/06/04(土) 08:23:03(let ((xx (funcall x)) (yy (funcall y)))
(if (<= xx yy)
yy
(let ((x (lambda () xx)) (y (lambda () yy)))
(tarai (lambda () (tarai (lambda () (- xx 1)) y z))
(lambda () (tarai (lambda () (- yy 1)) z x))
(lambda () (tarai (lambda () (- (funcall z) 1)) x y)))))))
0219デフォルトの名無しさん
2005/06/04(土) 13:02:22と、LISPをまるで知らない俺が適当に言ってみる
0220デフォルトの名無しさん
2005/06/04(土) 13:31:58(defun tarai (x y z)
(labels ((tarai-1 (x y fz)
(if (<= x y)
y
(let ((z (funcall fz)))
(tarai-1 (tarai-1 (1- x) y (lambda () z))
(tarai-1 (1- y) z (lambda () x))
(lambda () (tarai-1 (1- z) x (lambda () y))))))))
(tarai-1 x y (lambda () z))))
0221デフォルトの名無しさん
2005/06/04(土) 22:14:55そんじゃ209が早くなったと言っているのは勘違いなの?
0222デフォルトの名無しさん
2005/06/04(土) 22:23:48>>217 の参考リンクの一番したみてみそ。Zだけの遅延評価のページが紹介されている罠
0223デフォルトの名無しさん
2005/06/05(日) 17:29:43DrSchemeって何て読むの?
ドクタースキームでいいの?
0224デフォルトの名無しさん
2005/06/05(日) 17:34:220225デフォルトの名無しさん
2005/06/05(日) 18:09:09採用。
0226デフォルトの名無しさん
2005/06/05(日) 23:21:230227デフォルトの名無しさん
2005/06/05(日) 23:45:14これどういう意味か分かりますか?
どなたか解説をお願いします。
0228デフォルトの名無しさん
2005/06/06(月) 01:08:09説明しろよな。まあ内容から何の話か見当つくけどさ。
0229?デフォルトの名無しさん
2005/06/06(月) 11:00:030230デフォルトの名無しさん
2005/06/06(月) 17:33:33Cだと78msec(Pentium4,2.25GHz)でした。
やはりLISPは遅いようですね。
int tarai(int x,int y,int z)
{
if(x<=y) return y;
else return tarai(tarai(x-1,y,z),tarai(y-1,z,x),tarai(z-1,x,y));
}
0231デフォルトの名無しさん
2005/06/06(月) 19:53:32空気をどうしても読めなかったら、
悲惨な喪毎の頭のベンチマークでも並べとけと。
0232デフォルトの名無しさん
2005/06/06(月) 20:47:44>>220 なら sbcl on Pentium 4 2.4GHz で 7μsecだよ。
がんばって遅延評価実装してみ。
0234デフォルトの名無しさん
2005/06/06(月) 21:29:03R5RS関連だろうと思ってたら、やっぱコレか。
PLT Foreign Interface Manual
PLT <[email protected]>
299.100Released March 2005
http://download.plt-scheme.org/doc/299.100/pdf/foreign.pdf
2. Foreign Interface
This is a description of the foreign interface. The interface has some parts implemented in C (plt/src/foreign/foreign.c)
which is available as a built-in #%foreign module. This module is not intended for general use as is, and further
documentation can be found in the source. The relevant functionality is provided via the foreign module in MzLib
(foreign.ss).
2.2 Simple Types
2.2.4 Type Constructors
Since types are first-class values, there are several type constructors that build type objects. These are just the simple
ones, more constructors are described below. Note that they are listed as procedures, but implemented as syntax, so it
is possible to use a name where the syntactical context implies one (they can also be used as values, but error messages
will not have a meaningful name in this case).
0235デフォルトの名無しさん
2005/06/06(月) 21:49:17お願いだから次からはもうちょっと質問の仕方も上達してくれよ
0236デフォルトの名無しさん
2005/06/06(月) 23:21:44int x, y;
const tarai* tp;
public:
tarai(int y) : x(0), y(y), tp(0) {}
tarai(int x, int y, const tarai& t) : x(x), y(y), tp(&t) {}
int operator()() const {
if (x <= y) return y;
int z = (*tp)();
return tarai(tarai(x-1,y,*tp)(),tarai(y-1,z,tarai(x))(),tarai(z-1,x,y))();
}
};
LISPをまるで知らない俺が五分で作ったC++遅延評価版
tarai(192, 96, tarai(0))()で、0.01秒くらい?
0237デフォルトの名無しさん
2005/06/06(月) 23:53:03class tarai {
int x, y;
const tarai* tp;
public:
tarai(int y) : x(0), y(y), tp(0) {}
tarai(int x, int y, const tarai& t) : x(x), y(y), tp(&t) {}
operator int() const {
if (x <= y) return y;
int z = *tp;
return tarai(tarai(x-1,y,*tp),tarai(y-1,z,x),tarai(z-1,x,y));
}
};
0238209
2005/06/07(火) 08:18:39変興味深く読ませていただきました.正直,>>236-237 はすばらしいと思いま
す.
>>232 のレスを見て,自分もC で遅延評価を実装しようと考えて,かなり汚い
コードしか思いつかず,ああクロージャ(関数閉包)って本当に便利なんだな,
と思った矢先に>>236-237 が書き込まれました.自分は C++ はよく知らない
のですが,とてもすっきり書けているように見えます.
日本の Lisp の巨人というと,竹内郁雄先生(たらいまわしべんちの生みの親)
と萩谷昌己先生がまず挙げられると思います.竹内先生は「Lispは確かに遅い
が,言語としての生産性は格段に高い.トータルのコストはLispの方がずっと
小さい」という考えであり,萩谷先生は「Lisp はあくまでプロトタイプのた
めのもので,本物のプログラムは C で書かなければならない」という考えだ
と聞いております.
Lispというのはとにかく書きやすい言語ですから,解くべき問題の複雑さによっ
て,どちらが正しいかは変わるのだと思うのですが,竹内関数(たらいまわし
べんち)に関しては,現時点では萩谷教授が正しいということになるようです.
この逆説めいた結末に,私は興奮すら覚えました.
0239デフォルトの名無しさん
2005/06/07(火) 08:20:50ttp://bc.tech.coop/blog/
何時もこっちを見てるけど
http://planet.lisp.org/
0240209
2005/06/07(火) 08:59:31「10年前ならLispは大きなアドバンテージを持っていたけれど、現在は他の言
語が追い付いて来てLispのメリットは小さくなっている。」Peter Norvig
今回のC++のエレガント(と私には見える)な回答を見て,確かにいくつかの
洗練は,Lispの占有物ではなくなったのだ,と感じた方もおられるのではない
でしょうか.
しかし,聞きかじりで書くのですが,C++にはテンプレートを多用した新しい
スタイルが登場しつつあるそうです.それは Lisp や関数型言語から大きな影
響を受けているそうです.つまり,Lisp は2005年の現時点でも,豊かなアイ
ディアの源泉でありつづけているのではないでしょうか.もちろん(不幸にも)
Lispの進歩が停滞して,その差が縮まりつつあるのかも知れませんが.
ところで,Lisp 側は最速のものがまだ出ていません.Allegro Common Lisp
(ACL) と Chez Scheme コンパイラの,二つの商用ソフトです.これらなら,
C++とも結構いい勝負をするかもしれません.
それにしても,最初にたらいまわしべんちを書き込んだ時にはまったく予想し
なかった展開になりました.大変勉強になりました.ありがとうございました.
0241209
2005/06/07(火) 09:01:28竹内郁雄『初めての人のためのLISP』
http://www.amazon.co.jp/exec/obidos/ASIN/4781904548
萩谷昌巳「たかが論理 されど論理」
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/7bits/saredo
Lisp:読み物
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Lisp%3a%c6%c9%a4%df%ca\
%aa
Modern C++ Design
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353
The Great Computer Language Shootout
http://web.archive.org/web/20030602185735/www.bagley.org/~doug/shootout/craps.s\
html
0242209
2005/06/07(火) 09:09:16竹内郁雄『初めての人のためのLISP』
http://www.amazon.co.jp/exec/obidos/ASIN/4781904548
萩谷昌巳「たかが論理 されど論理」
http://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/7bits/saredo
Lisp:読み物
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Lisp%3a%c6%c9%a4%df%ca%aa
Modern C++ Design
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353
The Great Computer Language Shootout
http://web.archive.org/web/20030602185735/www.bagley.org/~doug/shootout/craps.shtml
0243デフォルトの名無しさん
2005/06/07(火) 10:39:400244デフォルトの名無しさん
2005/06/07(火) 11:21:50boost の lambda なんかを見ると、一見 Lisp チックなんだけど、正確な挙動を
理解するのはなかなか大変。C++ って複雑な言語だなと思う。
そのくせ、制限が多いというのには同意。
Common Lisp なんかも「大きな言語」と言われるけど、C++ に比べれば子供
みたいなもんだなと思うよ。(もちろん良い意味でね)
0245デフォルトの名無しさん
2005/06/07(火) 11:58:44過剰なお褒め、恐縮です。というか、気恥ずかしいです
でも、自分でも思った以上にエレガントだなと、思っていたり
ちなみに、Cでもやってみました
CでやるなんてlazyというよりCrazyかとおもったけど
書いてみたら、非常に簡単でした
struct tarai { int x, y; const struct tarai* tp; };
int tarai_sub(int x, int y, const struct tarai* tp) {
if (x > y) {
int z = tarai_sub(tp->x, tp->y, tp->tp);
struct tarai t[3] = { { z, z, 0 }, { x, x, 0 }, { y, y, 0 } };
struct tarai tz = { z-1, x, t+2 };
return tarai_sub(tarai_sub(x-1,y,t), tarai_sub(y-1,z,t+1), &tz);
}
return y;
}
int tarai(int x, int y, int z) {
struct tarai tz = { z, z, 0 };
return tarai_sub(x, y, &tz);
}
C++よりも、速いっぽい
0246デフォルトの名無しさん
2005/06/07(火) 11:59:15int tarai(int x, int y, int z) {
class Tarai {
int x, y;
const Tarai* tp;
public:
Tarai(int y) : x(y), y(y), tp(0) {}
Tarai(int x, int y, const Tarai& t) : x(x), y(y), tp(&t) {}
operator int() const {
if (x <= y) return y;
int z = *tp;
return Tarai(Tarai(x-1,y,z), Tarai(y-1,z,x), Tarai(z-1,x,y));
}
};
return Tarai(x,y,z);
}
このコードなら、人に見せても恥ずかしくないかな
0247デフォルトの名無しさん
2005/06/07(火) 12:13:50struct tarai に tp 入れる必要なくない?
typedef struct { int x, y, z; } tarai_t;
int tarai(int, int, int);
int tarai_1(int x, int y, tarai_t *tp) {
if (x <= y) return y;
int z = tarai(tp->x, tp->y, tp->z);
return tarai_1(tarai(x - 1, y, z), tarai(y - 1, z, x),
&(tarai_t){ z - 1, x, y });
}
int tarai(int x, int y, int z) {
if (x <= y) return y;
return tarai_1(tarai(x - 1, y, z), tarai(y - 1, z, x),
&(tarai_t){ z - 1, x, y });
}
0248デフォルトの名無しさん
2005/06/07(火) 15:18:08スレ違いだと思う。もうちょっとLisp絡みの話へ軌道修正してほしい。
0249デフォルトの名無しさん
2005/06/07(火) 17:54:02245を書いて、247を読んで、ちょっと考えてやっと気づいたんですけど
この問題の本質って、実はめちゃめちゃ簡単ですね
LISPのコードで書かれてる段階では全く気づかなかったんですけど
Cで書いて、読んでみたら、やっと気づきました
必要になるかどうか分からない関数値は、
事前に計算しないで引数のまま渡す
タダそれだけですね
int tarai(int x, int y, int z);
int tarai_sub(int x, int y, int z_x, int z_y, int z_z) {
if (x > y) {
int z = tarai(z_x, z_y, z_z);
return tarai_sub(tarai(x-1,y,z), tarai(y-1,z,x), z-1, x, y);
}
return y;
}
int tarai(int x, int y, int z) { return tarai_sub(x, y, z, z, 0); }
このコードなら、Cに疎いLISPerの方々でも余裕で理解できるでしょう
なんかこう、高度なというか表現力や抽象化能力の高い道具が
問題の本質を逆に隠してしまっていたような、そんな気がします
0250デフォルトの名無しさん
2005/06/07(火) 18:03:570251デフォルトの名無しさん
2005/06/07(火) 18:07:32そんな事言い出すとは、かなり逝かれてるな。
なんつうか、人の話聞いた後「ところで話題変わるんだけど・・・」とか言って同じ話しだすドキュソを思い出した。
0252デフォルトの名無しさん
2005/06/07(火) 18:12:14こんなの(理系全般板の悪名高い荒らし)にURL覚えられちゃった
はぎゃ先生も災難だな
0253デフォルトの名無しさん
2005/06/07(火) 18:27:00> なんかこう、高度なというか表現力や抽象化能力の高い道具が
> 問題の本質を逆に隠してしまっていたような、そんな気がします
そんなことないよ。>>220 の labels を分解して
(defun tarai (x y z)
(labels ((tarai-1 (x y fz) (if (<= x y) y
(tarai-2 x y (funcall fz))))
(tarai-2 (x y z) (if (<= x y) y
(tarai-1 (tarai-2 (1- x) y z)
(tarai-2 (1- y) z x)
(lambda () (tarai-2 (1- z) x y))))))
(tarai-2 x y z)))
tarai-1 をインライン展開して
(defun tarai (x y z)
(labels ((tarai-2 (x y z)
(if (<= x y) y
(let ((xx (tarai-2 (1- x) y z)) (yy (tarai-2 (1- y) z x)))
(if (<= xx yy) yy
(tarai-2 xx yy (funcall (lambda ()
(tarai-2 (1- z) x y)))))))))
(tarai-2 x y z)))
0254デフォルトの名無しさん
2005/06/07(火) 18:27:54(defun tarai (x y z)
(if (<= x y) y
(let ((xx (tarai (1- x) y z)) (yy (tarai (1- y) z x)))
(if (<= xx yy) yy (tarai xx yy (tarai (1- z) x y))))))
それを C にすると
int tarai(int x, int y, int z) {
for (;;) {
if (x <= y) return y;
int xx = tarai(x - 1, y, z), yy = tarai(y - 1, z, x);
if (xx <= yy) return yy;
z = tarai(z - 1, x, y); x = xx; y = yy;
}
}
こうなるんだけど、>>249 よりシンプルだし速度も倍。
0255デフォルトの名無しさん
2005/06/07(火) 18:31:210256209
2005/06/07(火) 21:45:06http://www.komaba.utmc.or.jp/~flatline/wiliki.cgi?%bb%a8%c3%cc&l=jp
このスレでは,ちょっとこれ以上の話は皆さんにご迷惑のようです.
しかし,できるならもう少し続けたい気持ちが私にはあります.
いっしょにこちらに移動していただけませんか?>> C++ の人
0257209
2005/06/07(火) 21:48:32http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?WiLiKi%3a%a5%ea%a5%d5%a5%a1%a5%ec%a5%f3%a5%b9%a5%de%a5%cb%a5%e5%a5%a2%a5%eb
ということで,大変ご迷惑をおかけしました.申し訳ありません.>>ALL
0258デフォルトの名無しさん
2005/06/07(火) 22:38:250259デフォルトの名無しさん
2005/06/07(火) 22:57:12どうもすみません。勉強になりました
勉強ついでに、249のCコードをそのままLISPにしてみました
(defun tarai (x y z)
(labels ((tarai-1 (x y zx zy zz) (if (<= x y) y
(let ((z (tarai zx zy zz))) (tarai-1 tarai((1- x) y z) tarai((1- y) z x) (1- z) x y)))))
(tarai-1 x y z z 0)))
そこで、let式を関数呼び出しに変えて
(defun tarai (x y z)
(labels ((tarai-1 (x y zx zy zz) (if (<= x y) y
(tarai-2 (x y (tarai zx zy zz)))))
(tarai-2 (x y z) (tarai-1 tarai((1- x) y z) tarai((1- y) z x) (1- z) x y)))
(tarai-1 x y z z 0)))
さらに、tarai-1呼び出しをlet式に変えてみました
(defun tarai (x y z)
(labels ((tarai-2 (x y z)
(let ((xx (tarai((1- x) y z)) (yy (tarai((1- y) z x)))
(if (<= xx yy) yy (tarai-2 (xx yy (tarai (1- z) x y)))))))))
(if (<= x y) y (tarai-2 x y z))))
0260デフォルトの名無しさん
2005/06/07(火) 22:57:25int tarai_sub(int x, int y, int z);
int tarai(int x, int y, int z) {
if (x <= y) return y;
return tarai_sub(x, y, z);
}
int tarai_sub(int x, int y, int z) {
for (;;) {
int xx = tarai(x-1,y,z), yy = tarai(y-1,z,x);
if (xx <= yy) return yy;
z = tarai(z-1,x,y);
y = yy;
x = xx;
}
}
最初のifがループの外に出せて、なんか倍くらい速くなります。
それともこれ、何か間違ってますか?
0261デフォルトの名無しさん
2005/06/07(火) 23:33:28SchemeはDrSchemeがサポートしているけど。。
0262デフォルトの名無しさん
2005/06/08(水) 00:16:13つ http://www.sbcl.org/manual/Threading.html
0263デフォルトの名無しさん
2005/06/08(水) 03:59:01おお、待ち焦がれてたよ BIll さん。
blog 関連のリンクはテンプレに入れるとしたら Planet Lisp のがいいかもね。
さておき、記念に前に出たトランポリン関連のネタを引っ張っておく。
ttp://bc.tech.coop/blog/040613.html
リストに詰めて apply、ってやり方だから大量のゴミを作るだろうあたりが気になるけど。
相互末尾再帰でもかかわってくる関数それぞれが取る引数の数は大抵の場合は同じだろうから、
そこを固定したコードを吐くマクロを書いた方が実用上は好ましいかな。
0264デフォルトの名無しさん
2005/06/08(水) 07:46:38ECL もオケ
DrScheme のスレッドは所謂 Green Thread でしょ。
Native Thread じゃなくていいなら CMUCL にもある。
0265デフォルトの名無しさん
2005/06/08(水) 08:01:30>>261
PowerPC 使いなら OpenMCL も Native Thread 使える
Intel Mac の登場で x86 にポーティングされないかな…
作業大変だろうけどね
0266デフォルトの名無しさん
2005/06/08(水) 12:31:040267デフォルトの名無しさん
2005/06/08(水) 20:54:46スレ間違えたっぽいので誰か知ってたら答えてください
http://pc8.2ch.net/test/read.cgi/tech/1115335709/380
エラー検出とかのためにリストがどの行のものか保存する
LISP処理系ってありますか?
0268デフォルトの名無しさん
2005/06/09(木) 06:50:31[ドラマ] 恋におちたら 〜僕の成功の秘密〜 第01話 「ずっと探してた人」 (D-KTV 1024x576 DivX511).avi aaLPbRVQ8B 1,089,947,648 56df0ca851a66ec551b59c6a54db9978
0269デフォルトの名無しさん
2005/06/09(木) 08:05:030270デフォルトの名無しさん
2005/06/09(木) 16:28:51こらこらこら
0271デフォルトの名無しさん
2005/06/10(金) 05:07:090272ミミ
2005/06/11(土) 07:54:400273デフォルトの名無しさん
2005/06/11(土) 09:24:39直感的じゃないし、初学者には意味不明な単語が増えるだけ。
『引数の数』じゃダメな理由でもあるの?
0274デフォルトの名無しさん
2005/06/11(土) 09:24:54カジュアルには「引数の数」かな。
もう少し丁寧に「手続き(関数)が受け取り可能な引数の数」とか。
精確に行くなら「アリティ」で。
0275デフォルトの名無しさん
2005/06/11(土) 09:38:15引数はそのまま引数みたい
0276デフォルトの名無しさん
2005/06/11(土) 10:25:320277デフォルトの名無しさん
2005/06/11(土) 10:40:51引数として受け付ける個数の範囲かな
0278デフォルトの名無しさん
2005/06/11(土) 10:41:05arityに語源はないの?
0279デフォルトの名無しさん
2005/06/11(土) 11:48:590280ミミ
2005/06/11(土) 14:34:38やはり「引数の数」が一番分かりやすそうですね。
でも用語に「の」が入ると、「の」が沢山でてきて
読みにくい文章になったりするんですよね。
そういう意味では「アリティ」のほうがましかも。
0281デフォルトの名無しさん
2005/06/11(土) 16:02:01> そういう意味では「アリティ」のほうがましかも。
それはない。
0282デフォルトの名無しさん
2005/06/11(土) 17:52:52として、以降アリティで良いんじゃないかな
0283ミミ
2005/06/11(土) 18:15:03後者ののほうが分かりやすいと思うんだけど、
「個数」って訳する人、意外と少ないんだよねぇ。
0284デフォルトの名無しさん
2005/06/11(土) 18:18:410285デフォルトの名無しさん
2005/06/11(土) 18:26:100286デフォルトの名無しさん
2005/06/11(土) 18:35:56全米が凍った
0287デフォルトの名無しさん
2005/06/11(土) 20:54:02用語が出てきて困ったな〜。
0288デフォルトの名無しさん
2005/06/11(土) 21:25:310289デフォルトの名無しさん
2005/06/11(土) 21:26:570290デフォルトの名無しさん
2005/06/11(土) 21:27:48どうせいつかは英文のマニュアルとか読む機会もあるだろうからね。
0291デフォルトの名無しさん
2005/06/11(土) 22:15:510292デフォルトの名無しさん
2005/06/11(土) 22:39:14商用レベル文書の品質としては失格。
0293デフォルトの名無しさん
2005/06/11(土) 22:46:35間違っている。
0294デフォルトの名無しさん
2005/06/11(土) 22:56:50コードをくれ
0295デフォルトの名無しさん
2005/06/11(土) 23:05:08それで分かり難い訳本が多いんですね。
納得しますた。
0296デフォルトの名無しさん
2005/06/12(日) 00:15:550297デフォルトの名無しさん
2005/06/12(日) 00:22:080298通りすがり
2005/06/12(日) 00:29:43屑はいつもみたくν速で一日中遊んでりゃいいやん
0299デフォルトの名無しさん
2005/06/12(日) 00:38:36方程式でも変数がxだけなら1元、xとyなら2元というのを
そのまま函数にも適用したという感じだ。
(方程式の変数の数を元数というのは日本でも普通)
今辞書を引いて初めて知ったんだが、函数というのは中国由来で
functionのfunと同音の字を当てたらしい。関数は日本で更に同音の字を
当てて書き換えたものとか。
googleで関数(簡体字で)を検索すると世界で4件しか引っ掛からん。
0300デフォルトの名無しさん
2005/06/12(日) 00:56:59ただ、やっぱり使う前に説明が必要だね。
0301デフォルトの名無しさん
2005/06/12(日) 01:10:0303023歳児
2005/06/12(日) 01:11:00ここ数日のまちがいだとおもいます。
0303デフォルトの名無しさん
2005/06/12(日) 01:20:170304デフォルトの名無しさん
2005/06/12(日) 01:21:480305デフォルトの名無しさん
2005/06/12(日) 01:27:160306デフォルトの名無しさん
2005/06/12(日) 02:17:46今見ると、やっぱりちょっと古くさいね…
0307デフォルトの名無しさん
2005/06/12(日) 13:23:58Symbolics みたいなタイルウィンドウシステムでしょ。
一度触ってみたいなぁ。
Macintosh CommonLispのdigitoolには Mac用バイナリがまだ置いてあるみたいだけど
0308デフォルトの名無しさん
2005/06/12(日) 20:45:30君のいうレベルの高い内容を提示してくれよ。
0309デフォルトの名無しさん
2005/06/12(日) 21:24:010310デフォルトの名無しさん
2005/06/12(日) 21:29:580311デフォルトの名無しさん
2005/06/12(日) 22:14:020312デフォルトの名無しさん
2005/06/12(日) 22:27:550313デフォルトの名無しさん
2005/06/13(月) 02:08:41http://www.eclipsewiki.net/eclipse/?Commonclipse
0314デフォルトの名無しさん
2005/06/13(月) 04:05:46scheme なら gauche と KSM も
Lisp/Scheme 以外でもフリーの処理系でネイティブスレッドを
サポートしている物は非常に少ない
知ってるのは OCaml, GHC, Perl, Python, Erlang くらいかな
SML 系は全滅っぽいね
0315デフォルトの名無しさん
2005/06/13(月) 11:31:38> サポートしている物は非常に少ない
なぜ少ないのでしょうか?
0316デフォルトの名無しさん
2005/06/13(月) 11:55:13面倒なんだろ。
0317デフォルトの名無しさん
2005/06/13(月) 12:02:55おこちゃまだから。。
0318デフォルトの名無しさん
2005/06/13(月) 12:07:210319デフォルトの名無しさん
2005/06/13(月) 12:52:330320デフォルトの名無しさん
2005/06/13(月) 13:04:140321デフォルトの名無しさん
2005/06/13(月) 13:12:15See: 319
0322デフォルトの名無しさん
2005/06/13(月) 13:18:21○ おまえモナー
0323デフォルトの名無しさん
2005/06/13(月) 13:37:46See: 320
0324デフォルトの名無しさん
2005/06/13(月) 14:02:200325デフォルトの名無しさん
2005/06/13(月) 20:38:120326デフォルトの名無しさん
2005/06/13(月) 20:49:40後藤英一 - 日本のコンピュータパイオニア
http://www.ipsj.or.jp/museum/pioneer/gotou.html
0327デフォルトの名無しさん
2005/06/13(月) 20:57:40http://www.ipsj.or.jp/katsudou/museum/pioneer/gotou.html
http://www.mainichi-msn.co.jp/shakai/fu/news/20050614k0000m060060000c.html
ttp://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/essay/omoide
>>315
理由はここら辺じゃないかな
1. 実装が面倒
2. 1CPU のマシンではネイティブスレッドのメリットが見えにくい
3. Linux のスレッドがイケてなかった
1 は GC 絡みとかなのかな
2 は最近の CPU のデュアルコア化でちょっとはメリットが出てくるかも
3 は 2.6 以降問題なくなった(らしい)
0328デフォルトの名無しさん
2005/06/13(月) 21:01:10Lisp Machine ってスレッドとか LWP みたいな概念はあったのでしょうか?
0329デフォルトの名無しさん
2005/06/13(月) 21:04:33やっぱ面倒なんじゃないかね。
作るとしたら、GCやコンストラクタは排他制御して、
オブジェクトの更新毎にWriteバリアかね。
やっぱGC周り面倒だなあ。
適当に作ったらすぐ破綻しそう。
0330デフォルトの名無しさん
2005/06/13(月) 21:54:17ハンデにはならないのかなという気もする。面倒なのは同意だけど。w
0331デフォルトの名無しさん
2005/06/13(月) 22:03:28まじか。
中西(正和)先生も少し前に亡くなったが、今度は後藤先生か。
0332デフォルトの名無しさん
2005/06/14(火) 10:56:27http://tabesugi.net/memo/2005/62.html#111413
> しかし相手はそこそこ有名なLisp ハッカーであり、習うべきことは多い。
> Lisp で仕事できる機会なんてそんなにないと思う。
などと書いている。今まで Lisp の悪口ばかり書いていたのになあ。
と思ったら、今日はさっそく Lisp の悪口であった。
http://tabesugi.net/memo/2005/62.html#131404
やっぱり新山氏はそう来なくっちゃ!
0333デフォルトの名無しさん
2005/06/14(火) 12:56:36なんか有名な人なの?
嫌いな言語使って仕事してるっていう愚痴のようにしか読めんが。
0334デフォルトの名無しさん
2005/06/14(火) 14:50:02NY市立大の院生で、Python や Scheme、OpenSSH の世界ではそこそこ有名な人。
http://www.unixuser.org/~euske/doc/index.html
Shiro さんが wiliki で取り上げたこともある。
http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Shiro%3alog%3a2004%b8%e5%c8%be
0335デフォルトの名無しさん
2005/06/14(火) 15:01:18何言ってんの? この人ぜんぜん有名じゃないよ。
0336デフォルトの名無しさん
2005/06/14(火) 18:25:51話をしようよ。
Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、
package は実用上不可欠なのに、Scheme にはまだ標準がなく、実装依存だと
いうこと、これらはもっともな批判だと思うのだけど。
0337デフォルトの名無しさん
2005/06/14(火) 19:06:44>>334
> Python や Scheme、OpenSSH の世界ではそこそこ有名
なんていうような仕事はしとらん。
まあ言ってみればプチ岩谷宏。
0338デフォルトの名無しさん
2005/06/14(火) 19:08:140339デフォルトの名無しさん
2005/06/14(火) 19:36:34> Common Lisp のライブラリが、過去互換性のために見通しが利きにくいこと、
確かにそういう面は否定できないが、正直言って慣れてしまったね。
それを言うなら例えば C のライブラリとか UNIX のシステムコールにしたって
「過去互換性のために見通しが利きにくい」と思うし。
誰かが整然とした New Common Lisp を設計したとしても、それを布教するのは
大変だろうなぁ・・・
0340デフォルトの名無しさん
2005/06/14(火) 20:04:52論百出で、いつまでたっても Common Lisp 並のライブラリがそろわない件に
ついて。
0341デフォルトの名無しさん
2005/06/14(火) 20:12:26あと50年は掛かるな
0342デフォルトの名無しさん
2005/06/14(火) 20:25:24も、いつまでたっても実験段階から離陸しないものね。
コンピュータ技術、ひいては技術一般に、いかに市場とのタイミングというも
のが重要か、分かるように思う。
0343デフォルトの名無しさん
2005/06/14(火) 20:41:53現状と個人の経験なわけで。
このスレには厳密主義が多いかと思った。
0344デフォルトの名無しさん
2005/06/14(火) 20:47:54ちょっと待て、聞き捨てならん。こんな書いてて楽しくないものが、LISP の
昇華物であってたまるかぁっ!
0345デフォルトの名無しさん
2005/06/14(火) 21:03:17昔、Lispの研究をしていた人がSunに行ってJavaを作り、それに対抗したMicrosoftが
MLの研究グループを引き抜いてC#を作ったんだよ。
Lispは特にリサーチプロジェクトなんかには便利な言語だね。 Javaは大規模なプロジェクト
向きかな。 要するに、適材適所で使えば良いかと。
0346デフォルトの名無しさん
2005/06/14(火) 21:09:40物理学では
省略・・・
心理学では
防衛機制の一つ。
実現不可能な目標・葛藤や満たすことができない欲求から、
別のより高度で社会に認められる目標に目を向け、
その実現によって自己実現を図ろうとすること。
例)かつてアクション映画で活躍したが、
障害を負ってアクション映画に出演できなくなった→障害者保護団体を設立する
0347デフォルトの名無しさん
2005/06/14(火) 21:18:09本気で言ってるのだとしたら面白すぎる
0348デフォルトの名無しさん
2005/06/14(火) 21:22:16数理論理学では
ならば
0349デフォルトの名無しさん
2005/06/14(火) 21:33:23それって、ガイ・スティールのことか?Java はやっぱりジェームズ・ゴスリ
ングのものだと思うのだけどなあ。ゴスリングとビル・ジョイが Java の仕様
でもめたところを、ガイ・スティールがまとめたんだろう。彼は他にもいろん
な言語の仕様に関わってるし。JavaScript とか。
ML とC# の関係は全然知らなかった。ありがとう。
0350デフォルトの名無しさん
2005/06/14(火) 22:08:05ヒント:Java, Delphi, ObjectPascal
0351デフォルトの名無しさん
2005/06/14(火) 22:15:33> 彼は他にもいろんな言語の仕様に関わってるし。
をいをい。Schemeを忘れるなよ。w
時系列で言えば Scheme→Common Lisp→Java の順で手がけている。
もちろんこの順序と言語の優劣は関係ない。
漏れはGuy Steeleの絡んだ言語はすべて好きだよ。
0352デフォルトの名無しさん
2005/06/14(火) 22:24:29初期のJavaの研究会行ったら「私の仕事はGuy L. Steele 仕事ですw」という奴が居て噴いたなぁ。
Scheme → CommonLisp → StarLisp, C* (ThinkingMachine) → HighPerformanceFortran → Java
のうち、漏れ自身ThinkingMachine以外はやってたw
0353デフォルトの名無しさん
2005/06/14(火) 22:48:060354デフォルトの名無しさん
2005/06/15(水) 00:09:090355デフォルトの名無しさん
2005/06/15(水) 00:20:44反応するなよ
>>349
騙されるなよ
0356デフォルトの名無しさん
2005/06/15(水) 00:31:28ダウト
0357デフォルトの名無しさん
2005/06/15(水) 01:21:56UNICODE サポート、例外機構、モジュール機構、構造体辺りが楽しみだ。
モジュールは長く標準化が待ち望まれた機能だしね。
0358デフォルトの名無しさん
2005/06/15(水) 01:28:41多値は受け取ったり受け取らなかったりと、今一不可解なプロトコルと言える
参照ベースな言語では構造体パックが正解なのかもしれない
0359デフォルトの名無しさん
2005/06/15(水) 03:35:45そこで Arc ですよ。
>>358
個人的には多値で渡していくやり方は細かいことを気にせずに済んで好きなんだけど、
いまいち現状だと構文上すっきりしないところが多いのも確かですね。
wiliki であった、アリティに応じて返す値の数を変えられるようにする、
ってのは結構面白いなあと思った。問題が色々出て来ちゃうみたいだったけど。
……でもその辺すっきりしたいなら他の関数型言語に転んじゃった方が楽な気が。
どうせ構造体でパックしちゃうなら 1-in 1-out で、型付けも静的な方が楽じゃないですか?
0360デフォルトの名無しさん
2005/06/15(水) 07:09:22手間は変わらないって考えて良いのかな。
0361デフォルトの名無しさん
2005/06/15(水) 11:25:48(i) 構造体のコンストラクタが関数の末尾位置にあるときは、構造体
そのものをスタックにアロケートして、
(ii) その関数の呼び出し側で返値(構造体)がエスケープしないなら
そのままスタックの上で使う。
0362デフォルトの名無しさん
2005/06/15(水) 11:37:37仕事とは知りませんでした。
「日本のコンピュータ研究の先駆者、後藤英一さん他界」
http://slashdot.jp/article.pl?sid=05/06/14/0954213&topic=89&mode=nested&threshold=-1
0363デフォルトの名無しさん
2005/06/16(木) 11:02:58『初めての人のためのLISP』を図書館で借りて読んでいるのですが、ちょっと
分からない点があります。
P147
-------------------------
初心者は nconc の使い方でミスをするケースが非常に多い。例えば,プログ
ラムの中で
(setq x (nconc '(title =) y))
などとやると,プログラムの中の
(title =)
というリストの後ろに y の値がくっついてしまう。だからふたたびこの式を
評価すると,前回くっついたものの後ろにまた nconc することになる。プロ
グラム中で quote されたリストもデータには代わりはないから要注意。
-------------------------
しかし、手元の処理系(emacs21, xyzzy)では、上の式は何度評価しても、x に
は同じ(equalな)値がバインドされています。どんどん長くなったりしません。
私が勘違いしているのでしょうか?それとも、昔の処理系なら x はどんどん
長くなったのでしょうか?
0364ζ
2005/06/16(木) 12:21:12(setq a "hi" )
=> "hi"
(setq a (nconc '(title =) a))
=> (title = . "hi")
=> (title = title = . "hi")
=> (title = title = title = . "hi")
=> (title = title = title = title = . "hi")
0365363
2005/06/16(木) 12:37:21すから。
0366デフォルトの名無しさん
2005/06/16(木) 13:31:00(setq x (nconc '(title =) y))
ってもう一度打ち込んでるとか。
そうすると '(title =) のリストが(多くの処理系では)再評価のたびに新しく作られる。
(defun f () (setq x (nconc '(title =) y)))
のような関数を作って (f) を再評価してみては?
ちなみにANSI Common Lispの規定ではquote式のリストを書き換えることは禁止
になっていたと思う。
0367364
2005/06/16(木) 14:06:31ん。*scratch buffer* の同じ行で、C-j を繰り返しています。それでも x は
伸びないのです。
なお、念のため (defun f () (setq x (nconc '(title =) y))) も書いてみま
したが、やはり emacs、xyzzy とも x が伸びたりはしません。
0368デフォルトの名無しさん
2005/06/16(木) 14:15:10(setq x '(1 2 3))
(nconc x '(4 5))
nconc を繰り返すと x は長くなっていく(@emacs21)。
0369デフォルトの名無しさん
2005/06/16(木) 14:15:44>C-j を繰り返しています。
これはLispインタプリタ側から見たらテキストを再入力してるのと同じ。
内部的にはトップレベルの (read) がもう一回呼ばれるからね。
ところで y の値には何を入れて試してるの?
0370364
2005/06/16(木) 14:36:05コンパイルしても、やはり x は伸びません。
私の疑問をまとめますと、'(title =) を評価したら、それが再度の手入力で
あれ、バイトコンパイル後の関数内であれ、毎回新たな cons セルが生成され
るのが自然なのではないか、x が伸びるのはおかしいではないか、というもの
です。
しかし、よく考えてみると、伸びないのが逆におかしいような気もします。混
乱してきました。
nconc に渡されるものの実体は何でしょうか?渡されるものがただの文字列で、
それを nconc が評価してリストを生成するなら、伸びないのが自然だし、渡
されるものが cons セルそのもので、その生成は最初にコードを書いたときに
行われるなら、伸びるのが当然のような気がします。
皆さんの処理系では、どうなるでしょうか?
0371デフォルトの名無しさん
2005/06/16(木) 14:44:44実装による。
0372デフォルトの名無しさん
2005/06/16(木) 14:48:44'(title =)のセルが作られるのはトップレベルの内部で呼ばれるread関数の中。
エディタは文字列で持っているが、それがLispの世界に渡されるときにconsセル
に変換される。君の場合はC-jを押したときに起こっているはず。
あとyの値がアトムでは面白いことは起きないだろ。
(setq y '(hoge))
(defun f () (setq x (nconc '(title =) y)))
しておいて(f)を評価してみ。2回目の評価で凄いことが起きるぞ。w
0373デフォルトの名無しさん
2005/06/16(木) 14:50:01nconcがdestructiveでない実装ってある?
0374364
2005/06/16(木) 16:39:48てませんでした。
(setq y '(hoge); リストを入れる。
(f); 評価にあたって、バイトコンパイルの必要はない。
=>(title = hoge) ; 1回目
=>(title = hoge hoge . #2) ; 2回目
=>無限ループ ;3回目...あわてて C-g で停止。
nconc は破壊的だから、同じリストを nconc で何度も結合すると、自己参照
が起きてしまうのですね。私のところで問題が起きなかったのは、一つはアト
ムを nconc していたからなのですね。
まとめると、こんな感じでしょうか。
・(setq x (nconc '(title =) y)) の評価は、これを素で評価するのと、関数
に入れて評価するのとで、結果が違う。
・(setq z '(title =)) として、(setq x (nconc z y)) を評価すると、素で
評価しても、関数に入れても同じ結果になる。
・だから、Common Lisp では、quote 式のリストに破壊的操作を行ってはなら
ないことになっている。
0375デフォルトの名無しさん
2005/06/16(木) 18:54:46* '(a b c) のようなフォームはリテラルと呼ばれ、コンパイル時に作成される。
* だから (defun f () '(a b c)) の時、(eq (f) (f)) は真になる。
* もしここでリテラルの変更を許可してしまうと
(f) => '(a b c)
(nconc (f) '(d e f))
(f) => '(a b c d e f)
となり、参照透過性が保てなくなる。
* また、コンパイラは同じ値のリテラルを同じオブジェクトにしてもかまわない。
(setq x '(a b c) y '(a b c)) において (eq x y) が真になってもかまわない
ということ。そのような最適化をするコンパイラでは
(setq x '(a b c) y (nconc '(a b c) '(d e f))) で x まで '(a b c d e f)
になってしまう。
0376デフォルトの名無しさん
2005/06/16(木) 20:06:54「コンパイル時に作成される」という言い方は抵抗あるなぁ。
基本的にはインタプリタでも事情は似たようなもんだから。
同一リテラルを再利用する最適化はread関数が行う可能性も
あるし、もちろんコンパイラが行う可能性もある。
(実際にやる処理系は見たことないけど)
0377363
2005/06/16(木) 21:16:25しかし、後者の理由はわかりますが、前者の参照透過性については、副作用の
ある関数も多いわけですから(カウントアップのクロージャとか)、純粋な関
数型言語でない LISP にとってそれほど重要なのか、よく分からないです。
あと、
(setq y '(hoge))
(defun f ()
(setq x (nconc (list 'title '=) y)))
これだと、(f) を何度評価しても、結果は (title = hoge) なのですが。
0378363
2005/06/16(木) 21:17:160379375
2005/06/16(木) 22:16:50インタプリタであっても、クロージャの作成等ある程度の変換処理が入るので、
そういった物も含めてコンパイラと書いたんだけど、 Common Lisp では
「コンパイラ」という用語は interpreted function を compiled function に
変換する機能として定義されてるからよくなかったね。
「処理系によって作成される」等に訂正。
ところで、read 関数が返すのは #n# 等の例外を除いて新規に割り当てられる
ことが保証されてなかったっけ。reader の段階では '... を (quote ...) と
変換できることは知ってても (quote (a b c)) がリテラルであり再利用可能
であることは知らないはずだけど。
もし保証されてないとすると、prin1 で保存したデータを read して破壊的操
作してるコードを修正しないと。。。
>>377
一見参照透過に見えるのにそうでないのは混乱の元だってこと。
実際にはリテラルを直接返すのは呼び出し元の挙動に依存するので
あまり好ましいやり方じゃないんだけどね。
あと、後半部についてはそのとおり。(setq x (nconc (list ... はまとめ
の部分に対してのコメント。
0380363
2005/06/16(木) 23:07:130381デフォルトの名無しさん
2005/06/16(木) 23:26:37Windows で Scheme を書いておられる方は、環境に何をお使いですか?Emacs の
scheme-mode + run-scheme と似たような環境がほしいのです。
・ChezEdit ... Shift + F2 で範囲選択した個所を評価・実行できるので、Emacs と
かなり使い勝手は近い。しかし Petite Chez Scheme 専用。また Windows95 系の
OS では動かない。
・xyzzy ... scheme-mode はあるが、run-scheme はない。
・Meadow ... 使ったことないけれど、run-scheme は Gauche ではうまく動かない
らしい。
・Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。
0382デフォルトの名無しさん
2005/06/17(金) 04:17:37ある処理系で Shift_JIS をサポートするに当たり、locale が Shift_JIS の
際の nl_langinfo(CODESET) の値を調べてます。
以下のコードを foo.sh と保存し、sh foo.sh の結果を教えてください。
ちなみに、当方では以下のようになります。
FreeBSD 5.4-RELEASE-p2
codeset: SJIS
--ここから-- foo.sh
#! /bin/sh
c=$0.$$.c
o=$0.$$.out
cat > $c <<__EOF__
#include <langinfo.h>
#include <locale.h>
#include <stdio.h>
main()
{
setlocale(LC_ALL, "");
printf("codeset: %s\n", nl_langinfo(CODESET));
}
__EOF__
cc -o $o $c
uname -sr
for l in $(locale -a | grep -i -e sjis -e 'shift.*jis'); do
LC_ALL=$l ./$o
done | sort -u
rm $c $o
--ここまで--
0383デフォルトの名無しさん
2005/06/17(金) 05:25:490384デフォルトの名無しさん
2005/06/17(金) 05:27:280385デフォルトの名無しさん
2005/06/17(金) 09:07:130386381
2005/06/17(金) 10:42:50みんなホント、Windows でどうやってるんですか?Gauche を Windows に移植
した人たちとか、一体どんな環境で Gauche を使いたくて移植したんでしょうか?
0387デフォルトの名無しさん
2005/06/17(金) 11:18:19Windows でも Emacs(Meadow) + scheme-mode + run-scheme ですが何か?
0388381
2005/06/17(金) 12:52:38すみません、Meadow は Gauche を普通に使えるみたいですね。
http://64.233.161.104/search?q=cache:pD4TKAZBB8cJ:eclipse.neneko.com/diary/20040313.html
Meadowのrun-schemeでGaucheを使う場合には-iオプションを付ける必要がある.
(setq scheme-program-name "gosh -i")
少し質問させてください。
・Meadow で MzScheme、Chez Scheme などは使えますか?
・もう少し軽い環境はないでしょうか?VisualStudio が軽々動くマシンでし
たら、Meadow + Cygwin も問題なく使えるのだろうと思うのですが、私の
Windows 機は xyzzy ももっさりしているぐらいなので。
0389デフォルトの名無しさん
2005/06/17(金) 12:59:07重たいデスクトップ環境を使わないようにすれば古いPCでも快適ですよ。
当方は初代ThinkPad560をそうやって使ってます。買い替えたのは内蔵
ハードディスクだけ。GoshもMzSchemeもそこそこ快適に動きますよ。
0390381
2005/06/17(金) 15:15:05Emacs21 + Gauche を快適に使っています。それまでずっと Windows (とその
系統のソフト)しか使っていなかったので、こんなに便利な環境があるなんて、
想像もしていませんでした。今まで使わないで大損をしていた、と後悔してい
るほどです。
http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/scheme.html
現用の Windows(98)機は事情があって、Linux を入れることはできないのです
が、このマシンでも Petite Chez Scheme は意外に早く動くので、こちらでも
もう少し環境を整えられないかな、と思ったのです。Emacs 環境がいかに便利
とは言え、長く使った Win 版ChezScheme に少々愛着もありますので。
0391デフォルトの名無しさん
2005/06/17(金) 21:13:21>Windows で Scheme を書いておられる方は、環境に何をお使いですか?
DrScheme 使ってる。
>Dr.Scheme ... MzScheme 専用。英語なので使い方がよく分からない。
最近 GUI が日本語化されたよ (v299.106 以降)。
マニュアルは英語のままだけど。
0392デフォルトの名無しさん
2005/06/17(金) 21:39:49それって、どこでダウンロードできますか?下記のサイトではまだ
Version:299.100 なんだけど。
http://download.plt-scheme.org/drscheme/
0393デフォルトの名無しさん
2005/06/17(金) 21:50:310394デフォルトの名無しさん
2005/06/17(金) 22:20:520395381
2005/06/17(金) 23:44:45うので、とても興味があります。
いくつか質問させてください。
・開発環境は、日本語は通りますか?
・エディタ画面の、指定した範囲の評価はできますか?
(Emacs の C-x C-e にあたるもの)
・エディタ画面は、S式単位の編集はできますか?
(参照:4.2. カーソル移動)
http://www.kahua.org/cgi-bin/khead.cgi/kahua-web/show/eg/emacs
・Emacs キーバインドにすることはできますか?
・以前試したとき、素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅
くなった記憶があります。今はどうでしょうか?遅いままだとしたら、使い
方による回避はできますか?
たくさん聞いてすみません。私のほかにも、興味はあるけど手を出せないでい
る人は多いと思いますので。少しでも答えてもらえたら、大喜びです。
0396デフォルトの名無しさん
2005/06/17(金) 23:52:39この辺が漏れには理解できないんだよね。
とりあえず試してみればいいのに。
0397デフォルトの名無しさん
2005/06/18(土) 00:08:12=> いちいち試すの面倒だからさっさと教えろよ!
0398デフォルトの名無しさん
2005/06/18(土) 07:13:00(cond
(開発環境は、日本語は通りますか?
今時Unicode対応は標準だと思うんだが.....)
(エディタ画面の、指定した範囲の評価はできますか?
そんなことすらできないものをIDEと呼ぶはずが無いと思うんだが....)
(エディタ画面は、S式単位の編集はできますか?
できなかったらキーボードに突っ伏して寝てしまうほど基本的な機能だと思うんだが....)
(Emacs キーバインドにすることはできますか?
キーバインド固定のIDEなんて絶滅して久しいと思うんだが....)
(素のMzScheme は結構早いのに、Dr.Scheme環境だと大変遅くなった記憶があります。
デバッグ機能を外せば実行は早くなると思うんだが....)
(else
予想と現実ってあんまり一致しないんだよな))
0399381
2005/06/18(土) 08:48:50実は、最新版を一応インストールして、少し試してはいたのですが、知人のマ
シンを借りて行っていたので、きちんと試す時間がなかったのです。だから試
したとは書かなかった(書けなかった)のですが、>>395の質問項目は、いず
れもその短い時間で解決できなかった項目を、知人のマシンから書き込んだも
のです。
現在は自宅の自分のマシンですが、実は、インストールしようとすると、何度
やってもインストーラが途中で失敗してしまいました。おそらくメモリ不足で
しょう。知人のマシンで試した時、かなり重かったので、うまく行かないよう
な気がしてはいたのですが。
ただ、開発環境としては非常に興味があります。将来、新しいマシンを入手し
た時のために、参考になることを教えてもらえたら、大変ありがたいのです。
0400デフォルトの名無しさん
2005/06/18(土) 18:14:12nil
0401デフォルトの名無しさん
2005/06/18(土) 20:25:36(if #t
(define abc 123))
とするとエラーになるのはなんで?
0402デフォルトの名無しさん
2005/06/18(土) 20:31:44そこは define の書ける場所ではなから。
0403デフォルトの名無しさん
2005/06/18(土) 20:36:01たとえば、何らかのフラグ (これこれのシンボルが定義されているかどうか)
によって、定義を変えたいときは、どのようにするのがよいでしょうか。
0404デフォルトの名無しさん
2005/06/18(土) 20:37:27set!
0405デフォルトの名無しさん
2005/06/18(土) 20:38:24すいません、もう少し詳しく説明していただけませんか?
0406デフォルトの名無しさん
2005/06/18(土) 20:42:17(define abc 123)
(if 何かの条件
(set! abc 456))
みたいにすればいい。
define は他の言語での変数の宣言に近い。
純粋な代入は set! を使う。
0407デフォルトの名無しさん
2005/06/18(土) 20:47:23なるほどー。
今の例だと、123 という簡単な値なのでよいのですが、
たとえば、構文の定義を変えたい場合はどうでしょう?
たとえば、Windows と Mac で、構文の定義を変えたい場合です。
シンボル WIN32 が定義されていれば Windows の定義にしたい。
これも set! で可能でしょうか?
0408デフォルトの名無しさん
2005/06/18(土) 20:47:26ブロックの先頭だから書けるはずじゃない?
ローカルスコープなので>>401の例では無意味だが。
ちなみにGaucheだと書けるが、グローバルにabcが定義されちゃう。
これはバグだと思うが。
0409デフォルトの名無しさん
2005/06/18(土) 20:56:48R5RS的にはdefineが書けるのはトップレベルか<body>の先頭。
ifの中の式は<body>ではないのでR5RS的には駄目。
つまり、lambdaとかletなどの新しいスコープを作る場所でのみ許すという
考え方だとおもわれる。
Gaucheの場合、トップレベルのifの中はまだトップレベルのスコープだという
解釈なのではないかな。これはこれで便利に使えそうな気がする。
0410デフォルトの名無しさん
2005/06/18(土) 20:58:010411デフォルトの名無しさん
2005/06/18(土) 21:00:46構文というのがマクロの定義を変えたいという意味なら不可だと思う。
(Gaucheなどは>>409で書いたように可能かもしれないが)
関数の定義を変えたいという意味であれば、
(set! func (lambda (...) ...))
のようにすれば定義を変更できる。
0412デフォルトの名無しさん
2005/06/18(土) 21:10:01> 構文というのがマクロの定義を変えたいという意味なら不可だと思う。
そうですかー。
できてもよさそうな機能なんですけど。。
> 関数の定義を変えたいという意味であれば、
> (set! func (lambda (...) ...))
> のようにすれば定義を変更できる。
Scheme コードをコンパイルする場合、
これだと無駄なコードがコンパイルされてしまいますよね。
だから、構文展開時に切り替えたいんです。。
0413デフォルトの名無しさん
2005/06/18(土) 22:07:43> これだと無駄なコードがコンパイルされてしまいますよね。
仮に if の中に define が書けたところで、この辺の事情は
変わらないと思うのだが。
0414デフォルトの名無しさん
2005/06/18(土) 22:09:07そんなのが気になるなら、win32.scm macos.scm とかにプラットフォーム
依存の構文を入れておいて、make 等でそれを target.scm にコピー、
使用する際は (load "target.scm") するようにすれば?
0415デフォルトの名無しさん
2005/06/18(土) 22:22:480416デフォルトの名無しさん
2005/06/18(土) 23:22:26今の疑問が枝葉かどうか判別するには、ある程度見通しが立ってないと。
0417デフォルトの名無しさん
2005/06/19(日) 00:39:27ある程度学習経験があれば、そういうところにあまり時間を浪費せずに進み
後でわかるようになってるという進め方が普通。
その決断が自分でできないなら、疑問点をまとめてリストアップしておく
ノートを作っておけばいい。ノートに覚えてもらうわけだ。
先に進んで問題にぶちあたったとき、スキップした項目が理解に関連するなら
そのとき立ち戻ればいい。
0418デフォルトの名無しさん
2005/06/19(日) 00:58:21マンドクサ狩りの俺みたいなのは
Scheme には #ifdef ないのか マンドクセ とりあえず放置...
で終了する事が多いんで、疑問は感じた時に解決っつー
スタンスもありだと思うよ。
0419デフォルトの名無しさん
2005/06/19(日) 00:59:43だから初学者だの何だのと言って話をそらすんじゃ。。
0420デフォルトの名無しさん
2005/06/19(日) 01:08:10んなこたぁないょ
0421ミミ
2005/06/19(日) 01:15:26MzScheme だけど。
(define-syntax (if-for-syntax stx)
(syntax-case stx ()
((_ TEST-EXPR TRUE-EXPR FALSE-EXPR)
(if (eval #'TEST-EXPR)
#'TRUE-EXPR
#'FALSE-EXPR))))
(define PLATFORM "Windows")
(if-for-syntax (string=? PLATFORM "Windows")
(begin
(define Vendor "Microsoft")
(define Color "Blue"))
(begin
(define Vendor "Unknown")
(define Color "Red")))
(display Vendor)
0422デフォルトの名無しさん
2005/06/19(日) 01:18:41そもそも、言語処理系のユーザが考えるべき問題じゃないし、
ユーザレベルで解決できる問題じゃないってこと。
マクロがどう展開されるか、関数がどう最適化されるかって問題だろ?
部分評価とかする処理系なら、>>412みたいな心配はないかもしれない
わけだし。
0423デフォルトの名無しさん
2005/06/19(日) 01:26:12414 で解決したと思ってたんだけど
0424デフォルトの名無しさん
2005/06/19(日) 01:32:310425デフォルトの名無しさん
2005/06/19(日) 01:59:01(cond-expand
(win32 ...)
((or unix macosx) ...)
(else ...))
とか
0426デフォルトの名無しさん
2005/06/19(日) 18:16:57>>425みたいに無駄にS式縛りにするのは面倒だし
読みにくいと思ってる。
S式に縛られてないから任意の箇所で
(func
#if (defined 'platform-win32)
1 2 3)
#else
#if #t
4 5 6)
#else
7 8 9)
#endif
#endif
みたいなことができる。
まあSRFIレベルの定義じゃ無理だな。
0427デフォルトの名無しさん
2005/06/19(日) 18:42:540428デフォルトの名無しさん
2005/06/19(日) 18:44:20CL風の#+ #-が使えるScheme処理系ってないの?
0429デフォルトの名無しさん
2005/06/19(日) 19:00:36scheme だと単純に変数へ束縛する関数オブジェクトを変えればいいだけになる。
だから scheme ではわざわざ新しい構文を導入するまでもなく
(define hoge
(if (eq? 'platform win32)
(lambda (arg) ...)
(lambda (arg) ...)))
とかすればいい。
そしてなにより美しい。 ← 一番重要w
0430デフォルトの名無しさん
2005/06/19(日) 19:07:300431デフォルトの名無しさん
2005/06/19(日) 19:11:00マクロ展開されるのだって1回だけと期待できるにせよ実行時だし、
>>429のifだってよほどnaiveな実装でない限り、1回しか実行されない。
わかってる?
0432デフォルトの名無しさん
2005/06/19(日) 19:25:25コンパイルが別パスの処理系ならマクロ展開はコンパイル時が普通じゃない?
そしたら実行イメージに余分なコードは入らない.
0433デフォルトの名無しさん
2005/06/19(日) 19:27:49別パスなコンパイラ使うなら、それこそ適当なプリプロセッサでも使えば
良いじゃん
0434デフォルトの名無しさん
2005/06/19(日) 19:28:48あらかじめコンパイルしたファイルをダンプしておいた場合も
if は評価されない?
0435デフォルトの名無しさん
2005/06/19(日) 20:10:04あらかじめコンパイルしたファイルをダンプするって意味が良くわからないが、
>>429の例を借りると、hogeの束縛時つまり(define hoge ...)の実行時に1回if
は評価されるし、されないと困る。が、これによって定義されたhogeを評価
する時には(if (eq? 'platform win32) ...)部分のifを評価するような処理系は
存在しない。
0436デフォルトの名無しさん
2005/06/19(日) 21:18:530437デフォルトの名無しさん
2005/06/19(日) 22:07:44言いたいことはわかるが、別に美しくない。
使う側はそんな事のためにlambdaに分離してまでやりたくないんだよ。
使う側の気持ちを素直に酌めば、S式縛りでやるなら
(if (eq? 'platform win32)
(define (arg)...)
(define (arg)...))
と書いた方が自然なのでは。
おれの処理系では書けるし、実装するためのトリックみたいなものもない。
逆にscheme的には書けないのはおかしい気がする。
マクロで(begin (define 〜)(define 〜))と書きたい場合もあるし。
まあ、#if〜#endifを作るまではおれもこういう方法を仕方なくとってたけど、
条件毎に余計な部分まで定義をまるごと書かないとダメな点が
どうにも我慢ならなくて切捨てた。
0438デフォルトの名無しさん
2005/06/19(日) 22:13:37おまいの処理系自慢はいいよ。Schemeの話してるんだから。
0439デフォルトの名無しさん
2005/06/19(日) 22:28:16おれも散々悩んだ部分だし。
schemeの中だけでやるなら429みたいな方法しかない。
あとは処理系依存だろ。
0440デフォルトの名無しさん
2005/06/19(日) 22:34:130441デフォルトの名無しさん
2005/06/19(日) 22:37:55萎え。
0442デフォルトの名無しさん
2005/06/19(日) 22:39:370443デフォルトの名無しさん
2005/06/19(日) 22:44:54でも無いといろいろと再発明する羽目になるからなぁ。
きれいで使えないよりは変で使えるほうがいい。
0444デフォルトの名無しさん
2005/06/19(日) 22:47:000445デフォルトの名無しさん
2005/06/19(日) 23:20:01評価するとなると、ifの中に副作用の有る式が書かれていたらプログラムの意味が変わるでしょ。それじゃ全然Schemeじゃないじゃん。
それとも、副作用がないということがプログラム解析で証明できたときだけ評価するの?
0446デフォルトの名無しさん
2005/06/19(日) 23:30:07「naiveな実装でない限り、1回しか実行されない」
「それじゃ全然Schemeじゃない」
どれが正しいのか教えてください。
0447デフォルトの名無しさん
2005/06/19(日) 23:44:060448デフォルトの名無しさん
2005/06/20(月) 00:05:30上の「処理系が存在しない」と俺の処理系は評価するが?に対する
「それじゃ全然Schemeじゃない」ってのは同じことじゃね?
04493才児
2005/06/20(月) 00:23:040450デフォルトの名無しさん
2005/06/20(月) 00:41:53SRFI でも obsolete 扱いのやつはあるんじゃなかったっけ?
順次、事実上の格下げされていくんじゃないかな。R6RS と
コンフリクトしそうな物とかも。
R6RS が出来ても、実装が普及するまで時間が掛かるだろうから、
しばらくはそのままなんだろうけど。
0451デフォルトの名無しさん
2005/06/20(月) 07:29:45全てこれらを使って合成できるとされる。数学で言う公理に当たる。
car 板 http://hobby7.2ch.net/car/
cdr 板 http://pc8.2ch.net/cdr/
atom 板 http://society3.2ch.net/atom/
eq 板 http://live18.2ch.net/eq/
cons 板はまだない。速やかな板新設が必要ではないだろうか。
0452デフォルトの名無しさん
2005/06/20(月) 07:31:29WARNING: locale: no encoding CP932, using UTF-8
WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8
WARNING: *FOREIGN-ENCODING*: reset to ASCII
といった具合に文字コード関連の警告が出ますが
これを解決する方法をご存知でしたらご教示ください。
0453デフォルトの名無しさん
2005/06/20(月) 07:49:45今意味が分かったw
>>381 には悪いがちょっと ワラタ
0454デフォルトの名無しさん
2005/06/20(月) 09:16:09(define hoge ...)
(define hoge ...))
とかが許されないのは、プログラム全体をCやネイティブに変換するコンパイラーとかで面倒だからでないかい?
例えば、同じコンパイルユニットの中でplatformが定義されていれば、コンパイラーはどっちのdefineをコンパイルして書き出すか判断できるけど、
platformが独立にコンパイルされる別のユニット内で定義されている場合には、特別な仕組みが必要に思える。
そういった足枷をつけるより、ライブラリーレベル(srfi-0)で対応した方が良いということで現行のようになったんだと思ってるんだけど。
どう思う?
0455デフォルトの名無しさん
2005/06/20(月) 20:57:56すまんが言ってることがわからん。
>platformが独立にコンパイルされる別のユニット内で定義されている場合
この辺をもう少し説明してほしい。
platformが未定義の場合ということ?
定数畳み込みで消えずに未定義でコンパイル通ったとしても、
一度はどっかで実行されるわけだから
最悪ランタイムエラーになったり、
コンパイルの段階で未定義エラーで検出するで良いんじゃないの?
さっぱりわからん。
>特別な仕組み
特別な仕組みとは?
>ライブラリーレベル(srfi-0)
cond-expandという名前が気に食わん。
適当としか思えない・・
0456デフォルトの名無しさん
2005/06/20(月) 21:10:300457デフォルトの名無しさん
2005/06/20(月) 23:35:56CL使っとけ。
0458デフォルトの名無しさん
2005/06/21(火) 01:27:020459デフォルトの名無しさん
2005/06/21(火) 01:35:40再発明なんて高々一回程度だよ。
古臭いCL使うぐらいなら再発明も悪くないだろう。
0460デフォルトの名無しさん
2005/06/21(火) 02:49:080461デフォルトの名無しさん
2005/06/21(火) 06:49:580462デフォルトの名無しさん
2005/06/22(水) 16:59:02(define (reverse lst)
(if (null? lst)
'()
(cons (reverse (cdr lst)) (car lst))))
こうやるとペアになってしまいます。
(reverse '(1 2 3))
((3 2) . 1)
(3 2 1)となるやつをおしえてください。
0463デフォルトの名無しさん
2005/06/22(水) 17:29:150464デフォルトの名無しさん
2005/06/22(水) 17:42:55↓わかりやすい例
(define (my-reverse lst)
(if (null? lst)
'()
(append (my-reverse (cdr lst)) (list (car lst)))))
↓より効率の良い例
(define (my2-reverse lst)
(my2-reverse-1 lst '()))
(define (my2-reverse-1 lst done)
(if (null? lst)
done
(my2-reverse-1 (cdr lst) (cons (car lst) done))))
0465デフォルトの名無しさん
2005/06/22(水) 17:48:54そりゃ効率が悪いよ。append で同じリストを何回もコピーしてしまう。
こっちの方がいいと思う。
(define (my-reverse list0)
(let loop ((list0 list0)
(result '()))
(if (null? list0)
result
(loop (cdr list0)
(cons (car list0) result)))))
0466465
2005/06/22(水) 17:50:23私のはローカル関数を使って一つにまとめたバージョンということで。
0467デフォルトの名無しさん
2005/06/22(水) 18:41:55他の言語だとしょーもないライブラリ関数や自作関数で
限定的にやるしかないんだよね。
やっぱ年季が違うなあ。
LISPすごい。
0468デフォルトの名無しさん
2005/06/22(水) 19:39:230469デフォルトの名無しさん
2005/06/22(水) 19:54:52(setf (symbol-function 'my-reverse) #'reverse)
0470デフォルトの名無しさん
2005/06/22(水) 20:01:190471デフォルトの名無しさん
2005/06/22(水) 20:04:330472デフォルトの名無しさん
2005/06/22(水) 20:07:530473デフォルトの名無しさん
2005/06/22(水) 20:17:37これって Common Lisp だとどう書くのがスマートなんでしょうか?
0474462
2005/06/22(水) 21:09:290475デフォルトの名無しさん
2005/06/23(木) 06:31:50(let loop ((list0 list0)
(result0 '()))
(if (null? list0)
result0
(let ((result1 (loop (cdr list0) list0)))
(set-cdr! list0 result0)
result1))))
0476デフォルトの名無しさん
2005/06/23(木) 06:49:080477デフォルトの名無しさん
2005/06/23(木) 07:32:300478デフォルトの名無しさん
2005/06/23(木) 08:15:37(let loop ((l lst) (r '()))
(if (null? l)
r
(let ((l1 (cdr l)))
(set-cdr! l r)
(loop l1 l)))))
0479デフォルトの名無しさん
2005/06/23(木) 19:25:490480デフォルトの名無しさん
2005/06/25(土) 06:39:470481デフォルトの名無しさん
2005/06/27(月) 04:36:050482デフォルトの名無しさん
2005/06/27(月) 22:50:00私はラムダ計算の変数の、自由変数と束縛変数による影響だと思った
のですが。
0483デフォルトの名無しさん
2005/06/27(月) 22:58:18それに対するアンチテーゼというか実験としてSchemeという言語が作ら
れたような節はあるね。その後Common Lispにも採用されてLisp界全体
でもレキシカルスコープが主流になるわけだが。
0485デフォルトの名無しさん
2005/06/28(火) 08:54:21尋ねた人によると、「レキシカルスコープは実行速度が遅い」といったそうな。
昔の話。
0486デフォルトの名無しさん
2005/06/28(火) 09:22:24結構人も集まってて、熱心な若者Lisperも結構いたのに驚いたとか。
bioinformatics系のアプリが結構多くて、時代の流れを感じたとか。
当日proceedingsが配布されたけど、後日、
http://www.international-lisp-conference.org
から販売するそうな。
0487デフォルトの名無しさん
2005/06/28(火) 12:56:20質問させてください。
;;; 例-A ----------------------------------------
A1> (define foo begin)
A2> (define bar (lambda (a b c) (foo a b c)))
A3> (bar #t 0 1)
;;==> 1
A4> (define foo list)
A5> (bar #t 0 1)
;;==> 1
;;; 例-B ----------------------------------------
B1> (define foo (lambda (m) (- m 3)))
B2> (define bar (lambda (n) (foo n)))
B3> (bar 10)
;;==> 7
B4> (define foo (lambda (m) (+ m 3)))
B5> (bar 10)
;;==> 13
例-Aのほうは、fooをtop-levelで再定義(A4)しても、
barを呼び出したとき(A5)には、手続き定義時(A2)の
環境が使われています。
これはstatic scopeの考え方からすると当然だと
思えるようになりました。
ところが、例-Bのほうは、
fooを再定義(B4)すると、手続き呼び出し時(B5)には
手続き定義時(B2)のfooではなく、再定義されたfooが
使われています。
この違いは何でしょうか?
0488487
2005/06/28(火) 13:00:37static scopeではなくて、lexical scopeでした。
0489デフォルトの名無しさん
2005/06/28(火) 13:20:54変数が既に束縛されている場合の top level での define は set! と同等な
ので例-B が妥当。例-A は A1 で変数に syntax を代入してるけど、変数経由
で syntax を使用した場合の動作は未定義のはず。たぶんその処理系では foo
も syntactic keyword になって、かつ A2 の段階で展開されてしまってるん
じゃないかと思う。
0490487
2005/06/28(火) 13:52:58ありがとうございます。
> 変数経由で syntax を使用した場合の動作は未定義のはず。
これって、どこかに書いてありますか?
書いてないから未定義なのかな?
ここらへんのことをよく知りたいと思っているのですが、よい
資料はありますでしょうか?
0491デフォルトの名無しさん
2005/06/28(火) 17:17:51>これって、どこかに書いてありますか?
>書いてないから未定義なのかな?
おれは489ではないのだがちょっと失礼する
R5RSの5.2 Definitionsによれば、定義は
(define <variable> <expression>)
でもって7.1.3. Expressionsにはsyntactic keywordが<expression>になる記述は無い。
だから、(define foo begin)はR5RS的には有効ではないと思われる(例えばPLTとかchezとかはシンタックスエラーとなる)
しかし1.3.2 Error situations and unspecified behaviorによれば処理系にそのエラーの報告義務は無い。
つまり動作は未定義で処理系依存でよいということであり、(define foo begin)などが通る場合は処理系独自の拡張の結果という事だと考えて良いと思うんだけど.......これでいいのかな?皆の衆
0492487
2005/06/28(火) 20:17:38なるほどR5RSはそういう読み方をしなければいけないんですね。
私が試した処理系のほとんど(kawa,guile,gosh)では
>>487例-Aのようになったので、そうあるべきなのかと思いこんでいました。
唯一biglooと個人的に使っているマイナーな処理系では
同様のコードを読ませると、手続き定義後の変更も反映されて
A3>==> 1
A5>==> (#t 0 1)
となります。
厳密にはエラーなんですね。
489さん、491さん、ありがとうございました。
0493デフォルトの名無しさん
2005/06/30(木) 05:47:08http://lemonodor.com/archives/001177.html
0494デフォルトの名無しさん
2005/07/02(土) 08:50:26日本人もたくさん参加してたのかな?
0495デフォルトの名無しさん
2005/07/03(日) 21:51:02入れ子のリストの中身を調べて
最も大きい値を返す関数の定義という問題なのですが、
例えば(al-max'((1 3)((9)4)))を与えた時9を返すような
定義を教えて頂きたいのですが。
どのようにすれば良いのでしょうか?
入れ子を考えなければ
(defun max1(x)(cond((null (cdr x))(car x))((<= (max1(cdr x))(car x))(car x))(t(max1(cdr x)))))
このようになるんですけど。入れ子だと良く分かりません。
0496デフォルトの名無しさん
2005/07/03(日) 22:13:31scheme だけど。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#lambda
fold-tree っぽいものは標準であってもいいような気がするんだけどなあ。
0497495
2005/07/03(日) 22:32:44ありがとうございます。
サイト見ましたが高級関数を定義とか
ユーティリティ関数とかさっぱり分かりません。
具体的にはどうすればいいですかね?
0498デフォルトの名無しさん
2005/07/03(日) 22:45:38(cond ((numberp lst) lst)
((null (cdr lst))
(al-max (car lst)))
(t (max (al-max (car lst))
(al-max (cdr lst))))))
0500デフォルトの名無しさん
2005/07/03(日) 23:01:11(if (listp x) (apply #'max (mapcar #'al-max x)) x))
0501495
2005/07/03(日) 23:05:490502デフォルトの名無しさん
2005/07/03(日) 23:08:350503デフォルトの名無しさん
2005/07/03(日) 23:09:260504デフォルトの名無しさん
2005/07/04(月) 00:03:01そうですね、ありがとうございました。
0505デフォルトの名無しさん
2005/07/04(月) 00:55:210506デフォルトの名無しさん
2005/07/04(月) 06:08:070507デフォルトの名無しさん
2005/07/04(月) 22:26:420508デフォルトの名無しさん
2005/07/04(月) 22:59:590509デフォルトの名無しさん
2005/07/05(火) 00:24:57何のためにって・・・Lispがネイティブに落ちるなら色々使えるじゃん。
いつまでもウニ系しか使えないからLispはマイナーなんだよ
0510デフォルトの名無しさん
2005/07/05(火) 00:59:050511デフォルトの名無しさん
2005/07/05(火) 01:05:160512デフォルトの名無しさん
2005/07/05(火) 04:50:41お前の頭のねじれ具合は笑えるな。すげーおもしれえ。ちょーうけた。さいこー。
0513デフォルトの名無しさん
2005/07/05(火) 04:54:270514デフォルトの名無しさん
2005/07/05(火) 17:23:06Schemeの手続きとそのスコープについて教えてください。
たとえば
[ソースコード]------------------------------------------------------------
.1: (define a_proc
.2: (lambda (n k)
.3: (if (null? n)
.4: ; true-clause
.5: (begin
.6: (newline)
.7: (write 'true-clause) (newline)
.8: (write 'n=) (write n) (newline)
.9: (write 'k=) (write k) (newline)
10: (k '()))
11: ; false-clause
12: (begin
13: (newline)
14: (write 'false-clause) (newline)
15: (write 'n=) (write n) (newline)
16: (write 'k=) (write k) (newline)
17: (a_proc (cdr n)
18: (lambda (u)
19: (write 'n=) (write n) (newline)
20: (write 'k=) (write k) (newline)
21: (write 'u=) (write u) (newline)
22: (k (append n u))))))))
23: (a_proc '(a) (lambda (x) x))
というコードを処理系に読ませると、
0515デフォルトの名無しさん
2005/07/05(火) 17:24:47[出力結果]----------------------------------------------------------------
.1> false-clause
.2> n=(a)
.3> k=#<closure (x) x>
..>
.4> true-clause
.5> n=()
.6> k=#<closure (u)
..> (write (quote sub-clause)) (newline) \
..> (write (quote k=)) (write k) (newline) \
..> (write (quote n=)) (write n) (newline) \
..> (write (quote u=)) (write u) (newline) \
..> (k (append n u))>
..>
.7> n=(a)
.8> k=#<closure (x) x>
.9> u=()
10> (a)
のような結果が得られます。
0516デフォルトの名無しさん
2005/07/05(火) 17:26:14ソースコードは末尾再帰になっているので、
a_procのスコープは呼び出しにかかわらず単一であると考えると、そのスコープ内で
2>〜3>で表示されている最初の束縛関係が、一度5>〜6>のように変更されています。
ところが、18:〜22:で内部手続きを作成すると、そこでは、
変更されたの束縛関係(5>〜6>)ではなく最初の束縛関係(7>〜8>)に戻っています。
R5RS 4.1.4 Procedures には
The environment in effect when the lambda expression was evaluated is
REMEMBERED as part of the procedure.
とあります。
この「REMEMBER」という語は「そのScopeへの参照を記憶する」ことを意味すると
理解していたのですが、上の実験結果を見る限り
「そのScopeを元に作成した複製を保持する」と解釈すべきなのでしょうか?
全く思い違いをしているかもしれません。ご指摘ください。
0517デフォルトの名無しさん
2005/07/05(火) 18:23:24せいで予想と違ってしまうようだ。
0518デフォルトの名無しさん
2005/07/05(火) 19:25:05間違えている前提を指摘してください。
お願いします。
0519デフォルトの名無しさん
2005/07/05(火) 19:54:140520デフォルトの名無しさん
2005/07/05(火) 19:58:53それとも「a_procのスコープは単一ではない」ということでしょうか。
0521デフォルトの名無しさん
2005/07/05(火) 20:16:380522デフォルトの名無しさん
2005/07/05(火) 21:52:01末尾再帰とスコープを関連づけているのはなぜですか
0523本田
2005/07/05(火) 22:54:51> KCLは20年前からネイティブコードで走ってるけど、何か?
KCLのコンパイラはC言語にコンパイルするはず。
0524デフォルトの名無しさん
2005/07/05(火) 22:58:46C にしない処理系でも IL に変換されたりするし、C にコンパイルしていても
最終的にネイティブコードになる事には変わりない。
0525デフォルトの名無しさん
2005/07/05(火) 23:34:23疑問に思ったのがこのコードを実行してみてだったので、
そのまま質問してしまいました。
末尾再帰は直接関係ありません。
手続きを定義するときにその手続きは定義時の環境を「覚えて」いて、
手続きを呼び出したときにはその環境内で手続きが評価される、と
理解しています。
514の質問の意図は、作られた手続きが保持しているものが
(1)手続き作成時の環境そのもの(シンボルテーブルなど環境内の要素を含む)
なのか、
(2)手続き作成時の環境への参照またはポインタ
でよいのか、についての答えをいただきたいということでした。
(2)でよいと思っていたのですが、もしそうだとすると、>>514の例では
手続き18:の環境は手続き2:と共有されるために、束縛関係が書き換えらてしまい、
実際の結果の説明ができません。
ということは、手続き定義時には、そのときの環境が複製され、
定義された手続き固有の(他の手続きなどからアクセスできない)
環境となって保持される、ということでよいのでしょうか。
0526デフォルトの名無しさん
2005/07/05(火) 23:42:520527デフォルトの名無しさん
2005/07/06(水) 00:20:41参照とかポインタとか複製とか実装の観点から考えないほうがいいですよ
文字通り「字面上の」スコープに縛られるんです
; それをどう実装するかは別の話
0528デフォルトの名無しさん
2005/07/06(水) 02:35:31それが何か?
0529デフォルトの名無しさん
2005/07/06(水) 02:37:20>>521 を勉強汁
0530デフォルトの名無しさん
2005/07/06(水) 02:43:080531デフォルトの名無しさん
2005/07/06(水) 03:33:240532デフォルトの名無しさん
2005/07/06(水) 04:58:040533デフォルトの名無しさん
2005/07/06(水) 09:02:31>SICPに載ってる環境モデルでええやん
知りたかったのはまさにこれです。
ありがとうございました。
0534デフォルトの名無しさん
2005/07/06(水) 17:37:370535デフォルトの名無しさん
2005/07/06(水) 18:22:400536デフォルトの名無しさん
2005/07/06(水) 18:25:040538デフォルトの名無しさん
2005/07/07(木) 20:09:49Structure And Interpretation Of Computer Programs
すとらくちゃーあんどいんたーぷりてーしょんおぶこんぴゅーたぷろぐらむす
コンピュータープログラムの構造と解釈
略してSICPという。
え?
SAIOCPじゃないの?
AとOはどこいったよ?
なあ?
普通わかんねーよなあ
ところで
SICPって何て読むか知ってるか?
俺は知らないが
しくぷとか発音すると馬鹿にされそうで
恐い
0539デフォルトの名無しさん
2005/07/07(木) 20:17:20俺の脳内ではシックピーって読んでるよ。
0540デフォルトの名無しさん
2005/07/07(木) 20:19:360541デフォルトの名無しさん
2005/07/07(木) 20:22:23間違えて書き込むボタン押しちゃったよ
こういうのは本来書き込むべき内容ではなかったが、
名無しだからいいやと思ってしまうな
匿名って恐いな
2chにいるとどんどんクズ人間になっていく気がする
おれのこと軽蔑した?
悪かったよごめんな
0542デフォルトの名無しさん
2005/07/07(木) 20:49:050543デフォルトの名無しさん
2005/07/07(木) 20:50:130544デフォルトの名無しさん
2005/07/07(木) 20:59:230545デフォルトの名無しさん
2005/07/08(金) 13:25:12前置詞もな
あと冠詞
他に何かあったっけ?
SICPよりも LISP の方がわかりにくい。
LISt Processor
0546デフォルトの名無しさん
2005/07/08(金) 14:30:34John Unger Zussman が冗談で作った架空言語。
1982年Infoworldが出した「あまりよく知られていない言語」という書籍の面白言語リストに掲載され、
後にUsenetに投稿された。この架空言語の本質は、「もしLisperのキーボードに"S"が無かった」という発想である
0547デフォルトの名無しさん
2005/07/08(金) 14:34:42まあ算盤も広い意味では計算機だがな
0548デフォルトの名無しさん
2005/07/08(金) 23:38:15(p'((1)2 3))
とすると
1 2 3
と表示する、括弧を取り除いて表示するような
関数pはどのように定義すればよいのでしょう?
0549デフォルトの名無しさん
2005/07/08(金) 23:38:450550デフォルトの名無しさん
2005/07/08(金) 23:46:19(defun p (x)
(if (listp x)
(mapcan #'p x)
(list x)))
0551デフォルトの名無しさん
2005/07/08(金) 23:54:24ありがとうございます!
mapcanと#の意味がわからないんですけど
これはどういうことですか?
0552デフォルトの名無しさん
2005/07/08(金) 23:58:27Common Lisp 勉強汁
0553デフォルトの名無しさん
2005/07/08(金) 23:59:42mapcanはmapcarと同じ動作をした後に各館数の返り血をappendで連結した物を返す関数。
#`はそのシンボルを関数として扱うという意味。
0554デフォルトの名無しさん
2005/07/09(土) 00:04:19よくわかりました。
本当にありがとうございました。
0555デフォルトの名無しさん
2005/07/09(土) 00:06:49重箱の隅ですまんが append ではなく nconc、#` ではなく #' だね。
0556デフォルトの名無しさん
2005/07/09(土) 02:43:36つか、明らかに荒らしだよなこいつの質問は。
0557デフォルトの名無しさん
2005/07/09(土) 02:44:24(defun p (x)
(if (null x) '()
(if (consp (car x))
(append (p (car x))
(p (cdr x)))
(cons (car x)
(p (cdr x))))))
0558デフォルトの名無しさん
2005/07/09(土) 03:01:55(define (p x)
(if (list? x)
(apply append (map p x))
(list x)))
0559デフォルトの名無しさん
2005/07/09(土) 03:49:560560デフォルトの名無しさん
2005/07/09(土) 09:51:51(cond ((null x) '())
((consp x)
(nconc (p (car x))
(p (cdr x))))
(t (cons x '()))))
(p '((x . y) (x)))
0561デフォルトの名無しさん
2005/07/09(土) 16:49:29静的関数型言語方面じゃ型推論と同じなノリで、
破壊しても問題ないと推論される場合には破壊的にやっちゃうようなコードを吐かせよう、
みたいなことやってるみたいね。
ttp://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap9.html
0562デフォルトの名無しさん
2005/07/09(土) 19:21:50うまいこと宿題やってもらえて良かったね。
0563デフォルトの名無しさん
2005/07/09(土) 21:46:39みたいなことがANSI Common Lisp(P. Graham)に書いてあったんだけど、そんなもんなのかね。
どうしたらそうなるのか見当もつかないんだが。
0564デフォルトの名無しさん
2005/07/09(土) 22:03:440565デフォルトの名無しさん
2005/07/09(土) 22:15:140566デフォルトの名無しさん
2005/07/10(日) 00:09:200567デフォルトの名無しさん
2005/07/10(日) 00:14:17cmuclで動かそうとしたんだけどパッチすらあたらなかった。
うまく動作してる人いない?
0568デフォルトの名無しさん
2005/07/10(日) 02:21:43ああっ、それいいなあ。
LISP と関数型言語の差って、何でも自分でいじれるオフロード車と、外装内
装に便利なものが作り込まれたタウンカーの差みたいなものかな。
0569デフォルトの名無しさん
2005/07/11(月) 22:48:53メリットとかデメリットとか教えて欲しい。
0570デフォルトの名無しさん
2005/07/11(月) 23:08:22メッセージ駆動モデルって何?
0571デフォルトの名無しさん
2005/07/12(火) 00:21:25メソッドはオブジェクトに属していて、オブジェクトにメッセージを送ることでメソッドが活性化される。
メソッドはデータと一緒に継承される。
SmalltalkとかJavaとかはメッセージ駆動モデルなんだって。
0572デフォルトの名無しさん
2005/07/12(火) 00:29:570573デフォルトの名無しさん
2005/07/12(火) 02:54:29John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart and Michael I. Levin.
LISP 1.5 Programmer’s Manual.
The M.I.T. Press, 1962, second edition.
http://community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
Berkeley and Bobrow, editors.
The Programming Language LISP: Its Operation and Applications.
Information International, Inc., March 1964 and The MIT Press, April 1966.
http://community.computerhistory.org/scc/projects/LISP/book/III_LispBook_Apr66.pdf
0574デフォルトの名無しさん
2005/07/12(火) 03:50:45そういう話は無益だから止めれ
Java にメッセージ式は無い
Smalltalk のメソッドはクラスに属している(クラスもオブジェクトだけど)
0575デフォルトの名無しさん
2005/07/12(火) 09:17:120576デフォルトの名無しさん
2005/07/12(火) 17:19:47その分、メソッドが特定のクラス(やオブジェクト)に属さないのでオブジェクト指向モデリングとやや相性が悪い。
総称関数の方ができることが多い(いや、究極的にはできることは同じだけどやり易さとして)けど、オブジェクト指向とはちょっと考え方が違う感じ。メッセージモデルの方がオブジェクト指向らしい。
もっと計算理論的な話は別の人に任す。
0577デフォルトの名無しさん
2005/07/12(火) 21:51:56多くのOO言語では、静的な解決しかできない。
総称関数ベースなら、呼び出された時の型を見て動的に処理を割り振ることができる。
これがメリット?
0578デフォルトの名無しさん
2005/07/12(火) 22:15:42マルチディスパッチと動的ディスパッチは一応別の問題だよね。
Smalltalkなんかはシングルの動的ディスパッチじゃないかな。
静的なマルチディスパッチの例としてはC++の関数や演算子ね。
0579デフォルトの名無しさん
2005/07/12(火) 22:20:22ってな話だと、>>578とは違うんじゃないかなぁ〜。
0580デフォルトの名無しさん
2005/07/12(火) 22:39:20>多くのOO言語では、静的な解決しかできない。
んな事は無い
0582デフォルトの名無しさん
2005/07/12(火) 22:53:23OO のモデルなんか趣味の世界だから、自分で使って勝手に判断すれば良い
0583577
2005/07/13(水) 00:00:290584デフォルトの名無しさん
2005/07/13(水) 01:03:280585デフォルトの名無しさん
2005/07/13(水) 02:14:15総称関数だといくつかのクラスにまたがった複数引数をとるメソッドがかける
ってことか
0586デフォルトの名無しさん
2005/07/14(木) 15:03:45> Our Scheme evaluator register machine includes a stack and
> seven registers: exp, env, val, continue, proc, argl, and unev.
とあるのですが、unevという名前の意味や由来は何なのでしょうか?
他のものは一目瞭然なのですが、unevだけ全く見当がつきません。
0587デフォルトの名無しさん
2005/07/14(木) 15:09:51unevaluated (未評価)かな?
0588586
2005/07/14(木) 19:58:40なるほど!
確かに「後で評価する式を格納しておく」という使い方をされてますから、
それで正解だと思います。ありがとうございました。
ああすっきりした! 今日は気持ちよく眠れる!
0589デフォルトの名無しさん
2005/07/22(金) 14:37:51xn = xm×xm (n = 2m,m >= 1)
= x×xm×xm (n = 2m+1,m >= 0)
= 1 (n = 0)
これを利用して,xnを計算する2引数関数pow2を定義せよ.なお,再帰呼び出しの回数をできるだけ減らすようにすること.
これ教えてもらえませんでしょうか…
解答例をお願いします。。。
0590589
2005/07/22(金) 14:41:150591デフォルトの名無しさん
2005/07/22(金) 15:03:500592デフォルトの名無しさん
2005/07/22(金) 15:27:500593デフォルトの名無しさん
2005/07/22(金) 15:39:490594デフォルトの名無しさん
2005/07/22(金) 15:55:590595589
2005/07/22(金) 16:02:100596デフォルトの名無しさん
2005/07/22(金) 16:14:52出来ないことを色々考えて出来るようになるのが学生の仕事だろ?
ロクに考えもせずに答教えろとか言う奴は単位なぞ落としてしまえ。
0597デフォルトの名無しさん
2005/07/22(金) 16:36:440598デフォルトの名無しさん
2005/07/22(金) 18:16:05・なつやすみのしゅくだいは、じぶんでやりましょう。
0599?デフォルトの名無しさん
2005/07/22(金) 22:03:21>再帰呼び出しの回数をできるだけ減らすようにすること
ってのはどんなんだろうね?
再帰をなるべく末尾再帰にしろってんならいいんだけど。
0600デフォルトの名無しさん
2005/07/22(金) 23:29:41積なの?意味がわからない。
0601デフォルトの名無しさん
2005/07/22(金) 23:43:500602600
2005/07/22(金) 23:45:570603ビッケ ◆Jyl0Z1ahKc
2005/07/22(金) 23:52:54「再帰呼び出しの回数」については、設問中のベキ乗の定義を見ると
再帰呼び出しのネスティングの深さのことを言ってるのかも知れませんね。
その授業(?)でそういうことを扱った直後の演習問題とか。
「できるだけ」なんていわれても困るけど、設問中の定義に従って
ネスティングの深さがO(log n)となる定義を書けばOKということなのかも。
0604デフォルトの名無しさん
2005/07/23(土) 00:02:33かもしれんが、ここまで露骨に「宿題やって」だと誰も答えてくれんわな。
0605デフォルトの名無しさん
2005/07/23(土) 00:12:28末尾再帰も無理っぽい。
結局、let (let*) で途中経過をまとめるぐらいしかできないよ。こまった。
0606デフォルトの名無しさん
2005/07/23(土) 00:19:22おまいら小学生ならもっと頭を使おうぜ。w
0607デフォルトの名無しさん
2005/07/23(土) 00:19:34(let loop ((x x) (n n) (r 1))
(if (= n 0) r
(loop (* x x) (quotient n 2) (if (even? n) r (* r x))))))
0608デフォルトの名無しさん
2005/07/23(土) 00:33:24きれいだけど、定義から離れすぎてない?
漏れの頭では、>>589 の定義からは、これを自明には導き出せない…。
0609デフォルトの名無しさん
2005/07/23(土) 00:47:05"1" が "×" の単位元でない場合とか "×" が可換でない
場合とかを考えるとちゃんとした証明が必要かも。
0610デフォルトの名無しさん
2005/07/23(土) 01:58:590611デフォルトの名無しさん
2005/07/23(土) 02:10:26>>589 をそのまま実装すると
(define (pow2 x n)
(if (= n 0) 1
(let ((x1 (pow2 x (quotient n 2))))
(* x1 x1 (if (even? n) 1 x)))))
x^n * x^n = (x * x)^n だから
(define (pow2 x n)
(if (= n 0) 1
(* (pow2 (* x x) (quotient n 2)) (if (even? n) 1 x))))
末尾再帰に変換して >>607
0612デフォルトの名無しさん
2005/07/23(土) 02:30:33ありがとう。おかげで疑問点がはっきりしてきました。
x^n * x^n = (x * x)^n って、使っていいの?
我々は pow2 が累乗を返す関数だと知っているから、この変形は自然に見えるけど、
この問題で使っていいのは、あくまで
pow2(x, 2n) = pow2(x, n) * pow2(x, n)
pow2(x, 2n + 1) = x * pow2(x, n) * pow2(x, n)
pow2(x, 0) = 1
の3式だけではないんだろうか?
0613デフォルトの名無しさん
2005/07/23(土) 02:53:57pow2(x * x, n) = pow2(x, n) * pow2(x, n) は自明ではないな。
0614デフォルトの名無しさん
2005/07/23(土) 03:24:590615デフォルトの名無しさん
2005/07/23(土) 03:43:39pow2(x, 0) * pow2(x, 0) = pow2(x * x, 0) = 1
pow2(x, n) * pow2(x, n) = pow2(x * x, n) とすると
定義より pow2(x, n + 1) = x * pow2(x, n) (これも証明する?) なので
pow2(x, n + 1) * pow2(x, n + 1) = x * pow2(x, n) * x * pow2(x, n)
= (x * x) * (pow2(x, n) * pow2(x, n)) = (x * x) * pow2(x * x, n)
= pow2(x * x, n + 1)
以上から数学的帰納法により pow2(x, n) * pow2(x, n) = pow2(x * x, n)
0616デフォルトの名無しさん
2005/07/23(土) 05:11:48数学的帰納法を使ったら pow2 の一般項 =x^n だって証明できてしまうと思われ。
そもそも関数の再帰的定義とは数学的帰納法を機械にやらせることなのに、
それを人間がやってしまったら本末転倒ではないかと。
0617デフォルトの名無しさん
2005/07/23(土) 06:39:58x^2n = x^n * x^n
x^(2n+1) = x * x^n * x^n
x^0 = 1
となる性質を使えって条件があるだけで。
0618デフォルトの名無しさん
2005/07/23(土) 10:34:49s(0,x)=0
s(2n,x)=2*s(n,x)
s(2n+1,x)=2*s(n,x)+1
ここまで見ると何となく s(n,x)=n になりそうな事が見えて来るが、
帰納法を使わず直観的に考えてみる。
s(n,x)の",x"を以後省略することとし、
nの2進表記を b_n...b_1b_0 とすると
s(b_n...b_1b_0)
=2*s(b_n...b_1)+b_0
=4*s(b_n...b_2)+2*b_1+b_0
...
=2^n*b_n+...+2*b_1+b_0
すなわち s(n)=n となる。
よって pow2(x,n)=x^n である。
故に>>614
0619デフォルトの名無しさん
2005/07/24(日) 19:52:580620デフォルトの名無しさん
2005/07/24(日) 20:17:310621デフォルトの名無しさん
2005/07/24(日) 21:58:13(define (expt x n) (exp (* (log x) n))) な実装もアリ。
だから処理系に依存せずに EXACT ^ INTEGER => EXACT が欲しければ
自前で書くしかない。
Common Lisp だと (expt RATIONAL INTEGER) => RATIONAL が保証
されてるのに……
0622デフォルトの名無しさん
2005/07/25(月) 08:43:33ふが〜 おれ (expt 2 128) とかがEXACT INTEGERで正確に得られることを期待してコード書いてたけど、これ処理系依存になっちまうのか....いたいぜ。
0623デフォルトの名無しさん
2005/07/25(月) 08:53:40意味不明。(略)が(おれは無知です)の意味ならどうでもいいけど。
0624デフォルトの名無しさん
2005/07/25(月) 09:04:10an exact integer result provided all their arguments are exact
integers and the mathematically expected result is representable
as an exact integer within the implementation:" の中にある。
0625デフォルトの名無しさん
2005/07/25(月) 10:30:530626デフォルトの名無しさん
2005/07/25(月) 17:31:11強制終了させるにはどうしたらいいんですか?
0627デフォルトの名無しさん
2005/07/25(月) 17:32:570628デフォルトの名無しさん
2005/07/25(月) 17:37:21強制終了の仕方を教えてください
0629デフォルトの名無しさん
2005/07/25(月) 18:03:19間違ってる可能性が高いよ。
開発者なら、どういう言語のどういう処理系を使っていて、
どういう風に大域脱出したいのかを説明しないと。
けど、その前に近くにいる人に聞きなさい。それができない
なら電源をいきなり切ってボスに辞表を叩きつければ、仕事を
強制終了できるよ。
0630デフォルトの名無しさん
2005/07/25(月) 20:12:540631デフォルトの名無しさん
2005/07/25(月) 20:15:080632デフォルトの名無しさん
2005/07/26(火) 23:14:30exptは浮動小数でも動くから、pow2がexptを高速化するという命題は
常に成り立たないということだよカス。
0633デフォルトの名無しさん
2005/07/27(水) 01:54:37証明できるor反例ある?
0634デフォルトの名無しさん
2005/07/27(水) 02:15:48それくらい瞬間的にわからないというのはちょっとヤバイのでは。
pow2(x, n)=x^nについて考える。末端リーフがn個の二分木を考えてみろ。
二分木で高さが最小になるのはなるべく均等な木のときであることはわかるだろう。
その二分木の高さイコール乗算の回数だ。
0635デフォルトの名無しさん
2005/07/27(水) 02:42:10>>634はnが奇数のときは2を掛けるから偶数のときで乗算の数が違う
ということを見落としてた。
(^ x 9) = (* x (let ((y (^ x 4))) (* y y))) => 6回
(^ x 4) = (let ((y (^ x 2))) (* y y))) => 4回
(^ x 2) = (let ((y (^ x 1))) (* y y))) => 3回
(^ x 1) = (* x (let ((y (^ x 0))) (* y y))) = x ;; ちょっと省略 => 2回
(^ x 7) = (* x (let ((y (^ x 3))) (* y y))) => 6回
(^ x 3) = (* x (let ((y (^ x 1))) (* y y))) => 4回
(^ x 1) = x => 2回
0636デフォルトの名無しさん
2005/07/27(水) 04:38:27(define (pow2 x n)
(define (pow2-sub l m r)
(if (= m 0) r
(let loop ((l l))
(if (> (caar l) m) (loop (cdr l))
(pow2-sub (cdr l) (- m (caar l)) (* (cdar l) r))))))
(if (= n 0) 1
(let loop ((m 1) (two^prevm 1) (two^m 2) (r x) (l (list (cons 1 x))))
(if (<= two^m n)
(let ((rr (* r r)))
(loop (+ m 1) two^m (+ two^m two^m) rr (cons (cons two^m rr) l)))
(pow2-sub l (- n two^prevm) r)))))
0637デフォルトの名無しさん
2005/07/27(水) 04:45:26n=0 r=1 [OK] *-count=0
n=1 r=3 [OK] *-count=0
n=2 r=9 [OK] *-count=1
n=3 r=27 [OK] *-count=2
n=4 r=81 [OK] *-count=2
n=5 r=243 [OK] *-count=3
n=6 r=729 [OK] *-count=3
n=7 r=2187 [OK] *-count=4
n=8 r=6561 [OK] *-count=3
n=9 r=19683 [OK] *-count=4
n=10 r=59049 [OK] *-count=4
n=11 r=177147 [OK] *-count=5
n=12 r=531441 [OK] *-count=4
n=13 r=1594323 [OK] *-count=5
n=14 r=4782969 [OK] *-count=5
n=15 r=14348907 [OK] *-count=6
n=16 r=43046721 [OK] *-count=4
n=17 r=129140163 [OK] *-count=5
n=18 r=387420489 [OK] *-count=5
n=19 r=1162261467 [OK] *-count=6
n=20 r=3486784401 [OK] *-count=5
0638デフォルトの名無しさん
2005/07/27(水) 13:21:00とても勉強になるので感謝してます。上のアイデアというか原理は
たとえば 3^20 = (3^4)^5 = ((3^2)^2)^(2*2+1) で5回って意味でしょうか?
……うぅぅ凄すぎて式が追えないorz
0639デフォルトの名無しさん
2005/07/27(水) 20:58:213^20=3^16*3^4 ... 1回
3^16=3^(2^4)=(((3^2)^2)^2)^2 ... 4回
3^4は3^16を求める途中で得られているので0回
合計5回
0640デフォルトの名無しさん
2005/07/27(水) 23:36:310641デフォルトの名無しさん
2005/07/28(木) 00:25:580642デフォルトの名無しさん
2005/07/28(木) 22:57:26最初からそう書けよ。
相手する価値もないヤシだってすぐわかるからさ。
0643638
2005/07/29(金) 04:53:54http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.4
後半の改善策が >>589 と同じ例題で、
;nが偶数なら b^n = (b^(n/2))^2
;nが奇数なら b^n = b*b^(n-1)
解答も >>607 と似てました。これを使った乗算回数は、たとえば
3^20 = (3^10)^2 = ((3^5)^2)^2 = ((3*3^4)^2)^2 = ((3*((3^2)^2))^2)^2
で理屈上は>>636と同じ5回(でも実は末尾で余計に1掛けたりとかで、少し多そう)。
オーダーとしてはどちらも log2(n) で、>>634の話が実は正しいような気がしました
Orders of Growth を理解するための頭の体操とはいえ、疲れた…
まだ木構造リストの演算をきちんと勉強してないので、勘違いしてたらすみません
0644デフォルトの名無しさん
2005/07/29(金) 23:03:590645デフォルトの名無しさん
2005/08/08(月) 17:23:07b
c
d
dd
e
f
g
h
i
j
k
というインデント付きのテキストから
(a b (c (d (dd) e) f g (h (i)) j) k)
というリストを得たいのですが、
どうやったらうまく書けるかいまいちよくわかりません。
再帰を使えばよさそうというのはわかるんですが。
スタックみたいなバッファが必要でしょうか?
ちなみにテキストデータの仕様は
半角2文字インデントで1階層を表現して、
ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。
a, b, c ・・・はシンボルです。
0646デフォルトの名無しさん
2005/08/08(月) 17:35:29((a 0)
(b 0)
(c 2)
(d 4)
(dd 12)
(e 4)
(f 2)
(g 2)
(h 4)
(i 6)
(j 2)
(k 0))
という(シンボル インデント文字数)という組のリストから
(a b (c (d (dd) e) f g (h (i)) j) k)
という形に直すにはどうしたらいい?
ということでお願いします。
逆の変換は簡単にできそうなんですが・・・。
0647デフォルトの名無しさん
2005/08/08(月) 18:28:540648デフォルトの名無しさん
2005/08/08(月) 18:34:19ちなみに25過ぎのおっさんですよ。。
0649デフォルトの名無しさん
2005/08/08(月) 18:46:54頭固くなってるというか、頭悪くなってる。
仮にeまでだとして、
スタックで持ちまわって
((a))
↓
((b a)) ;; 同一インデントはそのままスタック先頭にcons
↓
((c) (b a))
↓
((d) (c) (b a))
↓
((dd) (d) (c) (b a))
↓
((d (dd) e) (c) (b a))
((c (d (dd) e)) (b a))
((a b (c (d (dd) e))))
=> (a b (c (d (dd) e)))
みたいな感じで並べ替えればいいのはなんとなくわかるんだけどね。
肝心のコード思いつかない。
0650デフォルトの名無しさん
2005/08/08(月) 20:39:31(define (port->sp/char/nls iport)
(reverse
(fold
(lambda (x y)
(cond ((eq? x #\newline) (cons '() y))
((null? y) `((,x)))
(else (cons `(,@(car y) ,x) (cdr y)))))
'()
(port->list read-char iport))))
(define (proc arg)
(let lp ((rest arg)
(temp '())
(result '()))
(if (null? rest)
(reverse (if (null? temp) result `(,(proc temp) ,@result)))
(let ((node (car rest)))
(case (length node)
((0) (if (null? temp)
(lp (cdr rest) '() result)
(lp (cdr rest) '() `(,(proc (reverse temp)) ,@result))))
((1) (if (null? temp)
(lp (cdr rest) '() `(,(car node) ,@result))
(lp (cdr rest) '() `(,(car node) ,(proc (reverse (cons (cdr node) temp))) ,@result))))
(else
(lp (cdr rest) `(,(cdr node) ,@temp) result)))))))
0651デフォルトの名無しさん
2005/08/08(月) 20:40:04b
c
d
dd
e
f
g
h
i
j
k")))
=>
(#\a #\b (#\c (#\d (((((#\d))))) #\e) #\f #\g (#\h (#\i)) #\j) #\k)
0652デフォルトの名無しさん
2005/08/08(月) 21:04:450653デフォルトの名無しさん
2005/08/08(月) 21:07:47> ↓
> ((d (dd) e) (c) (b a))
ここがよく分からない.eを新たにプッシュするときに,どうしてdはeと同じ
リストに含めて,ddは1つネストしたリストに入っているの? もっと言えば,
(c)や(a b)はd,ddと全く別の扱いを受ける必然性もないように見える.
要するに,リストのネストの深さを保存してないよ,ってこと.
0654デフォルトの名無しさん
2005/08/08(月) 21:59:58b
c
d
dd
ee
e
f
g
h
i
j
k
とかなってたらeeはどうするのか? ということを考えると
>ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。
はよろしくないんじゃないかな。それとも構文エラー?
0655デフォルトの名無しさん
2005/08/08(月) 22:16:21インデントの情報も付加して説明すると、
(((a) 0)) ;; インデント0の組
↓
(((b a) 0)) ;; 同一インデントはそのままスタック先頭にcons
↓
(((c) 2) ((b a) 0)) ;; インデント2>0なので新規にスタック追加
↓
(((d) 4) ((c) 2) ((b a) 0)) ;; インデント4>2なので新規にスタック追加
↓
(((dd) 12) ((d) 4) ((c) 2) ((b a) 0)) ;; インデント12>4なので新規にスタック追加
ここで(e 4)がくると(d 4)までスタックを撒き戻すという意味です。
撒き戻すついでにreverseして整える。
↓
(((d (dd) e) 4) ((c) 2) ((b a) 0))
さらにeが終端なので連鎖して撒き戻し&reverseが発生する
(((c (d (dd) e)) 2) ((b a) 0))
↓
(((a b (c (d (dd) e))) 0))
=> (a b (c (d (dd) e)))
それで結果がこうなればいいんじゃないか、ということです。
でも 2 -> 12 -> 4とかのパターンだと
12を4とみなすとか例外作らないとだめかなあ。
>>650
早速ありがとうございます。
コード研究してみます。
0656デフォルトの名無しさん
2005/08/08(月) 22:18:33上にも書いたけど、それさっき気づきました。
やっぱ インデント構造はそのまま保持して、
後から遊びを修正するようにした方が利口かもしれない。
0657デフォルトの名無しさん
2005/08/08(月) 22:37:15「ぶら下がる親があいまい」とかで。
様式的に654の様なケースはありえなさそうだし。
0658デフォルトの名無しさん
2005/08/10(水) 22:19:54(define (proc arg)
(let loop ((rest arg) (temp '()) (result '()))
(if (null? rest)
(reverse (if (null? temp) result `(,(proc (reverse temp)) ,@result)))
(let ((node (car rest)))
(if (< (car node) 2)
(loop (cdr rest) '()
(if (null? temp)
`(,(cadr node) ,@result)
`(,(cadr node) ,(proc (reverse temp)) ,@result)))
(loop (cdr rest)
`(,(cons (- (car node) 2) (cdr node)) ,@temp) result))))))
(proc '((0 a) (0 b) (2 c) (4 d) (12 dd) (4 e) (2 f) (2 g) (4 h) (6 i) (2 j) (0 k) (2 m)))
=>(a b (c (d ((((dd)))) e) f g (h (i)) j) k (m))
(< (car node) 2)の箇所はインデント幅が奇数だったら小さい側へ切捨てる処置です。
0659デフォルトの名無しさん
2005/08/10(水) 22:28:19(define (read-indent-text)
(define (space-count str)
(let ((len (string-length str)))
(let loop ((i 0))
(if (and (< i len) (char=? (string-ref str i) #\space))
(loop (+ i 1))
i))))
(let loop ((str (read-line)) (r '()))
(if (eof-object? str)
(reverse r)
(let ((pos (space-count str)))
(loop (read-line)
(cons (list pos (substring str pos)) r))))))
----ind.txt----
root1
abc
def
gef
aaa
bbb
ccc
root2
aaa
----ind.txt----
(proc (with-input-from-file "ind.txt" (read-indent-text)))
=>("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa"))
こんな感じになりました。
0660デフォルトの名無しさん
2005/08/10(水) 22:48:55(define (ind-pp s . indent)
(define (spaces n)
(if (zero? n) #t (begin (write-char #\space) (spaces (- n 1)))))
(set! indent (if (pair? indent) (car indent) 0))
(let loop ((x s))
(if (pair? x)
(if (pair? (car x))
(begin
(indent-pp (car x) (+ indent 2))
(loop (cdr x)))
(begin
(spaces indent) (display (car x)) (newline)
(loop (cdr x))))
#t)))
(ind-pp '("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa")))
root1
abc
def
gef
aaa
bbb
ccc
root2
aaa
=>#t
結構手間掛かりましたね。。
0661デフォルトの名無しさん
2005/08/10(水) 23:16:41のscheme-modeをgaucheのgoshをインタプリタとして使ってみたいのですが、
そういう使い方してる人います?
できれば教えて下さい。
またこれ以外でも、xyzzyで使えるscheme-modeがあれば紹介してください。
0662デフォルトの名無しさん
2005/08/10(水) 23:37:10状況としてはユーザからの入力値をチェックすることを考えています。
例えばチェック用関数 func_a, func_b, func_c, func_d と入力値 x, y, z があり
x については func_a と func_b,
y については func_a と func_c,
z については func_a と func_d,
によるチェックを行いたいわけなんです。
そこで x の場合
(func_a, func_b) と x を引数にとってリスト ((func_a x) (func_b x)) を
返すようにしたいのですが map のような便利な関数はないのでしょうか?
あるいはリストに入れた関数を一つの引数に次々に適用するよりも
適切な方法はありませんでしょうか?
0663デフォルトの名無しさん
2005/08/11(木) 00:26:44(map (lambda (f) (f x)) func-list))
(hoge (list (lambda (x) (+ x x)) (lambda (x) (* x x))) 10)
=> (20 100)
0664デフォルトの名無しさん
2005/08/11(木) 01:08:580665デフォルトの名無しさん
2005/08/11(木) 01:30:320666デフォルトの名無しさん
2005/08/11(木) 23:41:25どっかでgoshの-iオプションを使うとか聞いたことがあるようなないような。
0667デフォルトの名無しさん
2005/08/12(金) 08:36:46亀だけど Gauche で書いてみた.
入力は ((シンボル . インデント数) ...) みたいな感じ.
(use srfi-1)
(define (iexpr->list xs)
(define (f xs level rs)
(if (null? xs)
(values xs (reverse! rs))
(receive (sym l) (car+cdr (car xs))
(cond ((= l level)
(f (cdr xs) l (cons sym rs)))
((< l level)
(values xs (reverse! rs)))
(else
(receive (rest res) (f xs l '())
(f rest level (cons res rs))))))))
(values-ref (f xs 0 '()) 1))
0668デフォルトの名無しさん
2005/08/15(月) 23:19:44そんだけ。
(define (iexpr->list xs)
(define (f xs level rs)
(if (null? xs)
(cons xs (reverse! rs))
(let ((sym (caar xs)) (l (cdar xs)))
(cond ((= l level)
(f (cdr xs) l (cons sym rs)))
((< l level)
(cons xs (reverse! rs)))
(else
(let ((x (f xs l '())))
(f (car x) level (cons (cdr x) rs))))))))
(cdr (f xs 0 '())))
>(iexpr->list '((a . 0)(b . 1)(c . 4)(d . 5)(d . 2)(e . 3)(f . 0)))
=>(a (b (c (d)) (d (e))) f)
なかなか面白いですな。
これ使って何かに繋がらないかな。
すぐ思いつくのはGUIコントロールの階層表現ぐらいだけど。
0669デフォルトの名無しさん
2005/08/21(日) 22:40:48解説してるページはありますか?
コンパイラとかの中間言語としてのCPSとか、CPSへ/からの変換が
知りたいといいますか。英語でもいいです。
継続とは何ぞやとか、
普通の場合に戻ってから実行する処理をクロージャとして渡せば
一般の言語で継続渡し形式で書ける、という程度の継続渡しの
理解はしてるつもりです。
0670デフォルトの名無しさん
2005/08/21(日) 23:13:14とりあえずSICP嫁。英語ならWebで読める。
0671デフォルトの名無しさん
2005/08/21(日) 23:37:090672デフォルトの名無しさん
2005/08/21(日) 23:44:38ttp://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/compilerresume/
0673デフォルトの名無しさん
2005/08/22(月) 00:11:36perlのXML::RSSみたいなの.
0674デフォルトの名無しさん
2005/08/22(月) 00:38:140675643
2005/08/22(月) 00:47:550676デフォルトの名無しさん
2005/08/22(月) 02:56:42LISPはクローズドな開発が多いから
ここで「〜ない?」系の質問しても答えはほとんど「無い」が返ってくると思っていい。
どうしても必要なら自分で書け。
そしてコミュニティに還元しろ。
0678デフォルトの名無しさん
2005/08/22(月) 10:58:41作って使い捨てしちゃうってことはあるね。
>>677 がんがれ
0679デフォルトの名無しさん
2005/08/30(火) 13:54:52あまりにも他の言語と異質な感じをうけるため、心理的な抵抗感も実はあります。
Scheme は Lisp の派生あるいは方言である、と入門サイトに記述されています。
両言語の特性の違いについて、実際にプログラムを組んでいる方の感覚とご理解から
意見を伺いたいです。Lispが優れている言語ならば、それをもとにしたSchemeを
学習する方が良いのだろうか、と悩んでいます。
経済的な理由からLinuxマシンを新規に構成するのではなく、現在使用中の
Windowsマシンで Lisp/Scheme を学びたいと思っています。
0680デフォルトの名無しさん
2005/08/30(火) 19:51:41CommonLispならcoLinux(ただしXP/2000限定)を入れてcmucl、
Windows単体で動かしたいならclisp使うとか。
Schemeなら日本語リソースではgauche、
とにかく速いのがいいならbiglooかな。
0681デフォルトの名無しさん
2005/08/30(火) 20:01:43エディタとしてもよく出来てるし。
0682デフォルトの名無しさん
2005/08/30(火) 20:07:21xyzzyはかなり方言だし、ちゃんとしたclispあたりのほうが良いと思う。
Scheme系ならgaucheかな。
0683デフォルトの名無しさん
2005/08/30(火) 21:34:10皆様のおかげで、5つの実装・環境について特徴を知ることができました。
奥深いのですね。ありがとうございます。
調べたところ、エディタ xyzzy には熱心な愛好者が多そうですね。
Lispの言語としての魅力と関係があるように印象を受けました。
お勧めのgaucheを少し検索しました。
Kahuaというウェブアプリケーション作成の仕組みがあるとか・・
時間をつくってお勧めを参考に Lisp/Scheme を勉強してみます。
0684デフォルトの名無しさん
2005/08/30(火) 21:52:14あんまし色々言うと混乱させてしまうかもしれないけれど、
とりあえず動かしたいということだったら IDE もついてくる PLT Scheme が楽かも。
xyzzy がとっつきやすいのと同じ理由で。
一応日本語方面も外国ものとしてはそれなりだし。
でも、教科書とにらめっこして勉強するんじゃなく、
実際自分で使う小物スクリプトを色々書きながら勉強するというスタンスだったら
gauche が一番向いてるのかな。
そもそもスクリプティングに使いやすいものを、という開発方針だった気がするし。
何にせよ、Scheme は善かれ悪しかれ処理系ごとの個性が強いので
色々な処理系を試してみて、一旦これ、と決めたら、
それの使い方を詳しくつっこんでみるのがいいと思う。
0685デフォルトの名無しさん
2005/08/30(火) 22:35:37それが処理系ごとの違いに繋がってるんだと思う。
Gaucheくらい充実してればSchemeも楽しい。
0686デフォルトの名無しさん
2005/08/30(火) 23:14:12schemeだったらgaucheで決まりなんだけど、common lispは良さそうなのが
見当たりません。
0687デフォルトの名無しさん
2005/08/30(火) 23:20:45最近のclispはSJIS/JIS/EUC/Unicode自由自在だよ。
http://clisp.cons.org/impnotes/encoding.html
0688デフォルトの名無しさん
2005/08/31(水) 00:12:430689デフォルトの名無しさん
2005/09/01(木) 13:15:57OSX TigerにGauche 0.8.5インストールしたところリンクが通らず、
Finkでdlcompat入れろつーことらしいから(10.2だけど)、
Fink入れてみたんだけどdlcompatとかなさそうで、
ほんじゃってんで、ports入れてみて、
dlcompat落としてみたら、コンパイルできんって感じでげす...orz
どげにしたらインストでけるんでがしょ?
0690デフォルトの名無しさん
2005/09/01(木) 13:35:340691デフォルトの名無しさん
2005/09/01(木) 14:06:180692デフォルトの名無しさん
2005/09/01(木) 21:30:54・define-macroがある
・マニュアルが日本語(ライブラリも)
・ライブラリが豊富
・Cで簡単に拡張できる。
0693デフォルトの名無しさん
2005/09/02(金) 04:52:45SBCL は最近、日本語通る様になった
0695デフォルトの名無しさん
2005/09/03(土) 05:56:43このとき http-get 関数に :Accept-Encoding "gzip, compress" を
指定して圧縮されて受け取ったデータを展開するにはどうすればよいでしょうか?
javaみたいにgzipのストリームがあれば便利なんですが、ストリームどころか
素のgzipのユーティリティも見当たらないようです。
知ってる方お知恵をお貸し下さい、おながいします。
0696デフォルトの名無しさん
2005/09/03(土) 16:34:33使ってgzipを呼ぶようにすれば?
rfc.mimeも使うよね。
0697デフォルトの名無しさん
2005/09/03(土) 23:19:40Paul Grahamが(言わなきゃいいのに)本音を漏らしちゃった話。
言語デザイナーとしての限界とか、無理して作るなとか、さんざんなこと言われてる。
0698デフォルトの名無しさん
2005/09/03(土) 23:57:02個人的にはPaulの意見は理解できる。つーか、Matz僻みすぎ。
0699デフォルトの名無しさん
2005/09/04(日) 00:00:15Paul一人ごときが進化できる代物ではないと。
Guyぐらいの天才でもないと。
0700デフォルトの名無しさん
2005/09/04(日) 02:06:14抽象度の高いものは、漏れのような頭の悪い奴らにとっては使いこなすのが難しいわけで。
そういう意味で、Perl, Python, Rubyのような言語ってのは、脳味噌が一部不自由でもLispの
パワーの片鱗に触れられるって点で意味はあると思うんだけどな。
で、より毛深くなりたくなったら、Lisp/Schemeの世界に足を踏み入れればよいのだし。
結局のところ動的言語使いはLispに始まりLispに帰るのか。
0701デフォルトの名無しさん
2005/09/04(日) 02:15:22公式ライブラリが豊富なのもこの長所を延ばしてる。
Perlはawkの改良として、歴史的意味があった。
Rubyは...えーっと...
0702デフォルトの名無しさん
2005/09/04(日) 04:10:30>>695
wiliki の方でも訊いてみてはどうでしょ。
>>696 みたいな感じの答えになりそうな気はするけれど、
具体的なコードも出してくれるかも知れんし。
0703デフォルトの名無しさん
2005/09/04(日) 04:53:54(asdf-install:install 'arc)
で使える便利ライブラリ、くらいにするといいんだよ。
0704デフォルトの名無しさん
2005/09/04(日) 07:30:26万能とは、科学者にとって悲しむべき特性である。
0705デフォルトの名無しさん
2005/09/04(日) 11:24:03これで完成だとか言ってると危ないかも。
0706デフォルトの名無しさん
2005/09/04(日) 11:25:21それをなくしたら新しい文化ができるかも。
つまり、関数呼び出しは全てfancall, applyを使う。
0707デフォルトの名無しさん
2005/09/04(日) 12:16:58ていうか scheme では既に特別視してないし
0708デフォルトの名無しさん
2005/09/04(日) 13:01:470709デフォルトの名無しさん
2005/09/04(日) 13:09:09新しいものを追加した気分になれるがlispだと
そんなのマクロで書けるじゃんでほとんど終わる
ので圧倒的に不利なきがする
0710デフォルトの名無しさん
2005/09/04(日) 13:15:42ANSI Common Lisp + ネットワーク + 国際化 + XML + ...
みたいなノリで CLtL3 を作って標準化してほしい。
0711デフォルトの名無しさん
2005/09/04(日) 18:55:280712デフォルトの名無しさん
2005/09/04(日) 19:29:12EmacsLispはいかがですか?(反則ぎみ)
つか、欲しかったら時分でマクロなり関数なり定義してけばOK。
ソースある処理系だったら実装言語で拡張しちゃえば最強。
0713デフォルトの名無しさん
2005/09/04(日) 19:53:44それならPerl使った方がマシ。
0714デフォルトの名無しさん
2005/09/04(日) 22:23:55#/regexp/ みたいなものくらいなら片手間で実装できるし。
まあ regexp 自体は既存のライブラリ使うとしてだけど。
xml を直接埋め込むようなライブラリとかもあったよね。
あとはファーストクラスの動的マクロとかの黒魔術に手を染めるしかないかもなあ。
Graham は確かオプションで切り替えられるような機能を
arc でサポートする予定だったと思ったけれど。
洒落だったら後置記法の Sexpr とか思いつくんだけどなあ。
0715デフォルトの名無しさん
2005/09/04(日) 22:36:29>後置記法
括弧つきFORTHだな。w
0716デフォルトの名無しさん
2005/09/05(月) 07:20:19emacs の開発者やコード寄贈者には Scheme や Common Lisp ハッカーが
ごろごろいるけど。
0717デフォルトの名無しさん
2005/09/05(月) 23:59:51↓以下別の話題
0718デフォルトの名無しさん
2005/09/06(火) 01:47:11http://pc8.2ch.net/test/read.cgi/tech/1114223450/
0719デフォルトの名無しさん
2005/09/06(火) 04:50:31↓以下Lispの話題
0720デフォルトの名無しさん
2005/09/06(火) 11:46:48ライブラリを充実させてほしい。
どんなしょぼLISPでも使えるネットワーク系ライブラリとかよ。
0721デフォルトの名無しさん
2005/09/06(火) 14:16:24ああいう開発環境をいまの技術で作れば、めちゃ快適なんだろうなと夢想。
0722デフォルトの名無しさん
2005/09/06(火) 18:33:08ほんとそのとおりだよ。LISPerにはライブラリ共有の概念がないのかね。
0723デフォルトの名無しさん
2005/09/06(火) 19:30:230724デフォルトの名無しさん
2005/09/06(火) 21:32:59それ以外の日本語のコンテンツの少なさは凄いよな。
0725デフォルトの名無しさん
2005/09/06(火) 21:40:160726デフォルトの名無しさん
2005/09/06(火) 22:06:11探せばそれなりにはあるよ。大学なり個人なり。
Java とかに比べれば、そりゃ少ないけど。
↓はテンプレに入れても良いかも。
チュートリアル
ttp://www.h7.dion.ne.jp/~matsu/feature/common-lisp/index.html
ティップス
ttp://www.geocities.co.jp/SiliconValley-Cupertino/2478/root-sect-2.html
0727デフォルトの名無しさん
2005/09/06(火) 22:31:270728デフォルトの名無しさん
2005/09/06(火) 23:37:410729デフォルトの名無しさん
2005/09/07(水) 22:26:230730デフォルトの名無しさん
2005/09/08(木) 18:36:510731デフォルトの名無しさん
2005/09/10(土) 12:21:47version 7 に上がってたんで一応貼っておきますね。
リリースノートを眺めた限りではあんまり派手な変更はなさそうですけれど。
多言語方面に対応しないのはお客さんから要望が出ないからなんだろうなあ。
http://www.scheme.com/csv7.0/
0732デフォルトの名無しさん
2005/09/12(月) 03:15:04値段が判りませぬ。幾らなんでしょうかご存じでしょうか。サイト探してみたんですけど
見当たらなかったように思います。
0733デフォルトの名無しさん
2005/09/12(月) 04:00:26フリーで機能限定版(コンパイラが無い)の Petite Chez があります。
Chez 自体の値段は私も知りませんが ACL といい勝負だという噂は聞いたことがあります。
基本的に個人相手に商売してるんじゃなさそうな気がします。
0734flatline@Vim%Chalice ◆r6EONKKhcc
2005/09/13(火) 16:55:02っ [ http://user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/ ]
まだTeXのマクロが残りまくりですが...
0735デフォルトの名無しさん
2005/09/13(火) 20:45:38乙カレー! これで emacs-w3m で『On Lisp』が読めるよ。
0736デフォルトの名無しさん
2005/09/13(火) 22:01:01ACLって1ライセンスいくらでしたっけ。
今ちょっとfranzのページ見てきたら載ってないのなー
0737デフォルトの名無しさん
2005/09/13(火) 22:02:28時価とかじゃね?
0738デフォルトの名無しさん
2005/09/13(火) 22:08:48によれば $599〜
0739デフォルトの名無しさん
2005/09/13(火) 22:45:29・・で、日本語マニュアルは付いてくるのかい?
0740デフォルトの名無しさん
2005/09/13(火) 22:46:51すげ
つーかここまでお疲れ様でした。
0741デフォルトの名無しさん
2005/09/13(火) 23:02:550742デフォルトの名無しさん
2005/09/13(火) 23:09:300743デフォルトの名無しさん
2005/09/13(火) 23:19:450744デフォルトの名無しさん
2005/09/13(火) 23:39:370745デフォルトの名無しさん
2005/09/13(火) 23:44:46あっちは単言語で安いパッケージがある。
0746デフォルトの名無しさん
2005/09/13(火) 23:46:080747デフォルトの名無しさん
2005/09/13(火) 23:59:210748デフォルトの名無しさん
2005/09/14(水) 00:04:23http://sourceforge.net/projects/dotlisp/
0749デフォルトの名無しさん
2005/09/14(水) 00:24:29Franzの11月セミナーのとこにそれっぽいようなことが書いてあった気がするんだが。
0750デフォルトの名無しさん
2005/09/14(水) 00:47:14今年の ILC でも講演してたよ。
http://international-lisp-conference.org/2005/speakers.html#patrick_dussud
0751デフォルトの名無しさん
2005/09/14(水) 06:20:08> さらに、今年末出版予定の、邦訳版 On Lisp (原書著者Paul Graham)の翻訳者である野田開氏もお迎えし、
> 書籍On Lispについてや翻訳の体験談をお話し頂きます。
これか。
http://jp.franz.com/base/aclhome_base.html
0752デフォルトの名無しさん
2005/09/14(水) 06:45:41再版するとか改訂するとかする暇がないとか色々噂は聞くけれど、
実際のところどうなってるんでしょう。
0753flatline@Vim%Chalice ◆r6EONKKhcc
2005/09/14(水) 10:59:31出版社の方が,原書を出した米国の出版社と交渉に当たって下さっているところです.
>>752
改訂版を出そうとしている(米の)出版社がGraham氏の原稿を待っているとのこと.
# 私もできれば改訂版に追従したいんですが...
Graham氏は完璧主義の方で,その上お忙しいので,しばらくかかりそう,とか.
0754デフォルトの名無しさん
2005/09/14(水) 15:04:06Common Larceny requires the Common Language Infrastructure. It is known to work with the Microsoft .NET Framework implementation.
http://www.ccs.neu.edu/home/jrm/download.html
0755デフォルトの名無しさん
2005/09/14(水) 16:57:06音沙汰無いなと思ってたらこんなところで
0756デフォルトの名無しさん
2005/09/14(水) 19:35:50FreeBSD4.11でportsからインストールしたCMUCL19a
traceの結果がレベル0しか出力されない
(defun fac (n)
(if (> n 1)
(* n (fac (1- n)))
1))
(trace fac)
(fac 3)
処理系の出力
0: (FAC 3)
0: FAC returned 6
6
教えてエロい人
0757デフォルトの名無しさん
2005/09/14(水) 21:29:510758デフォルトの名無しさん
2005/09/15(木) 02:19:00発生する場所では気を利かせてdouble-floatで計算してくれるみたいです。
C/C++のように強い型付けをされた言語の真似をさせるにはどうしたらよいですか。
foreign-function使ってfloat同士の加算だけの関数を呼び出すのは我ながら
バカらしい解決方法だと思うのですが、もっとまともな方法ありますか?
0759デフォルトの名無しさん
2005/09/15(木) 02:28:31例えば
(defun p (x y)
(declare (single-float x y))
(the single-float (+ x y)))
みたいな書き方すれば多くのコンパイラは良きになしてくれるよ。
0760758
2005/09/15(木) 02:39:10declareとtheを使った書き方は試しているのですが、まだ期待した結果を
得られるには至ってません。記述方法の問題かも知れないのでも少しいじってみます。
ありがとうございました。
0761デフォルトの名無しさん
2005/09/15(木) 06:26:15http://weitz.de/rdnzl/
RDNZL - A .NET layer for Common Lisp
0762デフォルトの名無しさん
2005/09/15(木) 20:55:47最適化のつもりなら多分逆効果だよ
0763758
2005/09/15(木) 22:46:38僕への質問と理解してよければ、ハードウェアのシミュレータを書こうとしてるからです。
演算器がsingleしか持ってないので途中でdoubleに行っちゃったりして実機上の計算と結果が
異なってくるとイヤかなぁ、と。
マクロとかバンバン使って勝手に俺言語でっち上げて、パイプラインの状態とか視覚的に
見れるようなところまで持って行けたら素敵なんだけども。こんなことLispでやろうとするのって
おかしいですか?
>>753
出版されたら買わせていただきますわ。期待して待ってます。
0764デフォルトの名無しさん
2005/09/15(木) 23:08:26foo(MAXFLOAT, 2) と呼び出した場合、途中 double で計算して
オーバーフローしない処理系があるし、それも規格合致だよ。
正確にエミュレートしたいのなら自前でビット演算するしかない。
0766デフォルトの名無しさん
2005/09/15(木) 23:48:59SystemCは厳格にやるクラスと高速なクラス(これは=float/doubleだけど)が両方
用意されているよ。
0767デフォルトの名無しさん
2005/09/16(金) 07:20:05float の演算が double に変換されてから行われるのは K&R の時代の話じゃないの?
……と思ったけどオーバーフローが絡むとアレか。未定義だか処理系定義だかか。
0768デフォルトの名無しさん
2005/09/16(金) 09:53:090769デフォルトの名無しさん
2005/09/16(金) 16:07:10http://iiyu.asablo.jp/blog/2005/09/16/76723
サイン本、いいなー。w
0770デフォルトの名無しさん
2005/09/16(金) 16:08:13typo
誤:Proactical
正:Practical
0771デフォルトの名無しさん
2005/09/16(金) 23:11:58もっと多くの人が知ってくれればいいのにと思ったよ。
撮影していたビデオを配信する予定がないこともないらしいのでちょっと期待。
Prologって使ったことないんだけど、適用する分野を間違えなければ便利そうね。
0772デフォルトの名無しさん
2005/09/17(土) 10:16:182#<undef>
gosh> ((car '(display display)) 2)
*** ERROR: invalid application: (display 2)
why? please.
0773デフォルトの名無しさん
2005/09/17(土) 10:53:05デフォルトのclisp2.34が起動時にエラーが起こるので、
エラーの起こらないclisp2.35を使ってみたいです。
しかし、clispフォルダの中身をいれかえて、
lispbox-register.elを入れてやるだけでは動かないようです。
どうやったら動くか知ってる人いませんか?
ちなみに、2.34のエラーは以下の通りです。上2行のWARNINGは2.35でもでるようです。
WARNING: locale: no encoding CP932, using UTF-8
WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8
invalid byte sequence #xEE #x2E #x74 in CHARSET:UTF-8 conversion
よろしくお願いします。
0774デフォルトの名無しさん
2005/09/17(土) 11:14:52display っていうシンボルを 2 に apply しようとしてる.
シンボルは関数でないから当然エラー.
やりたいことやるには
((car `(,display ,display)) 2)
0775デフォルトの名無しさん
2005/09/17(土) 11:25:13素直にlistで書けよ
0776デフォルトの名無しさん
2005/09/17(土) 11:27:14`(,display ,display) == (list display display)
0777デフォルトの名無しさん
2005/09/17(土) 11:27:16俺が言いたいのはquoteとリストの区別が付いてない初心者だから
順序立てて教えないと理解しないだろってことだよ
0778772
2005/09/17(土) 11:49:38gosh> ('display 2)
*** ERROR: invalid application: (display 2)
こんなことをしているのと同じだったんですね。
774さんのようにunquoteで書くか、以下のようにして
書くかしてちゃんと関数として評価されるようにしなければ
ならなかったと。
gosh> ((car (list display display)) 2)
2#<undef>
おかげで unquote についても覚えることができました。
>>774-777さん。どうもありがとうございます。
gosh> display
#<subr display>
gosh> `(,display)
(#<subr display>)
0779デフォルトの名無しさん
2005/09/17(土) 11:57:35頻繁に使わないって人はよく間違うよね。
0780デフォルトの名無しさん
2005/09/17(土) 15:04:42間違う奴は全く理解してないってことだろ
0781デフォルトの名無しさん
2005/09/17(土) 21:58:51その文章がWebに掲載された日の午前中に
私がamazonで購入したときには残り3冊だったのに、
その10分くらい後にはもう在庫なしになっていた。
洋書売り上げランキングも、最初見たとき5000位台だったのが、
一時的に50位くらいまで上がってるのを見た。
影響力すごすぎ。
0782デフォルトの名無しさん
2005/09/18(日) 00:18:02リンク先のblog見るかぎりじゃ結構バカそうなんだが。バカを演じてるだけなのかな。
0783デフォルトの名無しさん
2005/09/18(日) 00:39:59マイクロソフトの天敵みたいな人。
ちなみに元法務大臣とは別人だぞ。w
http://ja.wikipedia.org/wiki/%E4%B8%AD%E6%9D%91%E6%AD%A3%E4%B8%89%E9%83%8E
0784デフォルトの名無しさん
2005/09/18(日) 01:34:410785デフォルトの名無しさん
2005/09/18(日) 09:25:350786デフォルトの名無しさん
2005/09/18(日) 10:20:030787デフォルトの名無しさん
2005/09/18(日) 14:58:41defunとdefineの違いがなければ間違うかもしれんが、どちらかの単語を打ち込んだ
時点で自動的に脳内モードが切り替わるのでその手の間違いは少ない。
0788デフォルトの名無しさん
2005/09/19(月) 01:03:27あとは #t を t とか #f や '() を nil とか。
まあ書いた瞬間に気付いてへこむわけですが。
0789デフォルトの名無しさん
2005/09/19(月) 14:01:50#:とかfuncallとかめんどくさすぎる
0790デフォルトの名無しさん
2005/09/19(月) 14:11:08CommonLisp的思考をしない限りはメリットはない。
おれもSchemeみたくスロット1つにしてしまっても良いと思う。
ところで、()をわざわざ'()とquote付けて書いてるのが多数なのは
宗教上の理由でしょうか。
()は評価しても()だよね?
()は#tとか#fと同じ様な扱いのはずだと思うけど。
Schemeはここだけ不思議。
0791デフォルトの名無しさん
2005/09/19(月) 14:14:00Schemeでは () は評価できない(エラー)だと思う。
0792デフォルトの名無しさん
2005/09/19(月) 14:16:18なんでだろうね。
Gaucheでも入れてみようかな。
0793デフォルトの名無しさん
2005/09/19(月) 14:21:50評価できる形式ではないから。
Common Lispの場合は()はnilというsymbolであってspecial変数としてnilという
値を持っているから評価できるだけ。
0794デフォルトの名無しさん
2005/09/19(月) 14:37:10R5RSでは未定義だったような。うるおぼえ。
0795デフォルトの名無しさん
2005/09/19(月) 14:41:17ああ。正確には未定義だったかも。
0796デフォルトの名無しさん
2005/09/19(月) 15:09:52gosh> ()
()
gosh> '()
()
R5RSをみて見たけどようわからん。見当違いなトコ見てるかも。
4.1.3 Procedure calls
> Note: In many dialects of Lisp, the empty combination,
> (), is a legitimate expression. In Scheme, combinations
> must have at least one subexpression, so () is not a
> syntactically valid expression.
4.1.2 Literal expressions
> '() ===> ()
識者の登場キボン
0797デフォルトの名無しさん
2005/09/19(月) 15:13:36> so () is not a
> syntactically valid expression.
0798796
2005/09/19(月) 15:15:090799デフォルトの名無しさん
2005/09/19(月) 15:18:04ちなみに
Petite Chez Scheme Version 6.9c
Copyright (c) 1985-2003 Cadence Research Systems
> ()
()
> '()
()
これもgoshと同じか。
0800デフォルトの名無しさん
2005/09/19(月) 15:19:49guile> ()
ERROR: missing or extra expression
ABORT: (misc-error)
guile> '()
()
guile>
0801デフォルトの名無しさん
2005/09/19(月) 15:22:41guile> ()
ERROR: missing or extra expression
ABORT: (misc-error)
guile> '()
()
guile>
0802デフォルトの名無しさん
2005/09/19(月) 15:23:120803デフォルトの名無しさん
2005/09/19(月) 15:24:22おおぅ。ちゃんとエラーになる処理系もあるんだな。
やっぱquoteせにゃならんか。
0804デフォルトの名無しさん
2005/09/19(月) 16:05:09Guileでエラーになったからと言え、これをSchemeの仕様と言ってしまっていいものか。
つーか未定義か。
0805デフォルトの名無しさん
2005/09/19(月) 20:40:250806デフォルトの名無しさん
2005/09/19(月) 21:35:30Gaush や PLT Scheme は規格でエラーにしろとされてるものしか
エラーにしないような感じ。
以前出た (define (foo) (define x 10) (define y x) y) が
どう扱われるかもそうだったよね。
0807デフォルトの名無しさん
2005/09/20(火) 00:21:52絵を簡易的なアニメーションさせることは
Schemeを使って可能でしょうか?
また、Schemeからリンクさせることも含めて
可能な手段をわかる人おられますか?
かなり求むです。
0808デフォルトの名無しさん
2005/09/20(火) 01:10:180809デフォルトの名無しさん
2005/09/20(火) 11:12:11かなり感謝です。実際に求めていたものがありました。
しかもSICPにも図形言語として紹介もしていたようですね。
みなさんかなりの達人では??
私もこれからレベルアップします!!
0810デフォルトの名無しさん
2005/09/20(火) 20:56:22参考になるです。
0811デフォルトの名無しさん
2005/09/21(水) 01:25:04| WARNING: locale: no encoding CP932, using UTF-8
| WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8
公式配布の CLISP では CP932/Shift-JIS エンコーディングが使えません.
GNU Libiconv をリンクして作成したバイナリを使えば大丈夫です.
私の手元では Windows 2000/XP + Emacs22 CVS + Slime CVS + GNU CLISP 2.35
で↓のように日本語シンボルが使えています.あとはパス名に日本語が使えない
問題が解決できればバイナリを公開してもいいですが.
; SLIME 2005-07-29
CL-USER> (length "あいう")
3
CL-USER> (defun 2倍 (引数) (* 引数 2))
2倍
CL-USER> (2倍 2/3)
4/3
0812デフォルトの名無しさん
2005/09/21(水) 05:16:45問題は、auto-quoteとでもいいますか、アトムを評価するとこのシステムは、
アトムの名前を返すようなシステムになっておりました。
これと同じ仕様になっているLispあるいはSchemeの処理系あるいは、
これを簡単に実現できるような(つまりMuLisp互換システム)システムを
ご存知の方教えていただけませんでしょうか。
0813デフォルトの名無しさん
2005/09/21(水) 09:51:220814デフォルトの名無しさん
2005/09/21(水) 13:34:06ちょっと意味ワカラナス
0815デフォルトの名無しさん
2005/09/21(水) 17:33:23MuLispの仕様ってどこかに公開されてるの?
0816デフォルトの名無しさん
2005/09/22(木) 02:40:00よく判らないけれど、自己評価するシンボルが欲しいとかなら、
Common Lisp で keyword に置き換えておくのが楽じゃないかと思います。
0817デフォルトの名無しさん
2005/09/22(木) 02:43:24よくわからんが束縛されてない自由変数のデフォルト値って感じなのかな。
keywordにするのは賛成。
0818デフォルトの名無しさん
2005/09/22(木) 02:57:26(foo) => a、(let ((a 10)) (foo)) => 10
となることを期待するコードがあちこちにあったりすると厄介かも。
0819デフォルトの名無しさん
2005/09/22(木) 03:00:030820デフォルトの名無しさん
2005/09/22(木) 04:43:430821デフォルトの名無しさん
2005/09/22(木) 06:48:06handler-case 使って unbound-variable で捕まえるっていう手もあるかも。
スコープは……とりあえずどっかのパッケージに閉じ込めといて、
do-symbols 使って (declaim (special <... そのパッケージのシンボル全部 ...>))
とかに展開するマクロを書いてロード後に呼んでみるとかで意外と何とかならんかなあ。
0822デフォルトの名無しさん
2005/09/22(木) 08:34:14変換するマクロ書いた方が結局早いんじゃないかな。
(atom x) は (atom (if (boundp 'x) x 'x)) とか、動的束縛なら
(let ((var val)) ...) は (let ((var val)) (declare (special var)) ...)
とか変換してくだけだよね。
0823デフォルトの名無しさん
2005/09/23(金) 14:18:00誰か買いません?
「EXPLORING COMPUTER WCIENCE WITH SCHEME」
ユーズドにしてはかなり綺麗な方だと思う¥5,000でお願い
http://www.amazon.co.jp/exec/obidos/ASIN/0387948953/qid%3D1127452213/250-5942737-7464260
0824823
2005/09/23(金) 14:19:34○: COMPUTER SCIENCE
0825デフォルトの名無しさん
2005/09/23(金) 23:42:100826デフォルトの名無しさん
2005/09/24(土) 00:11:420827デフォルトの名無しさん
2005/09/24(土) 00:48:410828デフォルトの名無しさん
2005/09/24(土) 15:17:06書けるくらい理解したのなら、売らないだろうに、イヂワルなやつだな。
0829デフォルトの名無しさん
2005/09/24(土) 19:04:310830デフォルトの名無しさん
2005/09/24(土) 21:26:13ソニンのことか
0831デフォルトの名無しさん
2005/09/25(日) 00:22:08ありませんか?
なければ作りますが。
0832デフォルトの名無しさん
2005/09/25(日) 01:16:43関数型言語みたいにリストの中に単一の型しか入れられないんでは
Lisp系としては不便この上ないし、かといって型チェックが入るんでは
何も変わらんか、型が固定されるだけ不便になる。
0833デフォルトの名無しさん
2005/09/25(日) 01:24:500834デフォルトの名無しさん
2005/09/25(日) 10:11:140835デフォルトの名無しさん
2005/09/25(日) 10:30:38いいんじゃないの?
0836デフォルトの名無しさん
2005/09/25(日) 10:41:18によって意見が割れそうだね。
0837デフォルトの名無しさん
2005/09/25(日) 13:33:28答えでもいいです、よろしくお願いします。
0838デフォルトの名無しさん
2005/09/25(日) 13:37:520839デフォルトの名無しさん
2005/09/27(火) 23:48:07http://fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
ここの scheme-mode で run-scheme に近いことができるようになってる。
Petite Chez Scheme 7.0で使ってみたところ、問題なく動いた。相当に便利。
まだ荒削りなので、今後に期待。
0840デフォルトの名無しさん
2005/09/28(水) 19:46:16DrScheme や MrEd では問題なく日本語が使えますが、コマンドプロンプトで
動いているMzScheme だと、与えられる文字コードがWindows_31Jになってしま
うせいか、日本語を入力してもすべて化けてしまうのです。
コマンドプロンプトからUTF-8を与えることができればいいのかと思うのです
が、そこからが分かりません…。
0841デフォルトの名無しさん
2005/09/28(水) 21:05:14(add-to-list 'process-coding-system-alist
'("mzscheme" . utf-8))
しておいて M-x run-scheme とか。
0842840
2005/09/28(水) 21:36:05申し忘れましたが、私のシステムは Windows(2000, 98)なのです。
できたら>>938の xyzzy の scheme-mode を使いたいと思っています。
0843デフォルトの名無しさん
2005/09/28(水) 22:31:29xyzzyの sheme-mode はインデントの機能がちょっと貧弱だけど
これを.xyzzy に書くと、lisp-modeと似た感じになる。
; scheme-mode で lis-mode 風のインデントを行う。
(define-key *scheme-mode-map* #\C-m 'lisp-newline-and-indent)
(define-key *scheme-mode-map* #\C-i 'lisp-indent-line)
(setf (get 'define 'lisp-indent-hook) 'defun)
0844デフォルトの名無しさん
2005/09/28(水) 23:59:02http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97
例で
(λx.(λy.(x+y))3)5 → (λy.(3+y))5 とか
λx.(λy.(x+y))3 → λy.(3+y)
とあるんですが、これって正しいんでしょうか?
0845デフォルトの名無しさん
2005/09/29(木) 00:24:27だがなぜこんなところに聞くのだ。
まだHaskellスレとかの方がよくないか。
0846デフォルトの名無しさん
2005/09/29(木) 01:10:42そのものだ。Ctrl+JでS式がSchemeインタプリタに評価されて、結果が次の行
に表示される。自分はずっとこういうのが欲しかった。
今まで Windows98 で動く Scheme 実行環境にはろくなものが無かった。
ChezEdit … NTでしか動かない。
DrScheme … 自分のマシンには重すぎてインストールすらできなかった。
Chez Scheme 付属の PWL … 重すぎて、ただ起動しただけでCPUパワーを使い
きってしまう。
だから結局、素の PetiteChezScheme をコマンドラインから起動し、エディタ
の内容をコピペするしかなかった。
この xyzzy のScheme Mode は、便利で、操作が軽快で、そしてCPUパワーをほ
とんど食わない。自分のような貧乏人には理想のScheme環境だと思う。
matsuoka さん、ありがとう!
0847デフォルトの名無しさん
2005/09/29(木) 01:11:56ラムダ計算の仕方を全く知らないならちゃんと勉強しろよ。
中途半端に聞いたって仕方がないだろ。
0848デフォルトの名無しさん
2005/09/29(木) 01:12:43make-process に :incode *encoding-utf8* :outcode *encoding-utf8*
を付け足す感じでどうでしょ。試してないけど。
詳細はリファレンス参照。
ttp://hie.s64.xrea.com/xyzzy/reference/html/ref-make-process.html
上手くいかなかったら win 板の xyzzy スレで訊いた方がいいかも。
0849842
2005/09/29(木) 10:51:10ありがとうございます。残念ながら、うまく行きませんでした。
試しに :OUTCODE *encoding-sjis* も試してみましたが、結果は同様でした。
xyzzy スレに行ってみます。
0850デフォルトの名無しさん
2005/09/29(木) 14:19:17S式で書けば
λx.(λy.(x+y))3 = ((lambda (x) (lambda (y) (+ x y))) 3)
(λx.(λy.(x+y))3)5 = (((lambda (x) (lambda (y) (+ x y))) 3) 5)
これならわかる?
0851デフォルトの名無しさん
2005/09/29(木) 15:30:540852デフォルトの名無しさん
2005/09/29(木) 19:03:441つ目の方違わね?
(λx.(λy.(x+y))3)5 → (λx.(x+3))5
じゃね?
0853デフォルトの名無しさん
2005/09/29(木) 19:23:02>>844で合ってる
>これって正しいんでしょうか?
# 強いて言えばラムダ計算に中置き演算子がでてくるのが不思議
0854デフォルトの名無しさん
2005/09/29(木) 19:31:050855デフォルトの名無しさん
2005/09/29(木) 20:04:59試してみたけど、Gauche は動かないねえ。
http://fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy に
> pscheme を直接呼ぶと結果が帰って来ない(pscheme の STDOUT の扱いの問題)
> Petite Chez Scheme と MzScheme? は全然動く(STDIN/OUT がいけるのは大丈夫)
とあるから、Gauche の STDOUT に問題があるのだろうか?
対処法はわかんない。
0856デフォルトの名無しさん
2005/09/29(木) 20:40:52とか?
0857デフォルトの名無しさん
2005/09/29(木) 20:51:01ラムダ計算自体はべつに前置記法を要求してるわけじゃないんでは?
0858デフォルトの名無しさん
2005/09/29(木) 21:29:42うまく行かない。
> xyzzyenv: "C:\Program Files\Gauche\bin\gosh.exe -i ": 指定されたファイ
> ルが見つかりません。
というエラーが出る。
0859858
2005/09/29(木) 21:33:02(map-slash-to-backslash "C:/Program Files/Gauche/bin/gosh.exe -i ")
こう書くと、前述のエラー。
0860デフォルトの名無しさん
2005/09/29(木) 21:34:550861デフォルトの名無しさん
2005/09/30(金) 11:02:14xyzzy Part13
http://pc8.2ch.net/test/read.cgi/win/1127783135/l20
ここの27以降。
そしてこちらは、Emacs のscheme-mode風に、評価の結果が run-scheme バッ
ファに表示されるようにする改造。
http://d.hatena.ne.jp/guttyon/20050929
0862デフォルトの名無しさん
2005/09/30(金) 12:19:13(defmacro f0 (arg)
(f1 arg))
という構文があって、
(defun f0 (arg)
(f1 arg))
と置き換えると、使用されている場所でエラーが出ます。
使用されている場所で、f0 〜をf1 〜に置き換えても同じエラーが出ます。
等価な置換を教えてください(あれば・・・)
mapcarやapplyの中で使われていることは、関係していますか?
0863デフォルトの名無しさん
2005/09/30(金) 13:38:50マクロと関数の違いを君の言葉で説明しなさい。
それとなぜ置き換えたいと思ったのかもね。
話はそれからだ。
0864デフォルトの名無しさん
2005/09/30(金) 16:34:26関数とマクロは、似て見えるかもしれないけど、全く別のもの。
とりあえず↓のマクロの解説を読んでみて。
http://www.geocities.jp/m_hiroi/rakup/rakup20.html
0865デフォルトの名無しさん
2005/09/30(金) 21:20:460866デフォルトの名無しさん
2005/09/30(金) 22:46:020867デフォルトの名無しさん
2005/09/30(金) 23:10:10http://jp.franz.com/base/seminar-2005-11-18.html
0868デフォルトの名無しさん
2005/10/01(土) 00:45:580869デフォルトの名無しさん
2005/10/01(土) 02:31:12シンボル補完は、Gaucheには定義されてる全シンボルをとる方法あるんか?ってのと、
変数と関数の区別がないから不便そうだね、ってのがまず思い付く。
SLIMEといえばswank-scheme48がいつごろかに入ったね。
Emacsのscheme用環境というとquackが思い浮かぶけど使ったことないや。
0870デフォルトの名無しさん
2005/10/01(土) 20:10:200871デフォルトの名無しさん
2005/10/02(日) 04:58:12他のLispのマクロの知識もないんですが…
R5RS読むしかないんでしょうか。
0872デフォルトの名無しさん
2005/10/02(日) 08:19:19あれはけっこう難関。漏れも今悩んでる。
日本語リソースについては期待しないほうがいいと言っておく。
0873デフォルトの名無しさん
2005/10/02(日) 09:01:28macroは何でもあり。
コツは概念の理解と慣れること。
0874デフォルトの名無しさん
2005/10/02(日) 11:49:060875デフォルトの名無しさん
2005/10/02(日) 12:01:19あれじゃダメかいな。
0876デフォルトの名無しさん
2005/10/02(日) 13:19:35書籍ならそこそこまともな解説が書いてある場合が多いと思う。
0877871
2005/10/02(日) 16:22:34とりあえず、犬飼さんのを読ませていただいて、必要ならば、英語も含めてググってみます。
http://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
http://okmij.org/ftp/Scheme/macros.html
http://community.schemewiki.org/?scheme-faq-macros
ちなみに、(R5RSには明示されていない)概念てどんなのでしょう
0878デフォルトの名無しさん
2005/10/03(月) 12:19:19Chez Scheme、Dr.Schemeだと動いたけどこれってR5RS的には違法ですよね?
Gaucheだとエラー。
0879デフォルトの名無しさん
2005/10/03(月) 21:38:39R5RSではダメだが、srfi-46で定義されている。
0880デフォルトの名無しさん
2005/10/03(月) 21:55:06知らなかった。トンクス
0881本田
2005/10/04(火) 13:21:07http://www.heeltoe.com/retro/mit/mit_cadr_lmss.html
>Retrocomputing - MIT CADR Lisp Machines
http://www.heeltoe.com/retro/cadr/index.html
0882デフォルトの名無しさん
2005/10/06(木) 20:46:51の Scheme モードで、追加機能の要望が募集されているみたい。
真っ先に欲しいのは、実行の中断(ブレーク)です。
うっかり(tarai 14 7 0) とかやると、延々と止まらなくなってしまうから。
0883デフォルトの名無しさん
2005/10/07(金) 06:43:57Scheme のプロセス握ってるバッファに切り替えて M-x kill-subprocess でいけません?
0884882
2005/10/07(金) 09:44:23確かにそうすれば止まりますが、プロセスを殺したくないんです。単に中断し
たいだけなんです。
コマンドプロンプトで MzSchemeを利用している時は、Ctl-C で user break
になります。たしか Petite Chez Scheme も同じ。
xyzzy の Schemeモードでもそれを利用したいんです。
0885デフォルトの名無しさん
2005/10/07(金) 13:44:370886デフォルトの名無しさん
2005/10/07(金) 15:20:33wikiのようだしその方が生産的でしょ。
0887デフォルトの名無しさん
2005/10/09(日) 21:10:390888デフォルトの名無しさん
2005/10/09(日) 21:13:52その通りだと思うが、なんか唐突だな。w
0889デフォルトの名無しさん
2005/10/09(日) 23:12:35整えるときはいっきにやったほうが浸透しやすいじゃない?
0890デフォルトの名無しさん
2005/10/10(月) 00:01:171 . Emacs
2 . Vi
3 . その他
な印象を受けるけど、Viの話題は出ないんだな。
0891デフォルトの名無しさん
2005/10/10(月) 01:14:480892デフォルトの名無しさん
2005/10/10(月) 02:05:18x86 backend を一から作るのかな。
0893デフォルトの名無しさん
2005/10/10(月) 17:22:43おれバリバリScheme処理系作ってるけどWin厨なんでWZ使ってるよ?
普通EmacsやViなんて変態エディタ使わないでしょ。
あ、変態の反論とかエディタの話題振られてもこれ以上しないから。
0894デフォルトの名無しさん
2005/10/10(月) 17:31:04出た、言いっぱなし厨!w
0895デフォルトの名無しさん
2005/10/10(月) 19:52:51Viは確かに普通ではないが、Emacsはいたって普通のエディターだが。
まさか、CUAじゃないから変態とかいってんの?
0896デフォルトの名無しさん
2005/10/10(月) 20:35:560897デフォルトの名無しさん
2005/10/10(月) 22:01:160898デフォルトの名無しさん
2005/10/10(月) 23:26:470899デフォルトの名無しさん
2005/10/11(火) 03:49:37置き換えるプロジェクトは尽く上手くいっていないけど、みんな elisp で
満足なのかな。順調なのは xyzzy だけ?
0900デフォルトの名無しさん
2005/10/11(火) 04:47:03・まあ文句はあるけどelispで結構暮らせる
・Emacs自体も開発が進む
・elisp既にたくさん
・Emacsを再び作るのは結構大変
でモチベーションが続かないんじゃなかろうか。
OSやユーザ層でEmacsと重なりにくい部分を選び、その環境に特化することを
特徴の一つとすることでxyzzyは生き延びているように思える。
0901デフォルトの名無しさん
2005/10/12(水) 11:56:55二匹目のどぜうはMacにいると見た。
0902デフォルトの名無しさん
2005/10/12(水) 19:44:400903デフォルトの名無しさん
2005/10/12(水) 20:57:42SICP第2版の訳について良し悪しで意見が分かれてる。
おまえらの意見は堂よ?
0904デフォルトの名無しさん
2005/10/12(水) 21:02:48いわゆる「悪い翻訳」ではない。ちゃんと読めるという意味で良い翻訳だと思う。
0905デフォルトの名無しさん
2005/10/12(水) 21:24:16儲けようという作戦か?
0906デフォルトの名無しさん
2005/10/12(水) 23:01:44elispでもqsortが次のように書けるからね。
(defmatch qsort
( (x . xs) -> (append (qsort (lcomp y (y <- xs) (< y x))) `(,x)
(qsort (lcomp y (y <- xs) (>= y x)))))
( () -> '()))
末尾再帰除去の最適化さえあれば。
0907デフォルトの名無しさん
2005/10/12(水) 23:20:20環境があったら嬉しいなぁ。スピードが必要な部分は C で書くというのも一つの
解であるとは思うけど。
0908デフォルトの名無しさん
2005/10/20(木) 00:03:16lambda(x, y) { x * y } みたいな構文にすればいいのに
うだうだ考えてるのって、彼はよっぽど Lisp が嫌いなのかな。
0909デフォルトの名無しさん
2005/10/20(木) 00:20:400910デフォルトの名無しさん
2005/10/20(木) 00:41:51プログラムがS式でなくなればLispの利点の8割くらいは失われると思う。
0911デフォルトの名無しさん
2005/10/20(木) 03:14:21その8割と残り2割の解説よろしこ。
0912デフォルトの名無しさん
2005/10/21(金) 01:56:23由がなくなる.そう自由だ.大事なのはそこだ.言語が拡張できなきゃ新しい
パラダイムを試す自由がない.
S 式をやめれば,そこに残るのは,高階関数,クロージャ,オブジェクト指向,
そんなあたりまえの行儀のいい退屈な言語だ.そんなものは 2 割にもみたない.
# まぁ,ちかごろは純粋なんちゃら〜ってほうがウケがいいみたいだが.
0913デフォルトの名無しさん
2005/10/21(金) 02:11:040914デフォルトの名無しさん
2005/10/21(金) 02:50:570915デフォルトの名無しさん
2005/10/21(金) 12:59:35純粋なForth?
0916デフォルトの名無しさん
2005/10/21(金) 15:08:09あなたが試してみた新しいパラダイムを2,3挙げてみて下さい。
0918デフォルトの名無しさん
2005/10/21(金) 22:54:18パラダイムでもないし、2、3と言っているのに1つだし、
全然ダメですねw
0919デフォルトの名無しさん
2005/10/22(土) 10:11:560920デフォルトの名無しさん
2005/10/22(土) 17:20:440921デフォルトの名無しさん
2005/10/29(土) 15:27:48lambdaが新しい予約語になってしまうのが嫌なのでは。
0922デフォルトの名無しさん
2005/10/30(日) 08:47:21何でもかんでも演算子にできりゃいいってもんでもないだろうに。
0923デフォルトの名無しさん
2005/10/30(日) 09:44:34test.kahua で
(use dbi)
(dbi-make-driver "pg")
すると
*** ERROR: Compile Error: Compile Error: define-module can't be used
within sandbox module
"/usr/local/share/gauche/site/lib/dbd/pg.scm":9:(define-module dbd.pg
(use gauche.co ...
と言われて使えないです。
Kahua から Gauche のライブラリ使うには working-directory 内の plugins
ディレクトリに (allow-module dbi) のように書いたファイルを置かなければ
ならないようです。
(use dbi) はその方法でエラーは出なくなったのですが、PostgreSQL のドラ
イバは、(allow-module dbd.pg) するだけじゃ駄目みたいで。
分かる方いたら教えて下さい。
0924デフォルトの名無しさん
2005/10/30(日) 21:02:59lambdaが新しい予約語になると
lambdaという変数名その他を使ってるプログラムが全部動かなくなる。
それが嫌なのでは。
0925デフォルトの名無しさん
2005/10/30(日) 21:08:070926デフォルトの名無しさん
2005/10/30(日) 21:35:41Common Lisp の &optional みたいにデフォルト値を書けるよう
({|x : 10, y : 20| ...} みたいな文法だっけ?) 拡張しようとしたところ、
これではデフォルト値の式に "|" 演算子が使えないことが判明。
そこでその言語のデザイナは悩んでいるわけだけど、Lisp みたいに
lambda (x, (y (x | #x20))) {...} みたいにすればいいだけだろうって話。
0927デフォルトの名無しさん
2005/10/30(日) 22:05:190928デフォルトの名無しさん
2005/11/01(火) 06:12:260929デフォルトの名無しさん
2005/11/01(火) 22:13:550930デフォルトの名無しさん
2005/11/01(火) 22:16:23京都へ行って写真撮ってくれば?
http://wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html
0931デフォルトの名無しさん
2005/11/01(火) 22:56:24クソワロタw
0932デフォルトの名無しさん
2005/11/03(木) 21:35:48http://www.kurims.kyoto-u.ac.jp/~cs/lambda.html
0933デフォルトの名無しさん
2005/11/06(日) 01:17:09ボロクソに言われてるぞ
0934デフォルトの名無しさん
2005/11/06(日) 01:25:14non-Lisperに何を言われてもLisperは動揺しない。
0935デフォルトの名無しさん
2005/11/06(日) 01:37:51そのスレはもう見るだけ時間の無駄だと思う。ちょっとでもひっかかる言葉が
あるとわらわらわらわらわらわらわらわらと厨ばかり涌いてくる。
0936デフォルトの名無しさん
2005/11/06(日) 03:04:37あのスレ見てそう思った
0937デフォルトの名無しさん
2005/11/06(日) 10:03:070938デフォルトの名無しさん
2005/11/06(日) 10:16:580939デフォルトの名無しさん
2005/11/06(日) 11:56:34空気読めないのはどうかと思うよなあ
ああいう場所にしゃしゃり出て、一方的に「禁止な」はさすがに引いた
0940デフォルトの名無しさん
2005/11/06(日) 15:12:390941デフォルトの名無しさん
2005/11/06(日) 16:11:02あれってやっぱLisp小僧だったんかな
ここには来てないよね?
0942デフォルトの名無しさん
2005/11/06(日) 19:08:140943デフォルトの名無しさん
2005/11/07(月) 19:30:21もうちょっとわかりにくくした方がいいのにね。
程度がしれる。
0944デフォルトの名無しさん
2005/11/08(火) 22:57:530945デフォルトの名無しさん
2005/11/09(水) 10:20:170946デフォルトの名無しさん
2005/11/09(水) 19:58:37tar xzvf Gauche-0.8.6.tgz
cd Gauche-0.8.6
gauche-config --reconfigure | sh; make; make -s check; make install
でも0.8.6ではデフォルトの文字コードが変わってるそうだから、
今まで --enable-multibyte=ほにゃら、をつけてなかったら
ちゃんと./configureを呼ばないとだめ。
あと拡張パッケージを入れてたら再コンパイル。
gauche-package install -r パッケージ.tgz
0947デフォルトの名無しさん
2005/11/09(水) 22:03:58昔からかもしんないけどWindowsMeではGaucheがエラーになるんだよなー。
Meで使えないNetApiBufferFree APIを呼んでる部分は適当に無効にしてるんだけど。
Wikiで報告はしてきたけど、河合タソはMeは持ってないみたいだし、
俺はヘタレだからソースを追ってもワケわかんねぇしで修正は期待できんかなぁ?
Meユーザーがいたら追試験ヨロ。
0948デフォルトの名無しさん
2005/11/09(水) 22:08:05とかだけではなく NT 系との挙動の違いもあるし修正は無理じゃねぇかなぁ….
0949デフォルトの名無しさん
2005/11/09(水) 22:48:570.8.5はMeでも動いてるんだよ。
BoehmGCのバージョンをアップデートしてるとか書いてあるから、
もしかするとGCの方の問題かもしれんな。
GCだけ古いのでコンパイルできるかちょっとやってみる。
0950デフォルトの名無しさん
2005/11/09(水) 23:57:08僕は--enable-multibyte=ほにゃら、をつけてなかったので、結論として下記になりますよね?
% gzcat Gauche-0.8.6.tgz | tar xf -
% cd Gauche-0.8.6
% ./configure
% make
% make install
結局バージョンアップというより、新規インストールという感じですね。
そしたら、0.8.5は上書きされるのかな?
よー分からん。寝よ。
0951デフォルトの名無しさん
2005/11/10(木) 02:57:20付けてたなら 946
付けてないなら --enable-multibyte=eucc-jp しないと同じにならないよ
0952デフォルトの名無しさん
2005/11/10(木) 02:58:250953デフォルトの名無しさん
2005/11/10(木) 03:01:580954デフォルトの名無しさん
2005/11/10(木) 12:18:24そうか。よくわかってなかった。これでいいですよね?
% gzcat Gauche-0.8.6.tgz | tar xf -
% cd Gauche-0.8.6
% ./configure --enable-multibyte=euc-jp
% make
% make install
0955デフォルトの名無しさん
2005/11/10(木) 12:27:330956デフォルトの名無しさん
2005/11/10(木) 19:22:32今はできないけど、将来的にC言語への変換機能を導入する予定はあるらしい。
0957949
2005/11/10(木) 19:23:210958デフォルトの名無しさん
2005/11/10(木) 19:28:58Schemeのプログラムを文字列として埋め込むんでよければ簡単に作れる。
ネイティブコード化という意味なら>>956
0959デフォルトの名無しさん
2005/11/10(木) 19:33:320960デフォルトの名無しさん
2005/11/10(木) 19:36:270961デフォルトの名無しさん
2005/11/10(木) 20:14:050962デフォルトの名無しさん
2005/11/11(金) 15:28:54構文のマニュアルとかが参照できるサイトを
探していますがググってもなかなか見つかりません。
どなたかご存知ありませんか?
0963デフォルトの名無しさん
2005/11/11(金) 15:44:58なぜ今さらLISP 1.5なのかは謎だが、LISP 1.5 Programmer's Manualが基本。
Amazonでも買えるが、ぐぐったらPDF版が↓に落ちてた。
http://www.mahalito.net/mirrors/community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
0965デフォルトの名無しさん
2005/11/11(金) 19:02:07これかな
ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3ascm2exe
0966デフォルトの名無しさん
2005/11/11(金) 23:12:16なぜかと言われると、今のLispとどのくらい違うか興味があったからです。
ありがとうございました。
0967デフォルトの名無しさん
2005/11/12(土) 00:35:360968デフォルトの名無しさん
2005/11/12(土) 01:11:59M 式を継承した言語のユーザーは自分が使ってるのが Lisp だとは思ってないよね。
0969デフォルトの名無しさん
2005/11/12(土) 01:18:060970デフォルトの名無しさん
2005/11/12(土) 01:27:330971デフォルトの名無しさん
2005/11/12(土) 08:17:04縦読みだな!
0972デフォルトの名無しさん
2005/11/12(土) 14:28:27記述するとき、Lisp自身の構文(S式)
と区別できるように考えたメタ記法だから
Meta Expressionだという理解でいいかな。
で、M式を「継承」した言語なんてどこにもないと。
0973デフォルトの名無しさん
2005/11/13(日) 10:22:320974デフォルトの名無しさん
2005/11/13(日) 20:43:55あっち系の方々の典型的な歳の取り方してぶよぶよに太ってしまわれたのが残念ではある。
Paul GrahamのサイトとかLisp Tシャツに使われてる先生のカッコイイ姿を想像して行くと
その変貌ぶりにさらに驚くと思う。
0975デフォルトの名無しさん
2005/11/13(日) 20:51:35出張ってきて、っていうか、今回のILCの開催地は先生の勤務先では?
0976デフォルトの名無しさん
2005/11/13(日) 21:22:260977デフォルトの名無しさん
2005/11/15(火) 19:03:45Javaに組み込み言語として使えるScheme処理系ってありませんか
あったら教えてください
Javaのプログラムを呼び出したり、あるいは呼び出されるようなSchemeが
ほしいんです
0978デフォルトの名無しさん
2005/11/15(火) 19:27:06Kawa, SISC, JSchemeあたり?
URLはぐぐってくれ。
0979デフォルトの名無しさん
2005/11/16(水) 11:55:29山ほどあります。お好きなものをどうぞ。
http://www.robert-tolksdorf.de/vmlanguages.html
0980デフォルトの名無しさん
2005/11/16(水) 12:26:400981デフォルトの名無しさん
2005/11/17(木) 00:53:02(f)がエラー無く評価できるためのfの条件,
((f) 3)をエラー無く評価できるためのfの条件
を説明せよschemeの課題がでまして,ありいろいろ試したのですがどうしても
not applicatableとエラーがでてしまいます
どなたかお教えくださいませ
0982デフォルトの名無しさん
2005/11/17(木) 01:20:01((f) 3): fは引数を1個以上取る手続きを返す引数を必要としない手続き
0983デフォルトの名無しさん
2005/11/17(木) 01:29:36どうもありがとうございます!
一つだけ疑問なのですが,((f) 3)は引数が一つなのにfが引数を1個以上
とる手続きを返しても大丈夫なのでしょうか?
0984デフォルトの名無しさん
2005/11/17(木) 04:15:490985デフォルトの名無しさん
2005/11/17(木) 09:56:06結構あっさり981超えちゃったなー。
ところで誰か次スレ立ててくれ。
俺はムリ。
0986デフォルトの名無しさん
2005/11/17(木) 15:27:02>>1 に書く過去ログPart9のURLわかる人いる?
0987デフォルトの名無しさん
2005/11/17(木) 15:39:180988デフォルトの名無しさん
2005/11/18(金) 01:27:54適当に当たりをつけてみたら発見しました。これだよね?
http://pc8.2ch.net/tech/kako/1069/10695/1069594582.html
サーバは過去ログ化作業時に板のあるサーバになる模様。
0989デフォルトの名無しさん
2005/11/18(金) 07:28:29そのURLをIEにコピペしてみたけど人大杉で確認することができず
専ブラだと何故か表示することができなかったんだけど
もしかして●持ってないと確認できないとかかな?
0990デフォルトの名無しさん
2005/11/18(金) 09:51:240991デフォルトの名無しさん
2005/11/18(金) 10:21:56Common Lisp, Scheme Part 14
http://pc8.2ch.net/test/read.cgi/tech/1132275726/
0992デフォルトの名無しさん
2005/11/18(金) 11:12:49乙です
立てようと思ってテンプレ用意してたけど出遅れちゃいました
0993デフォルトの名無しさん
2005/11/18(金) 14:14:28AutoCADではかつてカスタマイズにLISPが使われていたが、今ではVBAも広く使われて
いるらしい。そのVBA派によるサイト。
ギコでもわかる AutoCAD VBA
http://acesekkei.com/programming/vba/
いろいろ意見はあるだろうが、LISP退潮の実例の一つとしていろいろ考えてしまった。
0994デフォルトの名無しさん
2005/11/18(金) 16:00:56どんな言語であれ、言語人口やメンテ要員の確保とか考えると
この流れはある意味仕方ないかと。
例えばCLOSにも言える事だけどLISPでオブジェクト内のいりくんだ構造を
操作する場合エディタの支援があってもしんどいでしょ。
(目的操作 (参照 (参照 オブジェクト プロパティ名a) プロパティ名b))
と書かせるより演算子で
オブジェクト.プロパティa,プロパティb,目的操作()
と書けた方が直感的でわかりやすい。
こういうわずらわしさをLISPで適当なフロントエンドを作成して
でっちあげるような解決方法もあるんだろうけど、そこまでするなら
既に一般に広まってる適当な言語を採用した方が良いと判断したんでは。
VBA自体が特に優れているというわけではないので念のため。
VBAの採用はOfficeやActiveXなどゲイツ周りの影響でしょう。
0995デフォルトの名無しさん
2005/11/18(金) 16:48:10誰かWilikiとかで作らない?
0996デフォルトの名無しさん
2005/11/18(金) 17:31:54そういう Wiliki は flatline氏がだいぶ以前から提供しているのだが、
http://www.komaba.utmc.or.jp/~flatline/wiliki.cgi
作業者がいなくて、盛り上がってないのだ。
時間があったら自分もやりたいんだけど。
0997デフォルトの名無しさん
2005/11/18(金) 22:55:06アクセッサが不恰好になるのは、S式を使う限り、なかなか解決しがたい問題
ですね。オブジェクト指向が不可欠になった現在、これは大きなデメリットだ
よなあ。
Gauche:スロットアクセス
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3a%a5%b9%a5%ed%a5%c3%a5%c8%a5%a2%a5%af%a5%bb%a5%b9
0998デフォルトの名無しさん
2005/11/19(土) 11:06:32with-slots で
(with-slots (hoge fuge hage) object
(lambda () hoge))
を
(lambda (obj) (ref obj 'hoge))
が限度じゃないか?または、
(define-method* obj ( (hoge fuga hage) <XX>)
hoge)
とか define-method の文字の長さの方が気になるし。
または、マクロ言語(OOとする)
(let ((x 1)
;(y (lambda () |hoge|)) ;コンパイル不可?
)
(OO obj
(display |hage|)
; (display (y))
))
とか。
データ構造と関数構造を分離しないと新たに面倒な問題が発生するし。
0999デフォルトの名無しさん
2005/11/19(土) 14:13:351000デフォルトの名無しさん
2005/11/19(土) 14:14:08Common Lisp, Scheme Part 14
http://pc8.2ch.net/test/read.cgi/tech/1132275726/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。