LISP Scheme Part2
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNG前スレ
http://piza2.2ch.net/test/read.cgi/tech/987169286/
0002デフォルトの名無しさん
NGNG日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
プログラミング言語Scheme(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。
Lisper への道(日本語)
http://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
Practical Scheme(日本語)
http://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書があります。
SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。
Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。
お隣りのプログラマ板のLISPスレです。
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=963134110
0003デフォルトの名無しさん
NGNGCommon Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。
アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
日本語訳はここ以外にもあるそうです。
Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/
0004デフォルトの名無しさん
NGNG>http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
この犬飼訳はひどいよ〜。
proper tail-recursion 「正しい終端再帰」(「真の」だろ)
conditional expression「条件節」(条件式だろ)
binding construct「バインディング構成手続き」(「バインドする構文」だろ)
exactness「完全性」(「正確さ」だろ)
formal syntax and semantics「意味論と言語仕様」(をいをい‥)
かといって村上訳
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
もひどいがなー。まだ犬飼訳よりましだろー。
0005山神竜一郎
NGNG0006Lisp板の753
NGNGよろしくお願いします。
0007デフォルトの名無しさん
NGNG得る事はできないでしょうか?最初はリストのポインタのアドレスをそのまま
hash値にすれば速いかな、と思っていたんですが、後々gcを搭載する時に、
ポインタ値の比較をやっていたのでは、移動ができない事に気付きました。
(マークスイープのgcならこれでもいいんですが。)
シンボル探索を線形探索→hash(チェイン法)にしたら、とんでもなく
速くなったので、リストに対してもできないものか、と考えています。
carやcdr方向の長さとかで区別するしか無いでしょうか?
0008デフォルトの名無しさん
NGNG`(wang (addr (car ,wff) (line 0 nil nil nil nil)))
)
. reference to undefined identifier: defmacro
> (define-macro prove (wff)
`(wang (addr (car ,wff) (line 0 nil nil nil nil)))
)
define-macro: malformed definition
>
結論!!Ruby戦隊に荒らされて騙されたなり
>>7さん
クダ−方向のってよく解りません
cdr vector???
0009デフォルトの名無しさん
NGNGXLISP-PLUS version 3.04
Portions Copyright (c) 1988, by David Betz.
Modified by Thomas Almy and others.
XLISP-STAT Release 3.52.14 (Beta).
Copyright (c) 1989-1999, by Luke Tierney.
には、defmacroがありますが…
0010Lispで方言はもうやめよう委員会
NGNGすいません今Schemeにはまってます
0011デフォルトの名無しさん
NGNGああ、
> 今Stuart C. Shapiro著
> 松田利夫訳のLISPによる人工知能の基礎技法
> の序章を、目を皿の様にして読んでるのですが
> 共立出版の本て、どれも解りずらいです。
は、Scheme(やCommon Lisp)で頑張った方がいいと思う。
たしか、これSNOBOLやPLANNER何かも使う本だよね。
0012Lispで方言はもうやめよう委員会
NGNGそうです。
SBOBOL4とMICROPLANNERです。
あとLispです。
なんか表紙が赤い本です。
0013名無しλ
NGNGGCのたびにハッシュ表をスキャンして、GCで
コピーされたハッシュキーだけハッシュしな
おすのが定石なり。
キーが長寿命領域に逝ってしまえばrehash回
数は激減するのでだいじょうぶ。
#しかし厨房が増えたな…fexprなんてコン
#パイラを使わない時代の化石だろー
0014デフォルトの名無しさん
NGNG> #しかし厨房が増えたな…fexprなんてコン
> #パイラを使わない時代の化石だろー
ん? lambdaに&rest、&optionalがない、macroがない時代の化石、でしょ?
それに、FEXPRを使っている本のprogramを動かしてみたいようだから仕方がないよ。
# Winstonの"LISP"という手もあるが…
0016中年の厨房
NGNGlexprの解説きぼんぬ
↑
ここ風
0017デフォルトの名無しさん
NGNGこのプログラムのその後の経過についてご存知の方
いますか?
0018デフォルトの名無しさん
NGNGType HELP for help.
Assert --(I love ya)
Assert --question
Question --(we love fuck)
Clause 1
(I LOVE YA) Clause 2
(OR (NOT (WE #:G1 FUCK)) ($SUCCESS$ (WE #:G1 FUCK))) Resolution
(OR ($SUCCESS$ (I LOVE FUCK)))
($SUCCESS$ (I LOVE FUCK))
Enter QUIT to quit, MORE for more solutions --
動かし方はこんな感じです。
0019名無しλ
NGNGlexprって、引数が普通に評価して渡される、
可変個引数の関数のこと。MacLisp。
(DL LIST (X) X)
みたいな感じ。(Xのまわりのカッコは確か
要ったと思う。)
002017
NGNG引数の数は固定って事はlexprはexprよりも高機能って事ですね?
0021デフォルトの名無しさん
NGNGコンパイルしても、引数へのアクセスがスタックポインタ+オフセットにならないわな。
引数列をリストで渡して貰うわけだから。セルも消費するし。
まあ、可変個引数にしたい場合、(Lisp流儀だと)仕方がないわけだけど。
高い低いというより目的に合っているかどうかだな。
0022デフォルトの名無しさん
NGNGコンパイルして実行してみたらスタックエリアオーバーフロウ
みたいな?
00237
NGNG参考になりました。
やっぱりポインタ比較が速いですよね。
0024デフォルトの名無しさん
NGNGどうやったらメモリー馬鹿食いしないかも
考えておいて
0025デフォルトの名無しさん
NGNGはたして、LISPは言われている程にメモリを馬鹿食いするんでしょうか?
データ=コードという事実や、そのほとんどがリストなので、BASICなど
に比べるとやはり・・、ということになるんでしょうか。
(LISPもコンパイルすれば状況は変わると思いますが。)
0026デフォルトの名無しさん
NGNGXlispをPC9801F2に移植した事があるけど
あっと言う間にビデオRAMまで住所が降りて画面が
真っ赤になった事があります。
ただTurbo C2.0でコンパイルしたら走ったんで
移植とは言えないかも知れないけど・・・
0027デフォルトの名無しさん
NGNGDOSの頃の話?
>あっと言う間にビデオRAMまで住所が降りて画面が
こういうのって自然に起きるものなのかなあ・・・
002826
NGNGintel 8086でWindowsが走る訳無いじゃん
疲れたので今日からこっち行く。
http://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm
自然に起きるも何もソフトウェア工学ではLispは化け物だよ。
002927
NGNGただ単に暴走してるだけなんじゃないのかなぁ?、って事なんだけど。
なんでWindowsの話?
0030デフォルトの名無しさん
NGNGいつでもシステムは出来る限りシンプルに設計されるべきだ。余分な複雑さは見つけ次第取り除かれる。
リファクタリング(Refactoring)
2重コードを取り去り、コミュニケーションを改善し、単純化し、柔軟性を加えるために、プログラマは、システムの動作を換えることなくシステムを再構成する。
0031デフォルトの名無しさん
NGNGバカだなお前
回線切って考えてから
首吊って氏ね
0032デフォルトの名無しさん
NGNG/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
.∧_∧ | >>31 Ruby厨な人さぁ こんなレスばっかりしてるから |
( ´∀`)< 厨房って言われちゃうんだよ |
( ∧∧ つ >―――――――――――――――――――――‐<
( ゚Д゚) < おまえのことを必要としてる奴なんて Ruby使いにすら |
/つつ | いないんだから さっさと回線切って首吊って氏ね |
\______________________
0033デフォルトの名無しさん
NGNGxlispって(藁
すぐxschemeになったよね。xlispは最初だけでしょ。
そういう腐ったOS上の太古の処理系のチェックが甘かっ
たからって何で「Lispはメモリを馬鹿食いします」に
なっちゃうわけぇ?
SunのJava x86でconsセル表現すると、32バイト必要。
Rubyだと20バイト。Lispなら8バイト。
で、U-BASICでconsセル表現するにはどうやるの?
何バイトいるの? (そもそも出来ないんでは(藁))
0034デフォルトの名無しさん
NGNG00 00 00 00 00 00 00 00か
FF FF FF FF FF FF FF FFしか
入ってないはずのメモリーの住所が文字列だらけに
なったよ。っとっとっと 止めないでくれ さくら!
お兄ちゃんはね UBASICの世界へ旅立つんだ〜
0035デフォルトの名無しさん
NGNG(define v 5)
(call/cc (lambda(x) (set! cc x) v))
(set! v (+ v 1))
(cc v)
どうしてこういうソースで無限ループに陥らないんですか?
(cc v)を評価した結果、そのまま進むとまた(cc v)に来ると思うんですが?
0036デフォルトの名無しさん
NGNG( ´∀`)< 再帰処理したいのかモナー
( ) \_____
| | |
(__)_)
0037デフォルトの名無しさん
NGNGちょっと待ってね今リストをコピペしたとこ
0038デフォルトの名無しさん
NGNG(( ノ゚Д゚)(set! cc x)) てんとう虫出るぞ ゴルア
set!: cannot set undefined identifier: cc
>
0039デフォルトの名無しさん
NGNGわしはやっぱりUBASICに帰るのだ
あとは名無しλさんとか、他の天才さん達にまかせるのだ
これでいいのだ
0040デフォルトの名無しさん
NGNGXLisp-statは今統計解析で大活躍なのだ。
それよりJavaなんてトロ臭いもの本気でこれからも使って
行こうと思ってるのか?
さあ 答えるのだ。
0041デフォルトの名無しさん
NGNG少なくとも9〜12byteは必要でしょう。
8byteで済むっていうのは、ポインタに何か細工してるか、
識別子のテーブルを別に作ってるんでしょうね。
0042デフォルトの名無しさん
NGNG(define cc '適当な初期値)
を忘れてる
0043デフォルトの名無しさん
NGNGトップレベルじゃなくて、関数の中でやってみれば?
(define (f)
(define cc '())
(define v 5)
(call/cc (lambda(x) (set! cc x) v))
(display v)(newline) ;チェック用
(set! v (+ v 1))
(cc v)
)
(f) ;無限ループ
0044デフォルトの名無しさん
NGNG(let ((cc '())(v 5))
(call/cc (lambda(x) (set! cc x) v))
(display v)(newline)
(set! v (+ v 1))
(cc v)
)
0045デフォルトの名無しさん
NGNGHe told me Thanks but no more for me." : GOSUB 43 : GOSUB 44 : PRINT "カコイイ"
0046デフォルトの名無しさん
NGNGXlisp-statのソース落ちてるから自分でヤホー検索して拾って調べるのだ。
0048Ruby初心者
NGNGいまどきSchemeなんて時代遅れ。
0049デフォルトの名無しさん
NGNG( ´∀`)< >>48 オマエモナー
( ) \_____
| | |
(__)_)
0050デフォルトの名無しさん
NGNGここはRubyなんてやってる超初心者の来る所では無いのだ。
己の恥に、気付く前に退散しろなのだ。
0051Ruby初心者
NGNGじゃあ、実用的なアプリケーションを挙げてみてください。
何もないでしょう(嘲笑)
0052Ruby初心者
NGNGと思うんですよ。
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056Ruby初心者
NGNG0057デフォルトの名無しさん
NGNG今A.Iダッチワイフちびオメコちゃんのプログラムを
DrSchemeで書いてるから、もうちょっと待ってね!
>>55
放置しちゃ可哀想でしょ?
折角Schemeに嫉妬してるんだから・・・
0058デフォルトの名無しさん
NGNGhttp://homepage2.nifty.com/tamitu/qa2.lsp
ってLISPのコードじゃん。
Schemeコードに変換するのはそんなに難しくはないけど。
0059デフォルトの名無しさん
NGNGってわけでもない人は修行が足りません。
0060デフォルトの名無しさん
NGNGやってやって♪そしてここにコピペして〜
今Schemeやってる暇無いのよ(泣)
早くSchemeに本格以降したいです。
0061デフォルトの名無しさん
NGNG一つではないかと
006360
NGNG御変換すいません。
0064デフォルトの名無しさん
NGNGby はぎゃ先生
ですな(ニヤリ
0065デフォルトの名無しさん
NGNGLispからSchemeへの移行は、ある意味>>30を実現している。
0066デフォルトの名無しさん
NGNGはぎゃ先生って誰?解説きぼんぬ
0067デフォルトの名無しさん
NGNGhttp://nicosia.is.s.u-tokyo.ac.jp/welcome-j.html
>>61は上のページにある"H君への手紙: 天才."からかと。
http://www.google.com/search?q=cache:UMgsoaahNsA:nicosia.is.s.u-tokyo.ac.jp/welcome-j.html
ついでにここも見るよろし。
萩谷昌巳は湯淺太一と一緒にKCL(GCL)を作った人でもある。
0068デフォルトの名無しさん
NGNGところでこれ、なんのプログラムですか?
0069デフォルトの名無しさん
NGNG言語意識のシミュレーションの基礎研究かと思われ。
Assertから(This is a pen)
と入力して
Questionと括弧を付けずにタイプして下さい。
それから(I love you)
と打って下さい。
パソちゃんは、知らない事にはI don't know ^^;
と答えるはずです。
でも
(Is this a pen)
と聞いてあげて下さい。
むにゃむにゃ
0070デフォルトの名無しさん
NGNGAssert modeではコンピューターに与える知識としての
言葉は単語1個に付き1回がコツです。
wasだろうがisだろうが複数回定義するとG1,G2と
表示されコンピューターが何を言っているのか
わからなくなります。
baseで確認しながら
helpをタイピングすると一応ヘルプ画面もあります。
>>67
Thanx!
0071デフォルトの名無しさん
NGNGMITのAI LAB.で作る言語は
CONNIVER とか PLANNER とか
「考えるもの」系の名前が
伝統だったんで、
「SCHEMER」とつけようとし
たら、ファイル名の制限
(6文字+3文字)でSCHEMEに
なっちゃったってスチール
君が言ってた。
0072プレゼントのお知らせ♪
NGNGSchemeに移植に成功したらmp3全部持っていっていいですよ^o^/
http://homepage2.nifty.com/tamitu/
>>71
なんて発音するんですか?
0073デフォルトの名無しさん
NGNG叩かれ覚悟のカキコ!
0074デフォルトの名無しさん
NGNGCONNIVER も PLANNER も 6 文字超えてるやん…
0075デフォルトの名無しさん
NGNGなんで みんなsageてんの?
0076デフォルトの名無しさん
NGNG0077デフォ@Part2は進むの早いな
NGNGSchemeのことをもっと知るために、前スレ最後の方で挙がってた
「Schemeの過去・現在・未来」前後編をコピってきました。
根底に、オブジェクト指向的考え方があったとは…
意外でもあり、また、当然のような気もしました。
あと、>>74ですが、
www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/scheme/part1/faq-doc-14.html
を読むと、PlannerやConniverはPLNRとかCNVRと省略されてるみたいです。
確かに、これじゃ、読めないわな
0078デフォルトの名無しさん
NGNGおー、そういやガッコのディスクあさってたら
PLNR.X っていうファイルがあったけどあれは
Planner言語ダッタのカー
SHRDLUっていうディレクトリの中にあった。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi/tech/1002377328/117
どう思いますか?
0081デフォルトの名無しさん
NGNGSHRDLUよ、人の望みの喜びよ、ってか。
http://hci.stanford.edu/~winograd/shrdlu/
からダウンロードできるよ。
それよりどこかにGEDANKEN落ちてないか?
0082DrScheme歴8日
NGNGをコピペしたらDrSchemeで走っちゃった^^;
HDがカラカラ言ってる
誰か止め方教えて
0083DrScheme歴8日
NGNG始めて走った
0084DrScheme歴8日
NGNG0085DrScheme歴8日
NGNG放置
>>81
いや〜んProxyはねてるぅ
GEDANKENって何ですか?
0086デフォルトの名無しさん
NGNGドイツ語です。
008785=86
NGNGGEDANKENて言うLisp関連の何かがあるのかと思いました^^;
0088デフォルトの名無しさん
NGNG無限ループの終了方法が良くわかりません。
要操作方法のヘルプ日本語化→DrScheme
0089デフォルトの名無しさん
NGNG行うとDrSchemeの窓も閉じなくなる程OSが重たくなります。
かなりのハードウェアリソースを消費していた様です。
0090デフォルトの名無しさん
NGNG終了はCtrl+C
0091Tamitu
NGNG別にWindowsで走って更にMacで走ってUNIXでまでも走る
必要無いからじゃないの?
XLispにしろDrSchemeにしろ ある目的の為に世界で一番優れた
アルゴリズムを見つけ出すのが目的の1つな訳だから・・・
javaやってる人は、ネットしかしない人を、相手にしてあげて。
>>90
Uploadして直リンは、礼儀かも
0092デフォルトの名無しさん
NGNGデバガとかインタフェースがなってないから無理よ。
まだ自己満足的な実験対象でしかないんで。
今の所8086でも動く。
気が向いたら公開するかも。
0093デフォルトの名無しさん
NGNGWindowsはschedulerがあまり賢くないから、
暴走するthreadがCPUを独占する事が良くある。
;; 嘘みたいな話だけど、priorityが固定なのだ…
;; スレ違いでsage
0094デフォルトの名無しさん
NGNGLispのconsセルはポインタ2つきっかりになるのが普通だ
よ。Javaとかと違って型の種類が固定だから、ポインタの
下3ビットとかに型情報をエンコードする。特にconsセル
と小さい整数あたりは最も効率よい表現を割り当てる。
0095デフォルトの名無しさん
NGNG普通なのか?
移植性は?
0096デフォルトの名無しさん
NGNGそんなことしたら値が参照できなくなるだろ
0097デフォルトの名無しさん
NGNGオブジェクトの配置を8バイトアラインメント前提にして、
下3bitマスクすれば、まあできそうだけど、実際そういう事
してる処理系あるの?
システムからメモリブロック受け取って、その開始アドレスが境界
とずれてたら、使用アドレスを調整(±8byte)したりするのかな?
ca...drとか、1参照毎にマスク計算入るから遅くなりそうだけど。
0098BASICER
NGNGPC9801F2でも動くのだな
Xlispに喧嘩を売るのだ
どれどれ見せなさいなのだ
自己満足は他己満足なのだ
0099デフォルトの名無しさん
NGNGマスクなんかしないって。オフセットを引いてインデック
スモードでアクセスするだけだから、遅くならない。
RISCだと、同時に型チェックも兼ねられる(オフセットが
合ってなければバスエラーになる)。
「下2ビットゼロ」はfixnumとしておけば、整数演算も速
くて便利。配列アクセス時もシフト不要。SPARCの命令セッ
トはこれを考慮してる(taddcc命令は、下2ビットがゼロで
ないとトラップが起きる)。
0100デフォルトの名無しさん
NGNGCISCだとマスクいるだろ。RISCでも、バスエラーでチェックできるのは下2ビッ
トだけと思われ(下3ビットはだめだろ)。
>>95-97
これは「タグ」と言って動的型の言語だと常識だよ。ポインタたぐらないと型
チェックできないような処理系はおもちゃ。
0101デフォルトの名無しさん
NGNG>オフセットを引いてインデックスモードでアクセス
って、マスクとるのと同じ事だと思うんですが。
できればC言語レベルでどうやるのか簡単に書いて欲しいです。
いまいちのみこまません。
typedef struct _cell {
struct _cell *car;
struct _cell *cdr;
} cell;
#define car(p) ((p)->car)
#define cdr(p) ((p)->cdr)
こんな感じで。
0102101
NGNG010399
NGNGtypedef union _obj {
struct _pair *pair; struct _symbol *symbol; ... } obj;
typedef struct _pair { obj *car, *cdr; } pair;
#define TAGOF(x) ((unsigned long)(x)&0x3)
#define IS_FIXNUM(x) (TAGOF(x)== 0)
#define IS_PAIR(x) (TAGOF(x)== 1)
#define IS_SYMBOL(x) (TAGOF(x)== 2)
#define IS_MISC(x) (TAGOF(x)== 3)
#define CAR_UNSAFE(x) (*(obj*)(((char*)(x))+offsetof(pair,car)-1))
#define CDR_UNSAFE(x) (*(obj*)(((char*)(x))+offsetof(pair,cdr)-1))
#ifdef HARDWARE_TYPE_CHECK
#define CAR(x) CAR_UNSAFE(x)
#define CDR(x) CDR_UNSAFE(x)
#else
#define CAR(x) (IS_PAIR(x)?CAR_UNSAFE(x):type_error())
#define CDR(x) (IS_PAIR(x)?CDR_UNSAFE(x):type_error())
#end
>>100
>これは「タグ」と言って
正確には「tagged pointer」な。
ちなみにオブジェクト側に型情報書いといても(object
tag)ca..drとかの時には毎回チェックがいるぞ。もっと遅
くなる。
010496
NGNGあ、もしかして自分でヒープマネージャを作って、
alignmentをあわせるようにするってことですか?
普通にnew/malloc使うこと考えてた・・・
010599
NGNGtypedef union _obj {
struct _pair *pair; struct _symbol *symbol; ... } obj;
は
typedef union _obj {
struct _pair pair; struct _symbol symbol; ... } obj;
のまちがい。すまそ。
0106101
NGNGありがとうございます。
「マスク取る方法」ってのはこんなのを想像してましたが、結構近かった様です。
typedef struct _cell {
struct _cell *car;
struct _cell *cdr;
} cell, *cellptr;
typedef int p2i_t; //ポインタと同じサイズの整数型
enum {TYPE_ATOM, TYPE_CONS}; //型
#define flags 7 //下位3bit 1bit=型 残り2bit=gcとか、他の用途
#define type_flag 1 //cons or atom
#define mask (~flags)
#define typeof(p) ((p)&type_flag)
#define car(p) ((cellptr)((p2i_t)((p)->car)&mask))
#define cdr(p) ((p)->cdr)
#define atomp(p) (typeof(p) == TYPE_ATOM)
#define consp(p) (typeof(p) == TYPE_CONS)
010799
NGNGんー、cons呼ぶたびにmalloc(sizeof(pair)してちゃ遅す
ぎる(しメモリもムダだ)と思うぞ。mallocはいろんな大き
さ扱うためのオーバーへッドがあるから。
最近の処理系だとこんなじゃないか?
#define SET_TAG(x,tag) ((object *)((unsigned long)(x)+(tag)))
obj *cons(obj *car, obj *cdr)
{
obj *value;
if (heap_ptr + sizeof(pair) > heap_limit) {
gc();
}
value = heap_ptr;
heap_ptr += sizeof(pair);
value->pair.car = car;
value->pair.cdr = cdr;
return SET_TAG(value, CONS_TAG);
}
まあ、コンパイルコードだと、上をインライン展開してあ
るだろうが…
0108BASICER
NGNGCISCとRISCね
はは〜ん だからJavaは馬鹿トロイのか
010996
NGNGありがと。根本的に自作Schemeを書き換える必要が出てきました。
遊び処理系だから別に良かったんですが、、、
consセルで16バイト(car/cdr/type/virtual) しかもその都度newしてたんで。
0110101
NGNG必要無かった、、。
>103
#define CAR_UNSAFE(x) (*(obj*)(((char*)(x))+offsetof(pair,car)-1))
なんでここで-1してるの?って思ったら、
pair型を前提としてるからか。
0111100
NGNGheapの最後のページをmprotect()で書き込み禁止にしとけば、if文は不要と思
われ。(RISCのバスエラー使うぐらいなら、これも使ってよいでしょー。)
consは、だからコンパイルすると3-4命令くらいかな。(heap_ptrは普通レジス
タにグローバルに割り当てる。)
0112デフォルトの名無しさん
NGNGさすがBASIC厨房。
Javaのような静的型付き言語だと、ダウンキャスト時以外
型チェックの必要がないのだよ。だからtagもあまり重要
でない。
>>109
virtualでやるのはそんなに悪くない選択だぞ。ただfixnum
演算でゴミが出まくるようだと、ちとつらいが...
0113デフォルトの名無しさん
NGNGconsの使用量が2/3(9〜12byte->8byte)になるなら、
やる価値あるかも。
0114デフォルトの名無しさん
NGNG>virtualでやるのはそんなに悪くない選択だぞ。
でもnewだと遅いよね。
Pairクラスのvoid *operator new(size_t)をoverrideして、自家製の
アロケータに入れ替えちゃうのが良いと思われ。
>ただfixnum演算でゴミが出まくるようだと、ちとつらいが...
±1000くらいはあらかじめ割り付けて、配列に取っとく。
結果がその範囲なら、割り付けずに配列の中の値を返す。
011596
NGNG0116デフォルトの名無しさん
NGNG011796
NGNG2bit 型情報で、1bitGCに割り当ててGCをmark-and-sweepにするか。
0118デフォルトの名無しさん
NGNGmark and sweepでも、オブジェクト内にマークビット持つ
必要はない。むしろ外にビットマップ(orバイトマップ)で
持った方がGC時にキャッシュを汚さずにすんで速い。
>>113
スペースよりむしろ速度に効果大。メモリアクセス回数が
激減するので。
0119デフォルトの名無しさん
NGNGmark-and-sweepだと移動が無いから速いでしょう。
でもフラグメントが・・
これを踏まえると、
余裕があったら配列関係(文字列、シンボル、...)の時はstop and copy
consやらその他の時はmark-and-sweep
でしょうか。
0120デフォルトの名無しさん
NGNG>外にビットマップ(orバイトマップ)
これは良い考えですね。
いままで思い付かんでした。
012196
NGNGhttp://www.hitachi-sk.co.jp/Products/SuperJ/gabeji.htm
0122Part2の1
NGNG・gcがらみのバグ対策
基本的な事かもしれないですが、良く引っかったバグなので。
CなどのLISP実装言語側でcons演算+セル生成を何も考えずに行なおうとすると、
その処理が終了するまでに空きセルが尽きてしまい、gcが発動してしまう
恐れがあります。その事態が起きると、操作中のconsの値が変化している、
もしくは無効になっている可能性があるので、あらかじめ処理中に生成する
consの数を数えておいて、空きセルがそれよりも少なかったら処理を行なう
前にgcを強制起動させた方がいいです。この方法は必要セルを数える事で、
2重管理になってしまい面倒ですが、プログラムが複雑になる事がありません。
または、ポインタのポインタを使い、演算を行なうconsを参照している
ポインタを全てフックしておいて、gc時に一緒に値を書き換えます。
余計なロジックが入りますが、一度に生成するconsがそんなに無いならば
こちらが楽かもしれません。
また当然ですが、gc起動後にセルが必要量存在していなければこの対策を
行なっても意味が無いので、満たなかったら新たにメモリを割り当てます。
・・というわけで演算中のgc起動は、不具合の元になるのでご注意を。
0123COBOLER
NGNGhttp://mentai.2ch.net/test/read.cgi/prog/963134110/l50
0124デフォルトの名無しさん
NGNG> consセルで16バイト(car/cdr/type/virtual) しかもその都度newしてたんで。
newって、defaultのやつ?
自作cons poolから取ってくるようにoverrideしたやつ?
defaultのやつなら、memory管理用のtagが付いて更に4〜8byte費やしているよね。
0125デフォルトの名無しさん
NGNGconservative GC だとそれは必要ないんじゃないの?
ポインタを全部フックしておくやり方は一部の実装では使われているが、
そういうのは大抵遅いし、全体としては少数派なような。
0126デフォルトの名無しさん
NGNGこの問題は致命的な割に処置が甘くなりがちな気がする。
というか、全く処置を行なってない処理系がありそう。
実行速度に気を取られ、開発初期段階からメモリブロックを
大きく確保しすぎて、偶に起動されるgcによる破壊に気付かず、
「原因不明のバグ」としてしまうケース。(w
0127デフォルトの名無しさん
NGNG自作gcにありがち。
0128デフォルトの名無しさん
NGNG同意。いかにもシロートなやり方。
処理の途中でGCが起きるなんて当たり前でしょーが。
0129
NGNGSCMでもDrSchemeでも "unbound variable" なんですけど…。
どの処理系なら実装してるんでしょう?
解説ページもあんまりないし、一般的じゃないのかなぁ。
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNGR5RSだとあまり良く分からなかったので
0132デフォルトの名無しさん
NGNG(defun remove-success (clause)
(cond
((atom clause) clause)
(t (remove nil (remove '$success$ clause :test #'deep-member)))
)
)
ここってremoveがカラになるの?
???
0133デフォルトの名無しさん
NGNGプログラミング言語scheme ピアソン・エデュケーション
ケント・ディヴィグ著 村上雅章訳
0134131
NGNG(define cc '())
(call-with-current-continuation
(lambda (x)
(begin
(set! cc x)
(display "test1")
(display "test2"))))
(cc #t)
↓コレがだめな理由がわかりません。
(define cc '())
(begin
(call-with-current-continuation (lambda (x) (set! cc x)))
(display "test1")
(display "test2"))
(cc #t)
大域では継続を束縛できないのですか?
0135デフォルトの名無しさん
NGNGその処理系は、
トップレベルでは環境だけ保存してるって事かな?
beginをletに変えてローカルフレーム作ってやればうまくいくかも。
0136デフォルトの名無しさん
NGNGconservativeじゃないgcの場合はどうするの?
0138BASICER
NGNGなんかリアルタイムマルチタスクの処理の一つが放置されているのだ
0139デフォルトの名無しさん
NGNGCで書くというやり方に固執する場合、
C処理系になるべく依存しないようにするには、
GC対象のオブジェクトはすべて、
ソフトウエアスタックや特定の大域変数から
たどれる場所に置いとく必要がある。
CのスタックやCPUレジスタをGCが直接見て、
しかもconservativeでないやり方も
当然ありうる。GCが見るルートはあらかじめ
決めておく。オブジェクトが動くかも知れない
ことを、プログラマがちゃんと意識して書く。
Lispコンパイラを使ってライブラリを
Lisp自身で書くなら、特段の配慮は必要ない。
スタックフレームのレイアウトやレジスタの使い方は
コンパイラが当然知っているから。
GCまでLispで書くのはかえって面倒だろうけど、
Lisp関数ライブラリやインタプリタは
Lispで書くのが当然いちばん楽。
0140デフォルトの名無しさん
NGNG結局見つからないって事は、
defmacroの方がつぶしが効くからだな。
0141131
NGNG(define cc1 '()) => #<done>
(define cc2 '()) => #<done>
(call-with-current-continuation (lambda (x) (set! cc1 x)))
(begin
(call-with-current-continuation (lambda (x) (set! cc2 x)))
(cc1 #t)
(display "test1")) => #t*1
(display "test2") => test2#<done>
(cc2 #t) => #t*2
(display "test3") => test3#<done>
*1 どうしてココでの評価値が #tなのか
*2 どうしてココで無限ループに陥らないのか。
0142デフォルトの名無しさん
NGNGしたときにcc1に束縛されている継続は、
引数をただ返すだけの継続だよ。
(call-with-current-continuation (lambda (x) (set! cc1 x0)))
が(begin)の中に入ってる絵を想像してるんじゃないの?
0143142
NGNG0144デフォルトの名無しさん
NGNGトップレベルの式の継続は、
(define print-read-eval
(lambda (x) (display x) (newline)
(print-read-eval (eval (read) (interactive-environment))))
みたいなものだと思えば良い。
cc1にはset!でprint-read-evalが入ると思えば良い。
(cc2 #t)すると、(cc1 #t)が実行されるから、
#tを表示した後、新たにreadが始まる。
さっきreadしたものは関係ない。
(read)は呼び出すたびに違う値を返す関数だから。
0145デフォルトの名無しさん
NGNGだもんで、ドスパラでWindows2000のマシンを注文した。ついでに17インチ液晶モニターも。15マソの出費だ。
こう書くとかならず「Linux使えやゴルア」というカキコがあるが、LinuxなんてCとGuileとviとEmacs Lispが使いこなせないとまともに使えない。
わかんないことがあるとすぐ「ソース読めゴルア」の世界だし。
漏れはSchemeの勉強がしたいだけだしSchemeに集中したいので、余計な作業が増えるのはいやなのだ。
sage.
0146デフォルトの名無しさん
NGNGお金持ちやの〜
0147デフォルトの名無しさん
NGNGセキュリティパッチが出てないか頻繁にチェックしないといけないし。
ネットワークの設定変えただけでリブートしないといけないし。
わかんないことがあるとすぐ「インストールし直せゴルア」の世界だし。
漏れはSchemeの勉強がしたいだけだしSchemeに集中したいので、余計な作業が増えるのはいやなのだ。
0148デフォルトの名無しさん
NGNG>>147 みたいな不毛な論争が始まるから、あんま挑発的なこと書くなよ…ハァ
0149131
NGNG> (begin)の中に入ってる絵を想像してるんじゃないの?
引数を返す継続と言うのが分かりません。
(begin)の中と外では動作が違うということですか?
もし、違うとしたら、それは必然的にそうなるものなのか、
例外としてそうするのか、教えてください。
> さっきreadしたものは関係ない。
継続は、評価すると束縛しなおさない限り、
普通の実行コンテキストと同じように変化しつづけるものということですか?
#他言語のgoto先のラベルみたいに。
0150131
NGNG0151デフォルトの名無しさん
NGNGMIT Schemeはどうなん?
0152デフォルトの名無しさん
NGNGPetite Chez Scheme と ChezEditはいかがですか。
http://www32.tok2.com/home/nak/eucs/scheme/
に紹介があります。Win2000でもOKです。軽快ですよ。「プログラミング言語scheme」 ピアソン・エデュケーション
のケント教授が主要開発メンバーです。
0153142
NGNGA:
(call-with-current-continuation (lambda (x) (set! cc1 x)))
と
B:
(begin
(call-with-current-continuation (lambda (x) (set! cc2 x)))
(cc1 #t)
(display "test1"))
との間に連続性はないわけよ、インタラクティブ環境だと。
インタラクティブ環境でなく、逐次実行しているコンテキスト、たとえば
(begin
(call-with-current-continuation (lambda (x) (set! cc1 x)))
(call-with-current-continuation (lambda (x) (set! cc2 x)))
(cc1 #t)
(display "test1"))
とか
(begin
(call-with-current-continuation (lambda (x) (set! cc1 x)))
(begin
(call-with-current-continuation (lambda (x) (set! cc2 x)))
(cc1 #t)
(display "test1")))
だと連続性があるから、ループになるわけ。
0154136
NGNG説明がいまいち掴めないんですが、
結局 >>122 の後者の方法を行なうって事でいいんですか?
>CのスタックやCPUレジスタをGCが直接見て、〜
のあたりも良くわかりませんでした。
簡単にCのスタックを辿ることが可能なんでしょうか?
で、最後のLISPonLISPの話はわかりました。
0155131
NGNGごめんなさい、そしてありがとう。
疑問が一気に氷解しました。
トップレベルとはその名のとおり、トップレベルで、
さらに上にrootがあるわけではないってことですね。
それぞれの手続きがルートと言うことで。
0156デフォルトの名無しさん
NGNGANSI C で書かれた仮想マシン上で動くんみたいよ。
バイトコードコンパイラはScheme自身で書かれているって。
(なんか作者はもう他の言語に興味移ってやる気ないみたいだけど)
0157デフォルトの名無しさん
NGNG正直、そこまでしてSchemeに集中したいというのはスゴイと思った。
「Schemeのみ」というこだわりとカネの使い方からして老後の趣味っぽいけど。
0158デフォルトの名無しさん
NGNG>>157
きみら15マン程度の現金で金持ちかよ。
それじゃACLも買えないよ。
0159デフォルトの名無しさん
NGNG速いんじゃない?マスクすら必要ないし。
0160デフォルトの名無しさん
NGNGその方法はメモリがリニアじゃない環境(8086/Palmなど)も
考慮すると、1オブジェクト毎にセグメント探索入るから
遅くて使えないです。オブジェクトから相対的にしか見えないんで。
何か良い方法はあるでしょうか。
0161デフォルトの名無しさん
NGNGだからアクセス時には元々マスク
なんかしてないって。
pairのタグが1だとして、嘘アセンブリ言語で書くと
load r1, [r2 - 1] ;r1<-car(r2)
load r3, [r2 + 3] ;r1<-cdr(r2)
としてるだけ。
pairのタグをゼロにしても速くならんが、
fixnumのタグはゼロでないと遅くなる。
>>160
良くワカランが、セグメントごとにビットマップ
持つとかすれば良いんじゃね〜の?
ChezSchemeは確かページごとにビットマップ持ってる。
同じページには同じ大きさのオブジェクトだけ集めて。
0162デフォルトの名無しさん
NGNG配列で作ったスタックに自分で待避しとけば
いつGCが起きても問題は起きないし、
Cレベルでは当然そう書くと言うこと。
CのスタックやCPUレジスタまで見るのは、
もちろん簡単にはできないが、
自分でLispコンパイラ書くよりは少し楽。
0163デフォルトの名無しさん
NGNG>との間に連続性はないわけよ、インタラクティブ環境だと。
連続性があると考えても良い。
その場合でも無限ループにはならない。
>>144 参照。
>> さっきreadしたものは関係ない。
>継続は、評価すると束縛しなおさない限り、
>普通の実行コンテキストと同じように変化しつづけるものということですか?
>他言語のgoto先のラベルみたいに、一定位置にとどまりつづけるものではなく。
(cc2 #t)
->((lambda(dummy)(cc1 #t)(print-read-eval(display "test1"))) #t)
->ここで(cc1 #t)が評価されると、継続
(lambda (dummy2) (print-read-eval(display "test1")))は捨てられて…
->((lambda (x) (print-read-eval x)) #t)
->(print-read-eval #t)
->#tがプリントされ、read待ちになる。
0164デフォルトの名無しさん
NGNGこの文脈だと
=連続性がない、だと思うんだが、どうか。
それにそれは実装依存の話ではないのか。知らないが。
0165136
NGNGありがとうございます。
ということは、Cで普通にやる場合、
やっぱり>>122の方法ってことですか。
gcが参照できる様にグローバルかスタック上の
変数や配列をフックする仕組みを作っておくと言うことで。
直接スタック覗くのは素人には難しそうです。
allocaやvarargライクな特殊処理になるかと想像・・。
0166161-163
NGNGむー、そうかな。
トップレベルがSchemeで書いたread-eval-printループを実行してるとしても
同じだよ、と言う意味なんだが、そうするとどことどこが不連続になるんだろ
うか。(もちろん実際どうなってるかは処理系による。)
>>165
フックってのは、
obj **stack[N]; /* GCのルート"を指す"間接ポインタ */
obj **sp = stack;
#define gc_protect(var) (stack_check(), *sp++ = &(var))
#define gc_unprotect(n) (sp+=n)
obj *append(obj *list1, obj *list2)
{
obj *tmp;
gc_protect(list1);
gc_protect(list2);
...cons(list1, list2);
gc_unprotect(2);
}
みたいな意味じゃないの?
漏れが言ってるのは、上よりも、
obj *stack[N]; /* GCのルート */
obj *append(int argc, obj *argv[])
/* 引数はargv(スタックのどこか)に入って渡される */
{
...
}
とか、
obj *reg0, *reg1, *reg2, ...; /* GCのルート */
obj *stack[N]; /* これもルート */
obj *sp = stack;
#define push(val) (stack_check(), *sp++ = (val))
#define pop() (*--sp)
obj *append(void)
/* 引数はreg0とreg1に渡される */
{
... push(cons(reg0, reg1));
}
とかの方が良いんじゃないか、ということなんだが…
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGたとえば、+で始まる識別子へのバインド
(define +v 100)
vscheme : 通る
DrScheme : 通る
rhizome : 通らない
r5rsを読むと通らないのが正確みたいだけど
0169デフォルトの名無しさん
NGNGしょうもない質問なんですが、LispとSchemeやってる人は何と呼ばれるんでしょう?
Lisper, Schemerでしょうか?
0170デフォルトの名無しさん
NGNGLispはLisper Schemeは>>71
0171デフォルトの名無しさん
NGNG解説サイト見ながら実行するとハードディスクがけたたましくて
かなわん
0172デフォルトの名無しさん
NGNG代わりに新しいマシンを買ったら?
安いでしょ、今なんて4万ぐらいで買えるし
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG横浜方面で良い店ない?
それはともかく、LISPやSchemeのOSがあった筈。
0175デフォルトの名無しさん
NGNG0176173
NGNG0177Part2の1
NGNGご明察です。
> #define gc_protect(var) (stack_check(), *sp++ = &(var))
> #define gc_unprotect(n) (sp+=n)
122はこっちの方を指しています。
自分の考えでは、Cではグローバルよりauto変数を使った方が
効率の良いコードを生成するのではないかということで、
フックを推薦します。どっちが良いかは計ってみないと何とも
言えませんが。
あと気を付けるべき点として忘れてましたが、以下の様な
コードを作成すると、
r = cons(cons(a,b),cons(c, d));
a,b,c,dをフックしていても、a,b側か、c,d側どちらかのconsで
gcが起動し、最後のconsの片側に無効な値が入力される恐れがある。
この場合は以下の様に書き換える事。
a = cons(a,b);
r = cons(a,cons(c, d));
または
c = cons(c,d);
r = cons(cons(a, b), c);
(a,b,c,dがフックされている事が前提)
0178デフォルトの名無しさん
NGNG日本語も通りますがなにか?
0179デフォルトの名無しさん
NGNGいや、そういうことじゃないんだが。
識別子 = <頭字> <後続文字>* | <特殊な識別子>
頭字 = 文字 | 特殊な頭字
文字 = a-z
特殊な頭字 = !$%&*/:<=>?^_~
特殊な識別子 = + | - | ...
ピリオドで始まる識別子は ... のみで、他のピリオドから始まる
トークンは認識できないはずなんだが
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG(define (A x)
(B (+ 2 x)))
(define (B y)
(A (* 3 y)))
(A 2)
こんな感じのS式をDrSchemeに入れてステップ実行させてにやにやする。
0182デフォルトの名無しさん
NGNG確かにautoを使うとレジスタに割り付けてくれたりするが、
関数呼び出しの時を考えると、プログラマがスタックに参照
を積む手間に”加えて”、Cコンパイラもレジスタをスタック
に待避することを忘れてはいけない。下手をすると、待避・
復帰のコストが倍になる。
最適化Lispコンパイラで関数をどんどんインライン展開しな
い限り、Lispでは関数呼び出しのコストがほとんどと思われ。
(+とかcarもインタプリタではいちいち関数呼び出しになる
のだから。)
ところでここはage進行で良いのか?
0183デフォルトの名無しさん
NGNGR5RS 2.1には、
正確にどういう文字列が名前となるかは処理系によって異なる。
しかし、どの処理系でも、数の始まりになり得ない文字で始まる
英字・数字・拡張英字の並びは名前である。
また特に+, -, ...は名前である。
とある。
.で始まる文字列とか+vとかは、すべての処理系で名前と見なされ
るとは限らない。しかし、処理系はこれらを名前と見なしても良い。
0184デフォルトの名無しさん
NGNG>ところでここはage進行で良いのか?
質問ある人はageるんだし、どっちでもいいんじゃない?
最近はカキコも多いし。
0185デフォルトの名無しさん
NGNGthx!
R5RSにバージョンなんてあったんですね。
しかし、私が参考にしている訳版はバージョン表記が無いです。
いくつなんだろ
0186デフォルトの名無しさん
NGNGバージョンじゃなくて、R5RSの
2.1 Identifiersという節のことです。
0187デフォルトの名無しさん
NGNG別に+vがあってもいいと思うけど。
なんでもかんでも文字列にする
->stringとか書きたいし(w
0188デフォルトの名無しさん
NGNG最低限識別子となりえるものだけ定義しているんですね。
そうなると、できる限り多くを識別子と扱えるようにする方が良いですね。
0189デフォルトの名無しさん
NGNG標準関数があったと思う。
0190デフォルトの名無しさん
NGNGautoでも、&でアドレスを要求しちゃうとレジスタには割り付けられないと思われ。
なので「フック」(っていうのか?)に利点は無さそう。
自分で退避した方が速いと思われ。
0191Part2の1
NGNG0192デフォルトの名無しさん
NGNG(。U。); カコイイ
0194デフォルトの名無しさん
NGNG(define loop (lambda (cont) (call/cc loop)))
(loop '())
0195デフォルトの名無しさん
NGNGえーと、ようするに
10をtempに入れる、という処理は、
obj *temp;
temp = (obj*)10<<2
とする、という理解でいいんでしょうか?
それと、これをやってしまうと、4バイト境界じゃなかったら
ポインタじゃない、という判定が使えなくなるので、
さらに保守的なGC、という感じになってしまう気がするのですが。
0196デフォルトの名無しさん
NGNGchar* heap[SIZE_HEAP];
char* currentp = heap + SIZE_HEAP;
enum tag_t {
TAG_INT, ...
};
#define ALLOC_CELL(x) (currentp -= (x << TAGBITS))
#define BIND_TAG(p, id) (p |= TAG_INT & TAGMASK)
obj* make_int(int x)
{
int* p = ALLOC_CELL(1);
BIND_TAG(p, TAG_INT);
*p = x;
return (obj*)p;
}
こういうことじゃない?
0197デフォルトの名無しさん
NGNG○ char heap[SIZE_HEAP];
0198デフォルトの名無しさん
NGNGexactなGCで無いと使えない技術と思ってよし。
>>196 pairやsymbolと違ってfixnumは即値で表すのだ。
だからfixnum演算ではメモリアクセスが全く起きない。
ゴミも出ない。
0199195
NGNGうわっ、やっちまった。
保守的マーク&スイープでこの仕組み実装しチャタヨ
うーむ、いまさら直す気もおこらないし、
超保守的GCって事でいいやヽ(´ー`)ノ
0200デフォルトの名無しさん
NGNG((call/cc call/cc) (call/cc call/cc))
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG神の思考!→^^;→?→????????????????????
(来週までに解決しておこう!(一応冷静(本当か?(???????))))
0203デフォルトの名無しさん
NGNGってやっちゃうと、
例えばDWORDを使うWindowsのAPIとか、外部のインターフェースを
直接扱えなくなるんじゃない?
bignum使えって?
0204デフォルトの名無しさん
NGNG>直接扱えなくなるんじゃない?
当然使えないだろう。
カリカリにWindowsAPI回りをチューンしたい、
というなら違う事考えないとまずいだろうな。
でも日常的な利用なら、使う所で
(obj*)temp>>2
すれば特に問題無いと思う。
少なくとも
temp->val.ival
とかやるよかずっと早い気が。
結局ループの時のカウンタ等にポインタ辿るのが
嫌だ、という事では?
0206デフォルトの名無しさん
NGNGじゃあヤパーリ各セル毎に属性1〜2バイト取った方が結局現実的なのかな?
numberにしても、'(1 2 3)というlistなら、属性に'carはnumber'
というflagを各セルに入れておけば、numberのobjectを作らずに
carに直接入れるとかできるし。
数ビットだけでやりくりするのは大変だと思った。
迷うね〜
0207デフォルトの名無しさん
NGNGconsの属性をpairか!pairにして、
!pairなら任意の大きさのobjectに振り分ければ?
生成されるオブジェクトの比で考えたら、
consがトップになるんではないかと。
0208デフォルトの名無しさん
NGNG((cons . 6015)
(symbol . 539)
(string . 16)
(number . 88)
(vector . 0)
(char . 0)
(true . 60)
(false . 46)
(null . 2452))
となり、consがダントツ。consとnumberは68.4倍の差。
0209デフォルトの名無しさん
NGNG無い。
0210デフォルトの名無しさん
NGNGSchemeには無いね。
Common Lispのadjustable-arrayなら大きさを変えられる。
またはfill-pointerつきのvectorとか。
0211デフォルトの名無しさん
NGNGなんで「ヤハ゜ーリ」なの?
204は「下2ビットはタグ」が良いといってると思われ。
ちなみに漏れもそう思う。
>属性に'carはnumber'
>というflagを各セルに入れておけば、numberのobjectを作らずに
>carに直接入れるとかできるし。
良くわからんが…
セルに入れないときはどうするの?ベクタの要素が整数の時とか…
(ポインタ1個を1ワード+フラグ1バイトで表すということ?)
どうしても整数は32ビットfullに使いたい?
0212デフォルトの名無しさん
NGNG>どうしても整数は32ビットfullに使いたい?
Windowsやなんかの環境でそれなりに使い物になる処理系を
考えれば32bitあった方が良いだろ。
0213デフォルトの名無しさん
NGNG値が30ビットで表せない場合(けっこう稀だと思う)だけ
別の表現(bignumとか、ヒープに割り当てた32ビット値への
ポインタとか)にすれば、ほとんどの場合は速い表現が使え
るよ。
Win API呼び出す前にはどうせ型チェックするんだし。
0214デフォルトの名無しさん
NGNG希な訳が無いだろー(w
Windowsとの直行性を考慮するなら最低でも32bitは必要。
個人では膨大なAPIをラップするだけのライブラリなんて作って
られないから、恐らく直接DLLを叩きたくなるだろう。
Windowsで使われる定数には0x80000000辺りを使う事が沢山ある。
ポインタ値としても。
これらをいちいち場合分けして変換する?
型チェックについてはLISPコード側でいくらでも対応できる。
0215デフォルトの名無しさん
NGNGなんで2bitがいいの?
RISCプロセッサ使用者数なんてたかが知れてるんだし、
x86系にあわせてもっとフラグビット広く取った方が良くないか?
0216デフォルトの名無しさん
NGNG妙な制限のある処理系って嫌でしょ?メンテナンスも大変そうだし。
作る事が目的ならそれでいい。
0217デフォルトの名無しさん
NGNGどういう意味?
sizeof(int)もsizeof(void *)も俺の環境では一緒なんだが。
そういう事では無い?
>>214
そうか?
稀、というのはようするにfor文の比較のように短時間に
すごく何度も使われない、という事かと。
API呼びだしには全てまともなint使えばいいじゃん。
union misc_obj{
int ival;
};
union obj{
union misc_obj misc;
:
};
って感じのival使えば。
>x86系にあわせてもっとフラグビット広く取った方が良くないか?
俺は211じゃないが、x86ってどの程度取れるの?
てっきり4バイトアラインメントだと思ってたのだが。
0218デフォルトの名無しさん
NGNGいや、4バイトにこだわらなくても良いでしょ。
3bitで8バイト、4bitで16バイトなら許容範囲じゃないの?
いまどきメモリ1G搭載してるPCなんてざらにあるんだし
0219デフォルトの名無しさん
NGNGさらに、設計と実装に割ける時間。
0220デフォルトの名無しさん
NGNG>いまどきメモリ1G搭載してるPCなんてざらにあるんだし
こういう意見は聞きたくないなあ
0221デフォルトの名無しさん
NGNGまた最小のオブジェクトが8バイトアラインでも
3ビットに限る必要はない。
例えば、
下2ビットが00ならfixnum
else 下3ビットが001ならpair
...
else 下4ビットが0001なら(もっとサイズがでかい型)
などというencodingも可能ではある。
つまり「下4ビットxx00はfixnum(xはdon't care)」とか。
これならメモリは特にムダにならない。
0222デフォルトの名無しさん
NGNG同意。
整数の表現を1つに決める必要はない。
Scheme側で30bit表現とより長い表現があるにしても、
APIを呼び出すときに一律32bitに直しちゃえば良い話。
専用ラッパー作らないなら、
(call-dll "WinHogeHoge" #xf0087c47 x y)
とかやるのか? だったらcall-dllで「整数が来たら32bit」
にしちゃえば良い。(16bitとの使い分けはどうするんだろ?)
それともインタプリタのCコードから
WinHogeHoge(lisp_ptr, lisp_int, ...);
とかやりたい?
だったら
WinHogeHoge(lisp_ptr, TO_DWORD(lisp_int), ...);
とかしてやれば良い話と思われ。
0223デフォルトの名無しさん
NGNG>APIを呼び出すときに一律32bitに直しちゃえば良い話。
しちゃえば良い話なのか・・?
0224デフォルトの名無しさん
NGNGいまは、多少メモリを無駄遣いしても、
早いほうがいいっていう意図で書いたんだが。
べつに、1Gフルに使い切れって言うわけじゃない
0225デフォルトの名無しさん
NGNGconsを何がなんでも8バイトにする必要もないな
0226デフォルトの名無しさん
NGNG>> APIを呼び出すときに一律32bitに直しちゃえば良い話。
>しちゃえば良い話なのか・・?
その後ろも読めよ(W
理解できなかったか?
>>225
>メモリを無駄遣いしてもいいってのなら、
>consを何がなんでも8バイトにする必要もないな
でかくするとメモリ転送量が増えて遅くなるってば。
局所性も悪化するし。
なんででかくしたいの?
0227デフォルトの名無しさん
NGNG作る予定はありませんか?
0228デフォルトの名無しさん
NGNG律儀に変換をやってくれる門番が適切な場所に居れば
いい(=速度とか以外の問題は無くなる)のでは?
「適切な場所」がどこか?は、静的に割り出し可能だよね?
それこそDLL呼び出す所とか。
0229デフォルトの名無しさん
NGNGCLRのバイトコードってどんなの?
tail recursiveな関数呼び出しって可能?
Javaのバイトコードだと無理だよね。
0230デフォルトの名無しさん
NGNGそれは、Haskell, C--をやっていたハイレベルな人達がやっています。
Simon Peyton Jones!
0231
NGNG0232
NGNG0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG=>nil
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNGうーんと、自分で直接ネイティブコードを吐くやつ、とい
う意味だったんですが…
0238デフォルトの名無しさん
NGNGコンパイラじゃ駄目なの?
0239デフォルトの名無しさん
NGNG「scheme native code」検索で見つかった。
pscheme
http://www.angrygraycat.com/scheme/pscheme.htm
あとPalmで動くLispMeってそういう処理系じゃなかった?
0240デフォルトの名無しさん
NGNGhttp://www.iro.umontreal.ca/~gambit/
0241デフォルトの名無しさん
NGNG簡単に実行時でもいつでもコンパイルできると思うが。
S式を動的生成して、普通にevalする代りにcompile-evalする。
でもこのケースはバイトコードコンパイルする処理系に限られるかも。
0242デフォルトの名無しさん
NGNGhttp://www.scheme.com/
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNGcall-with系とlambda駆使で一本の関数にできるのがいい。
(name-spaceを汚さない)
その代わりすげーネストになるけど。
0245デフォルトの名無しさん
NGNGですが…
Gambitって68k版以外はCへコンパイルするんですよね。JIT…なのかな?
「S式を入れたら即nativeにコンパイルされて実行」っていうのがあるのかな、
と。あるならどのくらい速いのかと思って。
0246デフォルトの名無しさん
NGNGゴミをどう扱うかによるかな。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG全部は無理。
0249デフォルトの名無しさん
NGNG漏れは246ではないが
コンパイルしたコードがゴミになったらどうするか、
ということかと思われ
トップレベルから入れた式は、define以外すぐゴミに
なるよね。
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGそういう処理系もある(JITは知らんが)。
VAX NILのコンパイラは確か、「どの2命令の間でも、コー
ドやスタックがコピーされて動いている可能性がある」と
想定したコードを吐いていた。
0252デフォルトの名無しさん
NGNGS式をlambda-closureの連鎖に変換する例はSICPに載ってる。
(SICPの例ではlambda-closure自体もS式なので速度はあまり改善されないけど。)
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGNIL = New Implementation of Lisp
0255デフォルトの名無しさん
NGNG個人的には趣味でschemeのインタプリタを実装する時に、
マクロの実装が一番大変だと思うのですが?
0256デフォルトの名無しさん
NGNG俺は継続だと思うが。というか今継続で苦戦している。
マクロってevalみたいなの実装するのと大差無い気が。
まだ実装してないが。
0257デフォルトの名無しさん
NGNGマクロ定義自体はSchemeで書けばいいんだし。
proper tail recursionがちゃんとできれば、
継続も自然とできると思うがなー
0258255
NGNG個人的には継続は2種類くらいしか実装方がないような気がする。
スタックをコピーして継続使わなければ早いけど継続は遅いっていうのと、
プログラムをCPSとかバイトコードに変換してから実行するっていうやつ。
がんばれば出来そうだ。
僕の頭ではマクロのアルゴリズムが理解できない。
というか、実装方法がよく分からない。
R5RSのsyntax-rulesの定義以外の解説が欲しい。
0259デフォルトの名無しさん
NGNGcall/ccでオブジェクトレベルにリフレクトされた継続は
ヒープに置いとくわけだが、
1.最初から全部ヒープに置いとく
(スタックフレームをリスト構造で表現)
2.全部スタックに置いといて、必要なときに全部ヒープにコピー
の他、
3.小さいサイズのスタックを使い、あふれたらヒープにコピー
とかの変種もあるよ。
「究極にチューンすれば、1でも3でも効率はほぼ同じ」
という研究があったような。
0260デフォルトの名無しさん
NGNGマクロはevalでマクロ呼び出し自体のコードに対してquoteしたものを
渡すだけでいい。マクロ定義自体は入出力がリストのただの関数。
macroさえ実装すれば、
define-macro -> define/let/letrec-syntax(syntax-rule/case)
とSchemeコード側で拡張できる。
同じマクロを毎回実行時に展開するのは無駄。
マクロキャッシュを実装もしないと遅い。これは組み込んだ方が良い。
0261デフォルトの名無しさん
NGNGキャッシュはいつflushしたら良いでしょう?
1.トップレベルに戻ったとき
2.1つでもmacroが定義されたとき
3.キャッシュされているmacroが再定義されたとき、関係あるものだけflush
0262デフォルトの名無しさん
NGNG「前もって展開はできない」って解釈できない?
なんかそんな気がしたんだけど、勘違いかなあ。
0263デフォルトの名無しさん
NGNGマクロキーワードが変数として束縛されたら
マクロじゃなくて変数として扱わなきゃならないけど・・・
変数のスコープが静的だと考えれば、前もって展開しちゃっても
いいんじゃない?
0264無名λ式
NGNG0265260
NGNGマクロを評価(展開)するときにキャッシュにあればそれを優先させるだけ。
トップレベルのマクロに対してはキャッシュは(多分)意味が無い。
フラッシュする必要はない。必要なくなれば適当なタイミングで削除する。
起動毎に展開結果が変化するマクロについてはキャッシュを適用できない。
0266デフォルトの名無しさん
NGNGformを引数としてmacroexpandが呼ばれたときに、
キャッシュを検索する、という感じでしょうか?
form自体のcarとcdrを展開結果のcarとcdrで置き換えちゃう
ことを考えていました。
0267260
NGNG直接書き換える処理はよほどうまくやらないと危険。(昔試した。)
+オリジナルコードを後で参照できなくなる。
さらに、ほとんどの場合、展開後のコードは読めない(読みたくない)。
キャッシュが実装できない時は、macro-expandを用意して
明示的に展開してしまう方法が簡単。
0268デフォルトの名無しさん
NGNG慶応の授業のページ。
記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html
0269デフォルトの名無しさん
NGNG(cond ((= y 0) 0)
((= x 0) (* 2 y))
((= y 1) 2)
(else (A (- x 1)
(A x (- y 1))))))
↑これってアッカーマン関数ってゆーんですね。今はじめて知りました。ところで、これで
(A 3 13)
を DrScheme で計算させたらメモリーが足りなくなって処理系ごと落ちました。
OSは無事でしたが。
0270デフォルトの名無しさん
NGNGちょっと違うぞ(w
(define ack
_ (lambda (x y)
_ (cond ((= x 0) (+ y 1))
_ ((= y 0) (ack (- x 1) 1))
_ (else (ack (- x 1) (ack x (- y 1)))))))
が正しい。
(ack 3 13)は今の計算機でもちょっと厳しいかも。
(ack 3 9)くらいにしとけば。
0271デフォルトの名無しさん
NGNGあー正式な定義はそうなんですね。
私のは
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.1
こっからうつしただけなので。
それで、今のコンピューターでも (ack 3 13)は計算できないんですかねぇ?
セレロン1GHz メモリ512MB なんですけど、、、
コンピューターでできないてことは当然紙と鉛筆でもできないだろうし。
こまりましたねぇ、素人相手に
「はっ、そんなケーサンコンピューターにやらせればいーだろうが、けっ!」
てな感じでいばれないじゃないですか。
0272デフォルトの名無しさん
NGNG見てて鬱になるよ。仕事でScheme実装でも作ってんのかな。
それともソレ系の研究者がたまたま集結してんのかな。
そんな人は日本に何十人もいないと思うんだが…。
0273デフォルトの名無しさん
NGNG竹内関数もよろしく
(defun tak (x y z)
_ (if (> x y)
_ (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)
_ y))
0274デフォルトの名無しさん
NGNG竹内関数てのもあるんですね。
しかし、アッカーマンといい、いったい、どれだけのメモリーがあれば計算できるんでしょうか、、、
0275デフォルトの名無しさん
NGNG住民に蛇胃酢戸多し。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG漏れは名椅子戸。
嘘、実は本号。
嘘、実はDQN(藁
0278
NGNG0279デフォルトの名無しさん
NGNGナイスト?
本郷=灯台?
0280デフォルトの名無しさん
NGNGじ:100
な:20
本:3
ぐらいだった。
ぶぶづけ、goもいる。
0281デフォルトの名無しさん
NGNGなってなんだぁ〜(泣
0282273
NGNG諦めてください(w
アッカーマン関数とか竹内関数は,停止はするけど
ループだけでなく再帰を使わないと定義できない関数
(原始帰納的でない一般帰納的関数)の有名な例であり,
引数が大きくなるにつれて,消費する計算リソースは
ループだけで定義できるような関数(原始帰納的関数)とは
比べ物にならないぐらい大きくなります.
0283無名λ式
NGNG"Hygienic macros through explicit renaming"
"Macros in Scheme"
"Macros that work"
辺りをどうぞ。> macro-expansionな日々の方々
0284デフォルトの名無しさん
NGNGナルといえば、ロブスター味噌煮込み定食の味はいかなるものか、
解説してください>本号の人
0285無名λ式
NGNGあ、URL忘れてる…
http://www.ccs.neu.edu/home/will/papers.html
井田さんがどれかをbitに紹介していたような気がする。
0286デフォルトの名無しさん
NGNGな:NAIST
0287名無しさん@Emacs
NGNG使うと聞いてるのですが, それは lisp で書くとこんな感じになりますか?
(defun test (&rest rest)
(eval (cons test rest)))
;; 実験
(setq test '(lambda (a b) (* a b)))
(test 2 3) => 6
(setq test '(lambda (a b c) (+ a b c)))
(test 3 3 2) => 8
symbol の function cell をこんな風にしておくと, value cell を
関数として使えると思うのですが.
scheme はよく知らないので, 感違いしていたらすみません.
0288デフォルトの名無しさん
NGNGちょっと言葉使いがアレですが、SchemeではLispと違い
symbol-functionスロットがなくて、関数呼び出しの式の最初の式も、
他と同じようにevaるのは本当です。
良い点と悪い点があります。Schemeの方がきれいですが、遅くなります。
Lispだと、functionスロットには関数しか入らないように保証できるので、
呼び出す前にチェックする必要がありません。
0289287
NGNG言葉づかいってのは "list の (先頭の) symbol を評価" っていうところですかね。
前スレの 161 で ( http://pc.2ch.net/test/read.cgi/tech/987169286/151-161 )
>・schemeなら関数呼び出しフォームの先頭要素を普通に評価してその値を関数
>として使うから、可能
>
>・common lispだとあくまで((lambda ()) foo ...)と(symbol foo...)が関数
>呼び出しフォームなだけだから、ムリ
こういうのがあって、そうなのかと思って >>287 みたいなのを考えたんですが、
するとムリってのは嘘ですね。OO もよく知らないんで、また勘違いかもしれないけど(藁
0290デフォルトの名無しさん
NGNGwindows.hなどを自動で取り込める様な。
WINBASEAPI BOOL WINAPI GetHandleInformation(HANDLE hObject, LPDWORD lpdwFlags);
↓
'(winbaseapi bool winapi get-handle-information ((handle h-object) (lpdword lpdw-flags)))
これは一見簡単だけど、#ifdefマクロとか切り分けがあったら面倒臭いし。
0291デフォルトの名無しさん
NGNGeval使ってる時点で反則っぽくない?
0292デフォルトの名無しさん
NGNGええと、少しまとめると、関数呼び出し(fn arg ...)というリストを評価する
とき、
・Lispでは、リストの先頭だけ特殊な評価法をする。シンボルかラムダ式しか
書けない。シンボルの時は、functionスロットを見に行く。
・Schemeでは、他の位置と同じように評価する。任意の式が書ける。
んで、元は(obj 'message arg ...)とLispでやるには、って言う話ね?
objに変数やら普通の式が書けるようにするのは無理。291も書いてるが、
evalを使うのはゴーインすぎる。それだとspecial変数しか見てくれないよ。
(defmacro send (obj msg &rest args) `(funcall ,obj ',msg . ,args))として
(send obj message arg ...)と書くぐらいで我慢しなはれ。
あと細かいが、ラムダ式を'(lambda ...)と書くのはやめれ。昔はリストと関
数を区別してなかったけど…
今なら単に(lambda ...)と書くのがモダ〜ン。せめて#'(lambda ...)と書いて
ちょうだい。
0293デフォルトの名無しさん
NGNGCPPにかけてからやるとかいうのはどうだろう
0294289
NGNG今まで elisp しかやったことないんで、
lisp 系言語の繊細な部分がわかってないようですね。>自分
eval 使うのがゴーインという意味がよくわからないんですが、
純粋に special 変数しかみないからということですか?
うーん、しかし、これ以上はもうちょっと勉強してから聞くことに
しますね。なんとかスコープとか、まだよくわからんので。
0295デフォルトの名無しさん
NGNGElispだとevalでけっこう万能かもな…
しかし、Common Lispだと、他の関数の引数やletで定義された局所変数は、
外から見えないんだよ。
あと、例えばだな、機械語かせめてバイトコードにコンパイルしないと
遅くてやってられんわけだが、eval使ってリストを評価してるようだと、
そのリストはコンパイルできないだろう?
これはfexprという技法が廃れた理由でもある。
0296デフォルトの名無しさん
NGNGここだとレベルが高すぎて遠慮しちゃう。
0297デフォルトの名無しさん
NGNGレベルを統一してないとこがここの魅力デス。
0298デフォルトの名無しさん
NGNG匿名BBSで遠慮してたら訊く場所ねーぞ。
叩かれたら笑って忘れろ。
0299294
NGNGlexical scope っていうのは、例えば let 内で呼び出した関数からは、
let でバインド?した変数はみえないっていう理解でいいですか?
あと closure ってのもありますね。うーんよくわからん。勉強します。
0300デフォルトの名無しさん
NGNG正しい。
lexicalってのは「字面の」って意味だ。
Common Lisp(special変数以外)やSchemeでは、
letで宣言した変数は、ソースプログラムの字面で見て、
letの範囲の中でしか参照できない。
closureはとりあえず「関数のこと」と思っていて間違いない。
Schemeでは、関数は全てclosureというデータで表される。
lambda式を評価するとclosureになる。
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGこういうの作ったけど、使う?
windows-name->scheme-name
windows式の名前をschemeの一般的な名前に変換する。
ascii/unicodeを識別する、最後のA/W は 無くなる。
例)
CreateWindowEx -> create-window-ex
ReleaseDC -> release-dc
WSAGetLastError -> wsaget-last-error
最後のがwsa-get-last-errorにならないところがちょっといい加減だけど
(define (windows-name->scheme-name s)
(assert (string? s))
(let loop ((cs (string->list s)) (r '()) (isupper #f))
(if (pair? cs)
(if (char-upper-case? (car cs))
(loop (cdr cs)
(cons (char-downcase (car cs))
(if (and (pair? r)
(not isupper))
(cons #\- r)
r))
#t)
(loop (cdr cs) (cons (car cs) r) #f) )
(string->symbol
(list->string
(reverse!
(if (and (> (length r) 2) ; 〜 -a or -w
isupper
(or (char=? (car r) #\a) (char=? (car r) #\w))
(char=? (cadr r) #\-)) ; 〜A -> 〜
(list-tail r 2)
r )))))))
0305デフォルトの名無しさん
NGNG入力は文字列(windows)、出力はシンボル(scheme)。
assertはCのやつと同じ意味。省いてもいい。
reverse!は破壊的なreverse。ただのreverseでもいい。
A/W ってのは、CreateWindowExAやらCreateWindowExWの場合に
create-window-exにするって意味。
0306名無しさん@Emacs
NGNG> closureはとりあえず「関数のこと」と思っていて間違いない。
それは結構まずかろう。
0307300
NGNGまずくないよ。
Schemeではprocedureはすべてclosureとして表現される。
Common Lispでは歴史的事情から
リストやシンボルも関数として受け付けるが、
そういう汚い部分を除けば、関数は全てclosureだ。
0308デフォルトの名無しさん
NGNG?
closureには局所環境が含まれてるだろ?
0310309=290
NGNG0311デフォルトの名無しさん
NGNGうん。lambda式を評価して得られたすべての関数に含まれてる。
例えばSchemeでglobalに
(define foo (lambda (x) ...))
と定義すると、fooには空の環境を含む関数が入る。
その関数を呼び出すと、環境が切り替わって(いったん空になって)
それから引数や局所変数が束縛される。
これがlexical scopingを実現する仕組み。
0312デフォルトの名無しさん
NGNG>>311
だったら、
> closureはとりあえず「関数のこと」と思っていて間違いない。
これ間違ってるじゃん。逆ならまだしも。
0313デフォルトの名無しさん
NGNG空の環境なわけないじゃん。
最低、トップレベルの環境は全部見えてるよ。
0314312
NGNG「関数は実はclosureです」
なら適切、ってとこかな。
0315312
NGNG0316313
NGNG・トップレベルの環境
((変数名c . 値c)(変数名b . 値b)(変数名a . 値a))
(define foo (lambda (x) ...))
=>foo
fooを定義後のトップレベルの環境
((foo . (lambda (x) ...))(変数名c . 値c)(変数名b . 値b)(変数名a . 値a))
(実際はfooの値は#<closure>とかにして覗けなくしとく。)
・fooの関数内での環境
((x . 仮引数)(foo . (lambda (x) ...))(変数名c . 値c)(変数名b . 値b)(変数名a . 値a))
0317312
NGNG関数がすべてclosureだっていうのは
(define (foo bar) body)が(define foo (lambda (bar) body))の
syntax sugarであるとかその辺の話であって、
仕様上関数は関数で別にあった
(プリミティブ関数とかは別にclosureではない)
と思ったが、どうだったかな。
実装したときは(ずっと前だけど)
そんなふうに思っていた。
0318313
NGNGprimitiveはclosureじゃない。
schemeでは普通、closureとはlambdaで作られたものを言う。
primitive/closure/continuationの3つは
同じ形式で呼べるというだけで、内部的には区別される。
0319313
NGNG内部的には異なる。これらは環境を持たない。
0320デフォルトの名無しさん
NGNG普通closureといったら関数のコード+自由変数の記憶領域じゃない?
closureとcontinuationを内部で区別するかどうかは実装しだいだと思う。
continuationは意味的には暗黙に渡されてるclosure。
ところで、実際には自由変数を持たないclosureも存在することを考えると、
primitiveとか、C言語の関数とかも含めて「関数はclosure」と呼んでも
悪くないと思う。
0321デフォルトの名無しさん
NGNGlet-syntaxで定義したsyntax sygarは実行時に存在しなくていいはず。
で、内部にあるのはdefine-syntaxで定義したsyntax sugarだと
思うのだけど、これが環境を持ってなくてよいのはまさにトップ
レベルの環境は自明に分かるからで>>319と>>313は・・・。
0322312
NGNG仕様書にはclosureって概念はないようだね。
(和訳だけど、手続きってclosureじゃなくてprocedureのことだよね?)
まあ、実装はともかく、意味論的には関数=closureの一種と捉えても
問題はなさそうだね。
俺はOO的に言うと
closure、primitive、continuationはprocedureの派生物、と捕らえてるけど。
こっちも話がずれてしまったが、
最初の指摘はとにかく
> closureはとりあえず「関数のこと」と思っていて間違いない
ではいらぬ誤解を招くのでよくない、ということがいいたかたった。
「関数」と言われて局所環境が含まれているものを想像する者は
あまりおらんだろうし、それこそがlisp/schemeのクロージャのキモな
わけだから。
0323313
NGNGprimitive/closure/continuationの3つをひっくるめて
'関数'と呼ぶのは賛成だけど
'関数はclosure'ってのはおかしい。
procedure?(手続き)って述語が標準であるでしょ。
それとは別に大抵の処理系では
primitive?/closure?/continuation?がある。
function?をもし作るとしたらどれを真にする?
0324313
NGNGmacroは単に展開後のコードに現在の環境が引き継がれるだけだから、
それを'環境を持つ'とは言わない。
0325321
NGNGその自由変数はマクロを使用する環境じゃなくて、
マクロを定義した環境で評価されなくちゃいけないんでしょ?
それって関数と同じじゃないですか?
0326313
NGNGよくわからない。
簡単なコードでいいから書いてみて。
0328デフォルトの名無しさん
NGNG0330321
NGNGR5RSの14ページに載ってる例だけど
(let ((x 'outer))
(let-syntax ((m (syntax-rules () ((m) x))))
(let ((x 'inner))
(m)))) => outer
これってmが環境を持ってるよね?
0331デフォルトの名無しさん
NGNG単に関数(Schemeならprocedure)という言葉だけで
そもそもclosureという言葉を持ち出す必要はないように
思う、という意味で「関数のことと思って良い」と書いた。
確かに「空」という言い方はちょっと変だった。
特定の実装に捕らわれた言い方だった。
トップレベルで定義した名前にはR5RSでいう
interactive environmentが閉じ込められてる。
primitiveがclosureでないというのは変な気がする。
closureであっても全くおかしくない(というか、
実装ではそんな区別はしない)と思うが。
また、Scheme自身で書いたprimitiveはどうなる?
漏れが書いた処理系ではevalがSchemeで書いてあるが?
(当然closureになっている。)
Common LispとSchemeで事情は変わらない。
CLtL1の頃はlambdaというシンボルで始まるリストや
関数定義を持つシンボルもfunctionpで真になったが、
これは訂正された。
うーん…
すべての関数(procedure)は、概念的に
(環境, 仮引数, 本体の式)の組と考えることができる。
この組をclosureと呼ぶ、ってのはどう?
0332313
NGNG展開後のコード
(let ((x 'outer))
(let ((gen0000 x))
(let ((x 'inner))
gen0000))) => outer
0333デフォルトの名無しさん
NGNGprocedure?(手続き)って述語が標準であるでしょ。
それとは別に大抵の処理系では
primitive?/closure?/continuation?がある。
function?をもし作るとしたらどれを真にする?
そんな処理系知らないけど…
Schemeコンパイラでコンパイルした関数はどれになるの?
もし作るとしたらすべてのorにする。
だってprocedure?の同義語でしょ?
0334デフォルトの名無しさん
NGNG「関数」といったら局所変数が含まれてるものも
含まれてないものも引っくるめて思い浮かべるのが
普通だろう。
(define ((compose f g) x) ((f g) x))
で、(compose car cdr)が返す物は関数じゃないのか?
0335デフォルトの名無しさん
NGNGなんとなくわかったが、普通の人は「関数」と聞いて
環境を含んでるとは思わない(と思う)から、
わからない人に対する説明としては意味がないと思う。
> closureであっても全くおかしくない
closureであってもおかしくないのと
primitiveがclosureだとは限らないのは
別のこと(排他的でないこと)でしょ?
だから、
> また、Scheme自身で書いたprimitiveはどうなる?
に対しては「どうでもよい」
あと、
> 実装ではそんな区別はしない
効率を考えたらする可能性も大
> すべての関数(procedure)は、概念的に
> (環境, 仮引数, 本体の式)の組と考えることができる。
> この組をclosureと呼ぶ、ってのはどう?
好きにしたらいいと思う、ただ利点がわからない
AがBであるからといって
BがAであるとは限らないんだが……
0336デフォルトの名無しさん
NGNGそれだったら、common lispで関数とclosureを分けて説明する必要が
ないと思うんだが。
0337321
NGNG実装的にはリネームするのは分かるのですけど、
意味的にはマクロが環境を持ってると思いませんか?
とくに313さんはトップレベルの関数も環境を持ってると主張してますし。
0338313
NGNGprimitive?/closure?/continuation?
は内部表現を限定したい時に必要。
例えばインライン化などの切り分け。
(if (defined? 'foo)
(if (closure? foo)
(inline-expand foo)
...))
>Schemeコンパイラでコンパイルした関数はどれになるの?
実装によるとしか言えない。
0339313
NGNGいやだから、あれは考え方として書いたのであって、実装上は
どんな事になってても、つじつまさえあえばどうでもいい問題。
マクロも、環境を持つ事はややこしくなるだけで、
特に利点は無いと思う。
0340デフォルトの名無しさん
NGNG区別する実装はあるかも知れないが、そんな細かい実装上の区別を
初心者に押し付けてどうする?
「すべての関数は環境を内部に持っている」と言った方が簡単だし
概念的には正しいだろ?
0341デフォルトの名無しさん
NGNG食い違ってるのはこれかも知れない。
1.closureとは関数の実装法の1つである。
closureの形の関数と、それ以外の形の関数がある処理系が多い。
2.closureとは、「環境と式の組」という概念である。
Schemeやlexical scopeのLispで、すべての関数はclosureと
見なすことができる。
漏れはずっと2のつもりでclosureという言葉を使ってるが…
0342313
NGNG>とくに313さんはトップレベルの関数も環境を持ってると主張してますし。
トップレベルの関数にも環境はあるよ
(define bar #f)
(define (foo) (bar))
(define (bar) #t) ;<=この定義で(define bar #f)は隠される。
(foo)
=>#t
とできるって事は、環境が存在するって事。
0343デフォルトの名無しさん
NGNGguile> (define foo (lambda (x) (car x)))
guile> (foo '(a))
a
guile> (define car cdr)
guile> (foo '(a))
a
あれ?
0344313
NGNGguileは色んな点でschemeの仕様とは食い違う。
詳細は知らないけど。
0345デフォルトの名無しさん
NGNG突き詰めれば同じことだと思うけど……
伝統的には1.だよね。
2.の意味だと、closureという言葉が意味を失うから。
closureとclosureでないものを区別する必要がなくなるからね。
R5RSでも、「lamda式は手続きに評価される。
lambda式が評価されるときに有効な環境は手続きの一部として
記憶される。」(以下評価時の手順)と、ニュアンス的には1な感じだね。
0346デフォルトの名無しさん
NGNG「ニュアンス的には2」のまちがいじゃないの?
「lambdaはそうだがprimitiveは違う」とか
わざわざ言う必要ないんでは。
0347313
NGNGわからない人にはprocedureでいいんでしょ?
primitiveはprimitive。
primitiveの実装がclosureだとしても、それは原始言語での話。
>>346
primitiveとlambdaを比較対象にするのはおかしい。
lambdaはただの構文上のシンボル。
0348321
NGNG(define bar #f)
(define-syntax foo (syntax-rules () ((_) (bar))))
(define (bar) #t) ;<=この定義で(define bar #f)は隠される。
(foo)
=>#t
ですよね?
マクロもトップレベルの関数も意味的には環境を持ってるけど、
実装的には持ってないみたいな・・・。
0349321
NGNG1の意味でprimitiveとlambdaで作った関数を区別して実装した方が
(primitiveはclosureとしない方が)効率的か?というのが問題になってたと思うのだけど、
ネイティブ関数とschemeでかかれた関数との区別を混同してる気がする。
0350デフォルトの名無しさん
NGNG多分、シンボルと環境の関係を理解してない気がする。
0351デフォルトの名無しさん
NGNGおれがこだわってるんではなくて(苦笑)
元々 >>299 の 「closureってのもありますよね。
うーん。よくわからん。勉強します。」
に対するおれの答え方が悪かったらしくて話がこじれたのだ。
「SchemeやCommon Lispでは、全ての関数はclosureであると
考えても概念的に不都合は無いんだから、特にclosureなんて
言葉は気にしなくて良い。単に『関数』または『procedure』
という言葉だけ使ってれば良い。」とでも言えば良かったか。
しかしこんな長いの書きたくない。
んー、また初心者を遠ざけたかな。
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNGalist = 環境みたいに考えると、
「環境を閉じ込める」=「alistを持つ」
となっちゃうが、これはScheme的には正しくない。
具体的な実装に近い言葉で言うと、
・binding constructは新たな「環境オブジェクト」をつくる。
・トップレベルの関数は、みな同一の「環境オブジェクト」を閉じ込める。
・defineは「環境オブジェクト」の名前表の先頭に
新たな名前の束縛を追加(prepend)する。
と思えば良いのではないか。
(define bar ...)
(define foo (lambda ...)) ;; <- この関数には環境が閉じ込められる。
(define bar ...) ;; <-上で閉じ込めたのと同じ環境の
名前表の「先頭に」barの束縛を追加する。
なので、fooに閉じ込めた環境のなかで、barがshadowされる。
こういう風に考えないとinternal defineが
複数個あるときの解釈がうまくいかない。
0354デフォルトの名無しさん
NGNGはっきりと区別されるとは?
CLtL Chap. 3. Scope and Extent
The rules of lexical scoping imply that lambda-expressions appearing in the
function construct will, in general, result in ``closures'' over those
non-special variables visible to the lambda-expression.
「(lambda式で作る)関数は一般に全てclosure」と書いてあるように読めるが…
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGどこが?
0358デフォルトの名無しさん
NGNG区別しなきゃならないのはどういう場合ですか?
'(lambda ...)の書き方はクロージャーじゃないけど、
CLtL2になって許されなくなりましたよね?
0359デフォルトの名無しさん
NGNGここでのfunctionは、function special formのことだ。
原文をよーく見てみ。フォントが違ってるだろ。
0360299
NGNG個人的にはもう何が何だか意味がわかりません.(藁
ここでの会話が理解できるようになるまで勉強します.(藁
0361321
NGNG「binding constructで新しい環境を作ったり・・・」
などの操作を含めてalistを持つとみんな思ってるんじゃないですか?
ところで、internal definitionはletrecと等価で、
letrecでは同じシンボルが2度出現することは許されませんが、
その例は正しく動かなくてもいいんじゃないですか?
0362デフォルトの名無しさん
NGNG1)計算機プログラムの構造と解釈 第二版 4600+税
ISBN4-89471-163-X
2)プログラミングSCHEME 3000+税
ISBN4-89471-226-1
両方とも(株)ピアソン・エデュケーション。
さらに2つとも(英語だけど)ネット上で全部読める。
この2冊はお金だして買ってもいいと思った。
1)は色んな所でがいしゅつだけど必須。
0363デフォルトの名無しさん
NGNG同じシンボル2回という話ではなくて、
前方参照がなぜできるのかという話。
まあletrecにいちいち変形していると考えてもよいけど。
0364321
NGNG僕もこの2冊は買ってもいいと思う。
特に1は面白い。
2は正確には「プログラミング言語SCHEME」。
0365321
NGNG実際にbarの値を参照するのはfooを評価したときだからでしょ?
0366デフォルトの名無しさん
NGNG「function構文の中のlambda式」は関数すなわちclosureに
なるってことでしょ?
で、そうでないlambda式はただのデータだが、そんなことは
ここにいちいち書いてない、ってだけでは。
じゃないとすると、closureでない関数ってどうやって書くの?
0367デフォルトの名無しさん
NGNG買っても読まないとダメだよ。
0368デフォルトの名無しさん
NGNG(define outer (lambda ...
(define inner1 (lambda (x) (inner2 ...)))
(define inner2 (lambda (x) ...))
...)
inner1がalistを閉じ込めると考えたら、
その中にinner2は含まれていないはず。
0369299
NGNG学習に使えそうな web 上の情報ないですかね.
初心者用ではなく中級くらい以上のがなかなかなくて.
やっぱり本買うしかないかな.
0370デフォルトの名無しさん
NGNG普通に関数定義すれば、それが関数だろ。
0371299
NGNGやはり買おう.
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNGんで当然それはclosureだろ。
(defunフォームをmacroexpandしたことある?)
0374373
NGNG0375デフォルトの名無しさん
NGNG(defun f () ())
このfはclosureなのか?
0376デフォルトの名無しさん
NGNGclosureだよん。
0377321
NGNGそれはわかります。
alistを閉じ込めるの解釈がちょっとひねくれてませんか?
その例でいえばlambdaで新しく出来た環境全体を閉じ込めると
解釈してくださいよ。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNGもちろんCommon Lispでだよね?
もしそうなら俺が間違っていた。
0380デフォルトの名無しさん
NGNGclosureでないとしたらなんなの?
(いや、そういう処理系もアリかも知れないが。)
0381321
NGNG↑唐突だけど、このリンクとか結構いいと思う。
0382デフォルトの名無しさん
NGNG例えば昔なら(lambda () ())というリストを
symbolのfunctionスロットに入れとく処理系もありだったかも。
でも、CLtL2になって
「function型はconsともsymbolともdisjoint」ということに
なっちゃったのよ。
ちなみに、上の変更によりclosureをlistで表現するのもナシになった。
0383デフォルトの名無しさん
NGNG(defun f (j)
(let ((i 3))
(funcall (lambda (j) (* i j)) j)))
0384デフォルトの名無しさん
NGNGだったら意見が一致してると思うが...
トップレベルでも同じでわ?
0385デフォルトの名無しさん
NGNG単なるModel-Viewの問題だ。
たとえば、UNIXのソケットプログラミングをしてる人に対して、
socketの戻り値はなんですか? と聞いたら、
『ソケットのidだよ』と答えるでしょう。
事実としてはint型の整数であっても。
同様に、
関数型プログラミングをしてる人に対して、
(define ((compose f g) x) ((f g) x)) の戻り値はなんですか? と聞いたら、
『関数だよ』と答えるでしょう。
事実としては『環境を伴う手続き』であっても。
そういうことだね。
0386デフォルトの名無しさん
NGNG(defun f () ()) のfはclosureなのか? って無意味な質問だろう。
でなんでまたその答えが「closureだよん」になるのか。
0387デフォルトの名無しさん
NGNGだったら通常の言語における関数との違いを強調すべく、
closureと呼ぶ方がよいように思える。
closureはLispにおける関数だ、ならわかるが、
closureは関数だ、は混乱を招く気がするが...
0388デフォルトの名無しさん
NGNGその辺りを分けた方がいいのでは?
0389デフォルトの名無しさん
NGNGおすすめの処理系とかありますか?
# ここにいる人はみなさん自作!?
0390デフォルトの名無しさん
NGNGList遊びが紀伊国屋にあったんで、それ買って
みなさんに一歩でも近付けるようになりたいと
思いますage
>>389 MacCommonLisp!
0391デフォルトの名無しさん
NGNGはいはい。正確には(symbol-function 'f)だね。
これがclosureになっていると考えて「何ら不都合はない」という話。
>>387
素人には、違いを強調「したくない」。
closureという仕組みを用いる関数とそうでない関数が必要だなんて
処理系作成者を除いて知る必要はない。
そういう仕組みがあると知ってしまった人には、なるべく単純化て
「全部そうなってると思っていて何ら不都合はない」と教える。
>>388
分ける必要があるのは処理系作成者だけだろう。
0392391
NGNGなるべくなら、「通常の言語」に汚染されていない人に、
変な制限のある関数でなく、
SchemeやCLのfirst-classな関数を先に知ってもらいたい。
不幸にも制限や例外のある関数の概念が染み付いちゃった人
には、closureなんて言葉を使わず
「Schemeの関数はfirst-classだ(妙な例外はない)」
と言うことだけ知ってもらうのが良いだろう。
closureという言葉を聞いて「そんなことを勉強しなきゃ
ならないのか」と欝になった人には
「(first-classの)関数(を実現する仕組み)のことだと
思っていて何ら不都合はない」
「だからそんな言葉は気にするな」と言いたい。
0393387
NGNGふむ、なるほど。
俺は素人、というと当然Cとかそれ系はやっている、
という想定だったが、その想定自体結構腐ってるな、良く考えると。
うん、そっちの言う事が正しそう。
0394名無しさん@Emacs
NGNGプログラム板で「汚染」とか言ったってしょうがないだろう。
ちょっと思想に偏りすぎだよ。
ラウンジでもいってプログラム言語勉強したことのない人に
説いてこいよ。
0395393
NGNGラウンジじゃなくてプログラム板だからそういう事が
言えるんじゃないか?正しいプログラミングの概念、
とかを語る事が出来る程度にはここは技術板だと思って
いるのだが。
0396デフォルトの名無しさん
NGNGわかってもらえてうれしいよ!
2chでこんなまともな議論ができるとわ。
>>394
漏れは素人さんも歓迎。現に来てるし。
「まず、関数にはC風の関数とclosureとcontinuationがあって…」
とか言って追い返したくない。
「汚染」でムッとした?
なら「他の言語を知っちゃった人でも」と言い直す。
0397名無しさん@Emacs
NGNGだが「汚染されてる」ことを前提にしてないのは変だ。
「高階関数とかの概念知っててC的な関数を知らない」人が
どれくらいいると思ってるんだ。
数学板ならまだしも、プログラム板で。
状況考えたら絶対に変だ。宗教家かバカ学者っぽい。
そういう思想を説きたいんだったら投げやりに済まさないで
最初からちゃんと説明しとけば済んだ話しだし。
個人的な意見を言わせてもらえば、「汚染されてる」って
表現自体もあまりよいとはいいがたいと思う
(だって合理性の問題だし)が、これはまあ譲歩。
0398デフォルトの名無しさん
NGNG1.なるべくなら、「通常の言語」に汚染されていない人に…
2.不幸にも制限や例外のある関数の概念が染み付いちゃった人…
3.closureという言葉を聞いて「そんなことを勉強しなきゃ
ならないのか」と欝になった人には…
と3段階に分けた。
あんたの言う通り1は少ないかもしらん。今回の素人さんは3だ。
3相手になぜ「closureとは関数の事と思っていて良い」と言うか、
という理由を1〜3の順に説明してみたわけ。
0399名無しさん@Emacs
NGNGその3段階はexclusiveなのか。
思想を語りたいならうまいこと関数型プログラミングのスレに
誘導したほうがいいと思う。
関数型である(とみなせる)ということだけが
lisp/schemeの本質ではないのだから。
0400デフォルトの名無しさん
NGNG1と2はdisjointだね。3はそうでもないが。
思想を語りたいなんて思ってない。言いたいのは、
「closureはとりあえず『関数のこと』と思っていて間違いはない」
と素人さんに言うのは、何らまずくないということだ。
「それは結構まずかろう」とかいうヤツの方こそ、
何が言いたいんだか分からないね。
「処理系の中身勉強してから出直して来い」ってか?
0401デフォルトの名無しさん
NGNG話がかみ合ってないよ。
>>392で「汚染」とか「不幸にも」という言葉に彼の思想が
感じられるけれど、彼は別にそれを主張してるわけじゃない。
「closureは関数である」という発言がどういうシチュエーションを
意図してるかを例をあげて説明してるだけでしょ。
0403デフォルトの名無しさん
NGNGしといた方が良い気がする。
つまり、あえてclosureという言葉を最初から出さない。
「なんでlambdaの外側にlet書いても変数が消えないんですか?
まずくないんですか?」
とか質問されたら「実はそれはclosureという概念で・・」
って切り出せば良い。不思議に思わないのなら、放っておく(w
closureとは何か?と聞かれたら、普通の関数とは違う事を説明する。
0404名無しさん@Emacs
NGNGエート、だから「素人さん」が思い浮かべる「関数」が
問題になるんでしょ?
> あんたの言う通り1は少ないかもしらん。
と認めたなら、その説明が何をもたらすのかは自明だと思うのだけど。
0405デフォルトの名無しさん
NGNGすべての変数は永久に消えない事が保証されているが、
参照が無くなればgcで自然に消滅する。
0406デフォルトの名無しさん
NGNGだから2や3の人が多いって事でしょ?
2や3の人向けの説明も書いたよ。
0407デフォルトの名無しさん
NGNGそんなの問題になってないと思うけど・・・。
問題は「closureを関数と呼んでよいか?」だけでしょ。
1は仮想的な反例の1つだからトリビアルでも全然問題なし。
0408デフォルトの名無しさん
NGNG寿命の話にclosureという言葉は使わなくても良いような。
「closureが普通の関数と違う」というのは
バイアスがかかった言い方だと思う。
Schemeの関数の方が普通で、他の言語の「普通の関数」が
制限付きの半人前の関数という見方もあるんじゃないか?
0409名無しさん@Emacs
NGNGそれはわかったが、300の時点ではおかしかった。
>>407
それはおかしい。
400には、
> 「closureはとりあえず『関数のこと』と思っていて間違いはない」
> と素人さんに言うのは、何らまずくない
と書いてあるのだから、この結果として生じるものは
「素人さん」が「関数とはどのようなものであると思っているか」に
依存する。
0410デフォルトの名無しさん
NGNGでいいんでしょ?
外部に参照を持たないclosureは普通の関数となんら変わらないし。
0411403=405=410
NGNG手続き型の関数表現の事を言ってます。
なにが普通か?って議論をするつもりは無いです。
0413デフォルトの名無しさん
NGNGだから「ただの関数と違う」とわざわざ強調するのは
(処理系作成者以外には)益がないでしょ、という話。
0414デフォルトの名無しさん
NGNGんじゃ場合わけをやり直してみる。
「あと closure ってのもありますね。うーんよくわからん。勉強します。」
と言った人が(この人個人の話でなくて一般に)、
A.他の言語の(first-classでない)関数の概念を知らない場合。
特に「Schemeは他と違う」とか「closureという機構が必要になる」とか
言う必要は全く無い。「closureなんていう言葉は気にしなくて良い。
関数のことと思っていて間違いない。」と言って良い。
B.他の言語の(first-classでない)関数の概念にはなじんでいる場合。
「Schemeの関数はfirst-classである」ということだけ知ってもらえば良い。
closureという言葉を持ち出す必要は全く無い。「closureとそうでない関数の
区別」など邪魔になるだけ。「closureは、(first-classな)関数(を実現する
仕組み)のことと思っていて間違いない。」と言って良い。
これでどう?
0415名無しさん@Emacs
NGNG環境がついてくるかどうかになど自覚的ではない、って話?
「素人さん」でもC的な関数には環境はついてこないってことは
理解している、って前提で話してた。
0416410
NGNGでもCとschemeで書く場合ってスタイルが結構変化しますが。
Cのコールバックにおける引数渡しとか。
0417名無しさん@Emacs
NGNGfirst-classであるってのは、すなわち環境がついてくるってこと?
それを証明しないと、その説明でCプログラマに理解してもらうのは
無理なような。
でそれを証明するのはクロージャを説明するよりもっと大変なような。
どうよ。
0418410
NGNG0419デフォルトの名無しさん
NGNGそれこそ相手によるが、実装を説明した方が分かりやすい
相手なら説明すれば良いだろう。
その場合も「全部closure」で不都合はない。
CLtLでは「変数の束縛は無制限の寿命を持つ(必要な期間 保持される)」
とだけ説明している。
0420デフォルトの名無しさん
NGNGCプログラマに理解してもらいたいって趣旨だったのだろうか・・・。
こまかいことは気にしなくても問題ないってことでは?
0421名無しさん@Emacs
NGNG「関数がfirst class」っていうだけでわかるような相手だったら
それこそ何も説明しなくもいいと思うが。
> こまかいことは気にしなくても問題ないってことでは?
それだったら別にどうでもよい。
>>415 にも書いたけど、
想定してた「素人さん」の多言語に関するレベルが違ったかもしれない。
前にCプログラマにlispの関数を説明したときに
「え? Cにも関数ポインタがあるじゃん」て言われた経験があったから。
lispの長所を説明するには、最低限相手にもそのくらいの知識がいると思ったので。
その場合『「全部closure」で不都合はない。』のは、
closureを説明してからの話。
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG偶然にもそのひとはclosureという言葉を耳にしてしまった。
「うわぁ〜schemeって大変そうだ!?」と困惑していたので、
closureは関数だと思ってればいいですよっていう、助言がなされた。
>>421
確かにCをよく知ってる人に関数型の長所を説明するのにはそれではダメですね。
関数が関数の内部でも定義できる。
内部で定義された関数からその外側の関数の変数が参照できる(lexical scope)。
関数を(内部で定義されたものも含めて)整数などと同じようにやり取りできる。
と説明するとよいのかな?
0424名無しさん@Emacs
NGNG長々とスマソ
0425デフォルトの名無しさん
NGNGコールバック関数作って、関数ポインタで変数渡すのは書くの
だけでほんと疲れるし。(グローバルに置くのは却下。)
Cでそれをやらなかったのは実装が難しくなるからだっけ?
Pascalにはあるのに。
0426名無しさん@Emacs
NGNG0427デフォルトの名無しさん
NGNGgcc拡張には内部関数があるね。
内部関数へのポインタは、
スタック上にclosureを作って、
それへのポインタを渡している。
0428デフォルトの名無しさん
NGNGだけを実際の解釈系に適用すると、どの程度の
効率化が見込めるでしょうか?
コードを原始言語側のclosureの連にするって事ですよね。
eval通さなくて済むって事だけで結構速くなるかな?
0429デフォルトの名無しさん
NGNGそれをやらなくてもいいので随分速くなると思うけど。
0430428
NGNGなるほど。
評価もスタック無しで回せるから、確実に速くはなりそうですね。
作ってみようかな・・。
0431デフォルトの名無しさん
NGNGそういう構造を持つ言語でだけでの話しだよね?
一般的にそう言えるってこと?
0432デフォルトの名無しさん
NGNGまあSchemeやCommon LispやMLなんかでは、だろうね。
既にいろんな言語知ってる人なら「Scheme(等)では」
と自分で補ってくれるだろう。
初めての言語がScheme(等)の人だと、Cやなんかを後で
やったときに「qsortに渡す関数を動的に作るにはどうやるんだろう」
と悩むかも知れないね。実際あると便利なのになあ、と俺も悩むし。
Javaなら別に悩まないだろうね。closureのかわりにinstance作れば
良いから。
0433デフォルトの名無しさん
NGNGおそレスかつどうでもいい話だけど、1.5課のとこで、
なんで三角形の面積があれで求まるのか悩んじまっただよ。
いちおう導出できたけど、時間かかりまくり。
欝だ氏脳…
0434デフォルトの名無しさん
NGNG演算子オーバーロードの無い言語とかでも結局関数呼出しだらけ
にしたら見た目はほとんど変わらなくなるんだな。
0435デフォルトの名無しさん
NGNG開きカッコが関数名の前か後かの違いと、
区切りにコンマ使うか、空白使うか、って事?
C言語 a(b(c(),d()),e());
LISP (a(b(c)(d))(e))
(LISPはカッコ自体も一応セパレータ)
0436デフォルトの名無しさん
NGNGC言語 a+b;
LISP (+ a b)
C言語 test?a+b:a-b;
LISP ((if test + -)a b)
0437デフォルトの名無しさん
NGNGヘロンの公式だっけ?
0438デフォルトの名無しさん
NGNG(defun triangle(a b c &aux s)
(setf s (/ (+ a b c) 2.0))
(sqrt (* s (- s a) (- s b) (- s c))))
0439デフォルトの名無しさん
NGNG&auxって何ですか?
letみたいな一時変数?
0440デフォルトの名無しさん
NGNGあのサンプルって末尾再帰あたりの問題はどうなるんだろ?
0441デフォルトの名無しさん
NGNGその解釈で問題無いと思われ。
(define (triangle a b c)
(let ((s (/ (+ a b c) 2.0)))
(sqrt (* s (- s a) (- s b) (- s c)))))
0442デフォルトの名無しさん
NGNGあのSchemeインタプリタ(L1)を実行してるScheme処理系(L0)が
末尾再帰を正しく扱うなら、L1にインタプリトされるScheme
プログラム(L2)の末尾再帰も正しく扱われる。
0443デフォルトの名無しさん
NGNGおぉ、なんだか懐かしい話だ。
メタサーキュラーインタプリタの利点って昔習った気がするぞ。
0445デフォルトの名無しさん
NGNG簡単に構築できるScheme環境ないですかねぇ。
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGMacOSXネイティブが見当たらないんです。
Linuxに乗り換えようかな…
0448デフォルトの名無しさん
NGNGlisp, scheme を学んだんですか?
それとも自力?
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG教えてないんですか? 初級はどこにもあるにしても.
0451デフォルトの名無しさん
NGNG学生「ついに出来ましたセンセー!
見てくださいよ、世界最速のScheme処理系です
名付けて凄Schemeおれってスゴスギー!」
教授「今どきSchemeなんて誰が欲しがるんだ
遊んどらんで研究しろ論文書け
そんなこったからいつまでたっても博士号とれんのだ」
(大学に程近い川辺)
学生「あーあ、やっぱりSchemeじゃ研究に
ならんかなー
俺も来年は28だしそろそろ卒業せんと
まずいよなー」
−Schemeのソースコードの入ったFDを川に投げ捨てようとする学生
学生「えいっ、こんなもの…」
−とーとつに現れる謎の女
女「待って!」
学生「え…?」
女「私はQ国のスパイ。私の国では今、優秀なScheme処理系を
切実に必要としているのよ!」
学生「なんでまた…」
(続く)
0452デフォルトの名無しさん
NGNGGoogle 検索: fj.comp.lang.lisp
0453デフォルトの名無しさん
NGNG続くな!
0454デフォルトの名無しさん
NGNG俺は続きが読みたい(w
0455デフォルトの名無しさん
NGNG気になる(ワラ
0456デフォルトの名無しさん
NGNGロボット制御のゴリゴリのC使いがLisp会社に引き抜かれて
がんばる話。
0457デフォルトの名無しさん
NGNG続きはまだ?
0458デフォルトの名無しさん
NGNGうお、興味あり。さっそく帰りに探してみよう。
サンクス。
0459デフォルトの名無しさん
NGNG$B!J9uI~!"9u4c6@$NCK$?$A$,$o$i$o$i$H#2?M$r<h$j0O$`!K(B
$BCK!V$=$N%G%#%9%/$rEO$7$F$b$i$*$&$+!W(B
$B=w!V$*A0$O!D%(%k%7%g%U!*!W(B
$BCK!V5W$7$V$j$@$J!"%P!<%P%i!&%j%9%3%U!W(B
$B=w!VF($2$k$N$h!"Aa$/!*!W(B
$B3X@8!V$(!D!)!W(B
$B!J6/0z$K3X@8$N<j$r0z$$$FAv$j=P$9%P!<%P%i!K(B
$B%(%k%7%g%U!VBT$F!*$($($$!"DI$(!*!W(B
$B!J=F$r0z$-H4$$$FDI$$$O$8$a$kCK$?$A!K(B
$B!V%@!<%s!*!W(B
$B%P!<%P%i!V$&!D!W(B
$B3X@8!V$"!*!W(B
$B%P!<%P%i!V!D;d$N$3$H$ONI$$$+$i!"F($2$J$5$$!*(B
$B!!!!!!!!!!$=$N%G%#%9%/$r;}$C$F!"2#ED4pCO$N%"%?%J%=%UBg:4$N=j$X!D!W(B
$B3X@8!V$G!"$G$b!D!W(B
$B%P!<%P%i!VAa$/!"1Q0l7/!*!W(B
$BE4CK!V$I$&$7$FKM$NL>$r!)!W(B
$B%P!<%P%i!V;d$?$A$O$"$J$?$r$:$C$H8+<i$C$F$-$?$o!D(B
$B!!!!!!!!!!@$3&$N1?L?$O$"$J$?$N(BScheme$B=hM}7O$K$+$+$C$F$$$k$N$h!"Aa$/!*!W(B
$B!JB3$1$k!)!K(B
0460デフォルトの名無しさん
NGNG(そのとき突如現れた黒い車)
(黒服、黒眼鏡の男たちがわらわらと2人を取り囲む)
男「そのディスクを渡してもらおうか」
女「お前は…エルショフ!」
男「久しぶりだな、バーバラ・リスコフ」
女「逃げるのよ、早く!」
学生「え…?」
(強引に学生の手を引いて走り出すバーバラ)
エルショフ「待て!ええい、追え!」
(銃を引き抜いて追いはじめる男たち)
「ダーン!」
バーバラ「う…」
学生「あ!」
バーバラ「…私のことは良いから、逃げなさい!
そのディスクを持って、横田基地のアタナソフ大佐の所へ…」
学生「で、でも…」
バーバラ「早く、英一君!」
鉄男「どうして僕の名を?」
バーバラ「私たちはあなたをずっと見守ってきたわ…
世界の運命はあなたのScheme処理系にかかっているのよ、早く!」
(続ける?)
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNGなんちゅう名前を持ち出すんだ‥‥
0463デフォルトの名無しさん
NGNG(define x
(let ((y 0))
(lambda()(set! y (+ y 1)) y)))
(x)=>1
(x)=>2
0464デフォルトの名無しさん
NGNGこれが環境っていうやつですね。
これみてようやく理解できましたw
0465ニセ関西人
NGNG(defun triangle_area (a b c)
(let ((s (/ (+ a b c) 2.0)))
(sqrt (* s (- s a) (- s b) (- s c)))))
↓これはヒドイ(藁
(defun triangle_area (a b c)
(labels ((s (x y z) (/ (+ x y z) 2.0)))
(sqrt (* (s a b c) (- (s a b c) a) (- (s a b c) b) (- (s a b c) c)))))
ところでクロージャ云々で、もめてたようやが、なんやそれ?
そんな言葉があったのすら知らんわ。思わず、モノの本を見返してしもうたわ(泣
本郷さんのカリキュラム、HPで見たで。イイ意味でバチモン言語から入るそうで、
このスレ、いわゆる「純粋主義者」が多いわけやな。「PGは動きさえすれば、ええ」って
感覚でしかやってこなかったさかい、ワテみたいな低偏差値の文系独学厨房は、
そーゆー世界、うらやましくて、うらやましくて、あかんわ。ほんま、お手柔らかに。
MCLでMacOSのX用(←こんな名前の新OS)のアプリケ作れるん?古いOSでなく。
0466デフォルトの名無しさん
NGNGLisp/Schemeで動くおもろいアプリケーションなんかないの?
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGEmacs
0469デフォルトの名無しさん
NGNGいけないから一応忠告しとくけど
SFだからな(笑
0470デフォルトの名無しさん
NGNG>> 細かい定義の話や実装はどうでもいいからさ、
本当にどうでもいいのかと小一時間問い詰めたい。
お前はただ煽りたいだけちゃうんかと。
0471466
NGNG煽るつもりじゃなく、本当にどうでもいい。
オレは言語屋じゃないんで、言語はプラットフォームだと思ってる。
だから「その言語をつかって何をつくるか」に興味がある。
まあ数十行程度のサンプル動かして満足してるだけの人が
大半なら用はないです。サヨナラ。
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG言語屋でも、言語はプラットフォームって思ってる人も多いと思うよ。
だけど、それと「その言語を使って何を作るか」に興味があるのは別じゃない?
実際、どの言語を使っても何でも作れるわけだし、
ここにいる人の大半はきっとlispやschemeで何かを作ってない。
「C言語を使ってlisp/scheme処理系を作ってる」と思われる。
0474デフォルトの名無しさん
NGNG俺はelispは良く使ってるぞ。
公開する程の物じゃないのが多いが、自作Wikiもどきとか、
日記自動整形系スクリプトとか、計算してその結果を
latexのテーブルにするのとか、そういう小物。
0476デフォルトの名無しさん
NGNGhttp://mitpress.mit.edu/sicp/full-text/book/book-Z-H-5.html#%_chap_Temp_2
これ読んでいるのですが、
An assault on large problems employs a succession of programs, most of which spring into existence en route.
この文の
en route.
この意味がわかりません。
エンルートってなんでしょうか?
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNGフランス語だったんですね。
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNG米国人が英語文章の中で使うような仏語やラテン語は
英和辞典に載ってるよ。Web辞書でも引ける。
0481デフォルトの名無しさん
NGNGTR-7500で引いたらでてきました。
すいませんでした。
0482デフォルトの名無しさん
NGNGするってサイクルが多くなってきた。
いいかげんに考えながら作っていくのに向いてるよ。
0483デフォルトの名無しさん
NGNGScheme2C? Gambit-C? それとも stalin ?
0484デフォルトの名無しさん
NGNGプロトタイピングじゃないの?
0485デフォルトの名無しさん
NGNGいや、Cへのトランスレートには何を使ってるのかなと。
0486急に面白くなくなった
NGNG>>280こそウザイ。逝ってよし。
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNG0489488
NGNG0490488
NGNG0491デフォルトの名無しさん
NGNGなぜ? Why?
0492デフォルトの名無しさん
NGNG実際簡単に作れる。scheme->bytecode->Cだけど。
ここで公開はしない。
0493デフォルトの名無しさん
NGNG商用のLISPなら、
多分それぐらいのインターフェースは用意されてると思う。
0494デフォルトの名無しさん
NGNGPerlやRubyにCOMインターフェイスのライブラリがあるから、
そいつをGuileなんかに移植してやればOKでは?
あ、kawaを使えばもっといいかも。
kawa(Scheme)->Java->COM
って感じ?
0495デフォルトの名無しさん
NGNG(つっても処理系どうすんだ・・)
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG商用LISPのトライアル版を使ってみるという手もある。
0499デフォルトの名無しさん
NGNG0500もしかして500
NGNG0501デフォルトの名無しさん
NGNGあった気がする。
0502499
NGNGソースは暇が出来たら読むかも。
まあたぶん読まないけど。
0503デフォルトの名無しさん
NGNGこれは汚れ仕事な気がする。
0504499
NGNG余裕そうに見えるが。
本当にやってる人いないの?
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNGそうなのか・・。
たしかにエクセルの為だけでも移植するのも悪くなさそうだね。
DLLにして、LISPのオブジェクト渡すインタフェースをかませば
処理系毎で共有化できないだろうか。
0507499
NGNGインターフェース考えないか?
俺はやらんと思うが、こりゃ誰かはやるぞ。
Rubyのwin32oleもかなりサブセット状態だが、
あの程度でよければそう難しくも無いだろう。
ttp://homepage1.nifty.com/markey/ruby/win32ole/win32ole02.html
ここにのってる感じの処理をscheme処理系にのせる場合、
どんな感じで普通はやるの?
0508デフォルトの名無しさん
NGNGカナーリ賛成なんだけど問題はライセンスか。
とりあえず2ch共有って事でいいかな?
最低限、DLL-I/FやFFIを持ってる処理系でないと意味が無い。
インターフェースは、アクセス性を求めるならやっぱり
リストベースがよろしいかと。
配置が重要なデータにはアクセス時にイメージ変換してその都度
同期を取る方式でいけると思うんだけど。
(最初はある程度、効率度外視して、最低限モノを作ってしまうのが良策。)
0509507
NGNGふむ、俺は厨なので良くわからんが、そんな感じか。
とりあえず、unionに新しい型追加して、マーク関数を
テーブルに追加する程度で新しいオブジェクトが追加
できるような処理系でソース公開されててヘボく無い
奴、無い?
俺的にはGC回収時にOleUninitialize()する、
みたいな感じがいいと思うのだが。
でもそれだとdll化とかは無理か。
スタートはとりあえず
(require 'win32ole)
って感じか?
0510デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp/SiliconValley-PaloAlto/5042/xyzzy/shlobj.html
エクセルも動きそう。
WSHについては
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
0511デフォルトの名無しさん
NGNG(call-with-ole-class "Excel.Application"
(lambda (excel)
(let ((book1 (excel "Workbooks" "book1")))
(display (get-property book1 "title"))
...)))
call-with-ole-classを抜けると、自動的にOLEはcleanupされる。
(set-ole-event-handler
excel "SheetSellectionChange" (lambda args ...))
なんてのもいるかな...
0512デフォルトの名無しさん
NGNGその通り、with〜系でやるのがいいと思う。
(gc回収時にやるのは危険かも)
例外処理などは処理系毎に任せるしかないかな。
*ERROR-HOOK*やunwind-protect/脱出系call/ccなど
の機構を使って各自で処理する。
0513デフォルトの名無しさん
NGNG(define book (excel 'Workbooks "book1"))
もしくは、
(define book (excel 'invoke "Workbooks" "book1"))
こーいうのがいいな
0514デフォルトの名無しさん
NGNG安全なcall-withは各自で作れるよ
(define (call-with-io name proc open close)
(let ((h (open name)))
(and h (unwind-protect
(lambda () (proc h))
(lambda () (close h))))))
(define (call-with-ole name proc)
(call-with-io name proc
ole-object-create
ole-object-destroy))
(call-with-ole "Excel.Application"
(lambda (h) ... ))
※ここでのunwind-protect書式
(unwind-protect try-proc finally-proc)
0515466
NGNG>>473
> 実際、どの言語を使っても何でも作れるわけだし、
これを言ったらおしまいでしょ。
それぞれの言語に向き不向きがあるから言語の研究をする余地があるんだし。
関数型言語の利点をうまく引きだせるアプリケーションというのは
それなりにある。オレが知っている例だと、Lisp 系の言語はある種の
タスク(というかアルゴリズム)を実装するときに非常に重宝する。
具体的には言わないでおくけど、同じことを Perl や Java でやろうとすると
かなり苦労するはずだ。こういう例は他にもあると思う。
>>467-468 のように「Lisp 自体がおもしろい」とかいってるようなのは、
Lisp を大して使いこなせてない証拠だと思う。まあ実装屋さんとしては
それでいいのかもしれないけど、その先へ行ってみてもいいと思う。
>>474 のようなお手軽なバッチ処理程度のことをやっても、
Lisp のありがたみはあまりわからないような気がする。
カッコがついてるだけで満足できるならそれでいいんだろうが、
これまたもったいないと思う。余計なお世話だろうが。
>>475 は Eliza がおもしろい Lisp アプリケーションのひとつだと
思ってるらしいが、あんなのはたまたま最初に Lisp で実装されただけ。
アイデア自体はおもしろいが、今だったら Perl のほうが簡単に
作れるようなものだし、エレガントさでは Prolog版Eliza のほうが上だ。
> ここにいる人の大半はきっとlispやschemeで何かを作ってない。
> 「C言語を使ってlisp/scheme処理系を作ってる」と思われる。
まあそんな感じでしょう。
速くて便利な処理系を目指して頑張ってください。
ありがたく使わせていただきますので。
0516509
NGNGunwind-protectってSchemeにもあるの?
r5rsの索引には無さげだけど。
とりあえず
(open-ole "Excel.Application")
みたいなのと511みたいなの、どっちがいいのかな?
513みたいなのはなんとなくSchemeっぽく無い気が
するんだが。継続とか使われると後始末が面倒そう
だけど、そうでも無い?>識者
0517509
NGNG0518デフォルトの名無しさん
NGNGr5rsにdynamic-windっていうのがあるよ。
unwind-protectと違って、前にも後ろにも処理が指定できる。
0519509
NGNGもコピペしとく。
cWIN32OLE=rb_define_class("WIN32OLE",rb_cObject);
rb_define_singleton_method(cWIN32OLE,"new",fole_s_new,-1);
rb_define_singleton_method(cWIN32OLE,"connect",fole_s_connect,-1);
rb_define_singleton_method(cWIN32OLE,"const_load",fole_s_const_load,-1);
rb_define_singleton_method(cWIN32OLE,"ole_free",fole_s_free,1);
rb_define_singleton_method(cWIN32OLE,"ole_reference_count",fole_s_reference_count,1);
rb_define_method(cWIN32OLE,"invoke",fole_invoke,-1);
rb_define_method(cWIN32OLE,"[]",fole_propertyget,1);
rb_define_method(cWIN32OLE,"_invoke",fole_invoke2,3);
/*supportpropputmethodthattakesanargument*/
rb_define_method(cWIN32OLE,"[]=",fole_setproperty,-1);
rb_define_method(cWIN32OLE,"each",fole_each,0);
rb_define_method(cWIN32OLE,"method_missing",fole_missing,-1);
/*supportsetpropertymethodmuchlikePerl;-)*/
rb_define_method(cWIN32OLE,"setproperty",fole_setproperty,-1);
rb_define_method(cWIN32OLE,"ole_methods",fole_methods,-1);
rb_define_method(cWIN32OLE,"ole_get_methods",fole_get_methods,-1);
rb_define_method(cWIN32OLE,"ole_put_methods",fole_put_methods,-1);
rb_define_method(cWIN32OLE,"ole_func_methods",fole_func_methods,-1);
rb_define_method(cWIN32OLE,"ole_method",ole_method_help,1);
rb_define_method(cWIN32OLE,"ole_method_help",ole_method_help,1);
rb_define_method(cWIN32OLE,"ole_obj_help",ole_obj_help,0);
rb_define_const(cWIN32OLE,"VERSION",rb_str_new2(WIN32OLE_VERSION));
rb_define_const(cWIN32OLE,"APPEND_NONE",INT2FIX(APPEND_NONE));
rb_define_const(cWIN32OLE,"APPEND_EQUAL",INT2FIX(APPEND_EQUAL));
rb_define_const(cWIN32OLE,"APPEND_BRACKET",INT2FIX(APPEND_BRACKET));
rb_define_const(cWIN32OLE,"APPEND_ALL",INT2FIX(APPEND_EQUAL|APPEND_BRACKET));
rb_define_const(cWIN32OLE,"ARGV",rb_ary_new());
0520509
NGNGrb_define_const(mWIN32OLE_VARIANT,"VT_I2",INT2FIX(VT_I2));
rb_define_const(mWIN32OLE_VARIANT,"VT_I4",INT2FIX(VT_I4));
rb_define_const(mWIN32OLE_VARIANT,"VT_R4",INT2FIX(VT_R4));
rb_define_const(mWIN32OLE_VARIANT,"VT_R8",INT2FIX(VT_R8));
rb_define_const(mWIN32OLE_VARIANT,"VT_CY",INT2FIX(VT_CY));
rb_define_const(mWIN32OLE_VARIANT,"VT_DATE",INT2FIX(VT_DATE));
rb_define_const(mWIN32OLE_VARIANT,"VT_BSTR",INT2FIX(VT_BSTR));
rb_define_const(mWIN32OLE_VARIANT,"VT_DISPATCH",INT2FIX(VT_DISPATCH));
rb_define_const(mWIN32OLE_VARIANT,"VT_ERROR",INT2FIX(VT_ERROR));
rb_define_const(mWIN32OLE_VARIANT,"VT_BOOL",INT2FIX(VT_BOOL));
rb_define_const(mWIN32OLE_VARIANT,"VT_VARIANT",INT2FIX(VT_VARIANT));
rb_define_const(mWIN32OLE_VARIANT,"VT_UNKNOWN",INT2FIX(VT_UNKNOWN));
rb_define_const(mWIN32OLE_VARIANT,"VT_I1",INT2FIX(VT_I1));
rb_define_const(mWIN32OLE_VARIANT,"VT_UI1",INT2FIX(VT_UI1));
rb_define_const(mWIN32OLE_VARIANT,"VT_UI2",INT2FIX(VT_UI2));
rb_define_const(mWIN32OLE_VARIANT,"VT_UI4",INT2FIX(VT_UI4));
rb_define_const(mWIN32OLE_VARIANT,"VT_INT",INT2FIX(VT_INT));
rb_define_const(mWIN32OLE_VARIANT,"VT_UINT",INT2FIX(VT_UINT));
rb_define_const(mWIN32OLE_VARIANT,"VT_ARRAY",INT2FIX(VT_ARRAY));
rb_define_const(mWIN32OLE_VARIANT,"VT_BYREF",INT2FIX(VT_BYREF));
cWIN32OLE_EVENT=rb_define_class("WIN32OLE_EVENT",rb_cObject);
rb_define_singleton_method(cWIN32OLE_EVENT,"new",fev_s_new,-1);
rb_define_singleton_method(cWIN32OLE_EVENT,"message_loop",fev_s_msg_loop,0);
rb_define_method(cWIN32OLE_EVENT,"on_event",fev_on_event,-1);
eWIN32OLE_RUNTIME_ERROR=rb_define_class("WIN32OLERuntimeError",rb_eRuntimeError);
続き。
>>518
お、本当だ。ありがと。
0521デフォルトの名無しさん
NGNGサヨナラなんだろ。
消えろ。
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNGSIODって
ttp://people.delphi.com/gjc/siod.html
これ?
ぱっとみた所、OLE関係の記述は見つからなかったが。
Dr.Scheme、OLEでもgoogleじゃみつかんなかったけど、
どこで見た?
0524デフォルトの名無しさん
NGNGhttp://www.angelfire.com/wa/brianbec/siodffi.html
ここから辿れるんだけどね。
http://people.delphi.com/gjc/winsiod.html
DrSchemeのもPLT本家のサイトにありますが。
0526デフォルトの名無しさん
NGNGダウンロードしたものにはilのファイルしかついて
なかいんだけど、、、
仕方ないので.NETに付いてたLispコンパイラのサンプルを
いじくってます。
0527デフォルトの名無しさん
NGNGひょっとして、今月のCマガの.NETSDKサンプルCDの方に入ってます?
0528デフォルトの名無しさん
NGNGhttp://rover.cs.nwu.edu/~scheme/downloads.html
Cマガの方はよく分からないのですが、ここから
落としました。まだよく見てないのでなんともいえませんが、
C#のソースはついてないみたいなんですよ。コンパイル済みの
ILしかない。今日はもう寝るのであしたよく見てみます。
0529デフォルトの名無しさん
NGNGまあScheme->bytecodeな処理系は沢山あるから別にいいか?
0530デフォルトの名無しさん
NGNG0531デフォルトの名無しさん
NGNG一般には無理だね。
最適化しない処理系で、戻すことを最初から考慮して作れば、
かなりな程度戻せると思う。でもマクロとかは無理だろう。
0532デフォルトの名無しさん
NGNG不可能
0533デフォルトの名無しさん
NGNGただし場合によってはS式には直せる。
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG無理。
0536デフォルトの名無しさん
NGNG無理
0537デフォルトの名無しさん
NGNG無理.
0538デフォルトの名無しさん
NGNGムリ.
0539デフォルトの名無しさん
NGNG同意見でもその理由とか別の切り口で書けば良いじゃん。
つーわけで、リストを生成して返すような処理を
bytecode化する場合を考えてみて>534
0540smat
NGNGLispで解きたいのですが(実際にはn=6で使う)、
だれかLispで作ったひといませんか?
0541デフォルトの名無しさん
NGNG実はgcの必要性はbytecodeとは関係なさそうだね。
リストを生成して返すだけならgcなくてもがんばれるかもしれないけど、
リストが互いに参照しあって循環構造になってるときがgcが必要。
もっともメモリを使い尽くしたら実行をあきらめるという方針なら
どんなプログラムでもgcはいらない。
bytecode化によるメモリ面の利点はプログラムを表現するための
S式が必要なくなること。
0542デフォルトの名無しさん
NGNG最小、何命令ぐらいのbytecodeで済むでしょうか。
0543デフォルトの名無しさん
NGNG最小だとどうだろうね。
アーキテクチャの細かいとこにもよるが。
スタックマシンとして、
加減乗除やcar, cdrや述語も別として...
局所変数ロード、ストア
大域変数ロード、ストア
定数のロード
スタック操作(dup, drop)
call, return
branch
branch-if-nil
あとはクロージャに関する命令がいくつか。
継続に関しても何かいるかも。
まあ20命令もあれば十分だろう。
0544デフォルトの名無しさん
NGNG引数構築用スタック操作2命令 push pop
環境アクセス操作2命令 load / assign
定数読み込み1命令(constant-load)
apply(まんま) / retuen の2命令
条件分岐1命令
make-closure(lambdaそのもの)
以上9つ。実際は末尾再帰対応にするともっと増えるかも
applyとか、単体オペレータとしては機能詰め込みすぎだけど。
環境をどうするかが問題。continuationは・・
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG何に使うの?
0547デフォルトの名無しさん
NGNGscheme でよけりゃ sourceforge にある schematics で LU分解ができたはず。
CL だったら検索かけていくらでも出てくると思うけど。
0548デフォルトの名無しさん
NGNGめんどっちいもんだね。
0549デフォルトの名無しさん
NGNGbytecodeにしてからの最適化は、どっちが効率良いですか?
0550デフォルトの名無しさん
NGNGめんどっちいね。
俺もちょっと読んだ。
序盤の時間関係とかは全部無視して良さげだな〜、
とか思って読んでって、ole_val2variantあたり
で挫折。結構きついね。
0551デフォルトの名無しさん
NGNG効率の意味がわからんけど、
S式をオプティマイズするコードをS式で書けば
色んなlisp処理系に適用できる可能性がある。
bytecodeだと、その処理系だけにしか適用できない。
処理系の作りによって有効な最適化手段は違ってくると思うけど。
S式の段階で可能な範囲の最適化ですぐに思い付くのは、
・定数の畳み込み
・論理式の単純化
・インライン展開
・一時変数の除去
0552デフォルトの名無しさん
NGNG・定数シンボルを含む、定数しか使われていない部分式を見つける。
・evalる
・該当部分をすげ替える。
これだけ。
定数シンボルっていうのは恒久的に値が変わらない事が保証された
変数シンボルの事。
0553デフォルトの名無しさん
NGNGCとLisp、どっちから先にはじめたらよろしいでしょうか?
ちなみに使用してるのはMacOSXで、書籍ではLispは「リスト遊び」、
Cは結城先生の「C言語プログラミングレッスン」と
「はじめてのC」と高橋先生の「やさしいC」があります。
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG環境が両方あるんなら、同時にやるって考えは無いの?
最初にCやって、リストや木のデータ構造がどんなものか把握できたら
LISPもやってみるとか。
結局は目標とか、何か作るつもりでもないと上達しない気がするけど。
0556デフォルトの名無しさん
NGNGどう読むと,環境が両方あると読めるのか解説してくれ.
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG(let((a 1))
(lambda(b) (+ b a))))
(define g (f 1))
こういうのをbytecodeに直すとなるとどうなるんですか?
0560デフォルトの名無しさん
NGNG(define f
(let((a 1))
(lambda(b) (lambda ()(+ b a)))))
(define g (f 1))
(g) => 2
gはfで作られる環境を参照してるから、gだけをコンパイルしたら
矛盾しますよね?
環境の共有を維持したままbytecode化ってできるのかな?
0561デフォルトの名無しさん
NGNGbytecode化以前にその定義ではgは関数じゃなくて変数で値は2ですよ。
コードは存在してないです。
0562デフォルトの名無しさん
NGNG(f 1)でclosureが返されてる風に見えるが?
0563デフォルトの名無しさん
NGNG(compile g)
とかする時に、gの環境も渡せばいい
gの擬似コード(適当
pushenv g-env ;gの環境を渡す
pusharg a ;<=g-envに存在
pusharg b ;<=g-envに存在
pusharg + ;operator
apply
return
でもこれをファイルなどに保存する時に問題になる。
バイトコード化してもfから生成させないと成り立たない。
0564560
NGNGどのみち関数の環境を取ってくる必要ありと。
f側で変更の恐れがなかったら、そのまま
(define g (let ((a 1)(b 1))(lambda () (+ a b))))
と見なしちゃってもいいですね。
この場合結局、
(lambda () 2)
ですけど。
0565login:Penguin
NGNG0566デフォルトの名無しさん
NGNGScheme48
MIT-Scheme
0567デフォルトの名無しさん
NGNGLispMe :-p
0569デフォルトの名無しさん
NGNG補完を使う方法は無いのですか?
あと、実行したコマンドの履歴って使えないでしょうか?
そういうことやるのはEdWinの方なんでしょうか?
0570デフォルトの名無しさん
NGNGInferior Scheme mode で補完できるよ。
0571名無しさん@Emacs
NGNG0572デフォルトの名無しさん
NGNG(eq 'コンパイルできるscheme処理系
(or bytecodeベースの処理系 Cトランスレータのある処理系))
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGHotdogにするのもいいかも。
IL覚えられて一石二鳥。
0575デフォルトの名無しさん
NGNGchez.
インタプリタが入力するたびにインクリメンタルにコンパイルします。
ただし商用。
0576デフォルトの名無しさん
NGNGfunarg problemって、静的スコープのschemeでも関係あるの?
0577デフォルトの名無しさん
NGNGインクリメンタルって、
read-evalの間にcompileかませば、同じ事にならない?
read-compile-eval-loop
0578デフォルトの名無しさん
NGNGする場合、型の問題はどんな風に処理するのが正着なんでしょうか。
GNUのtutorial
http://www.gnu.org/software/guile/docs/guile-tut/tutorial.html
では、Cのコードのほうでassertかけて、不整合時にguileの
エラーを起こすようにしてるみたいだけど、これが常套手段ですか?
schemeの側でデータにタグとかつけて、チェックできるようにするってのもあり?
0579デフォルトの名無しさん
NGNG今年から、「フォトショップみたいなのを作ろう」
になったんだっけ?
去年までは、自然言語解析プログラムだったけど
あまりに難しいという事で、課題が変わったらしい
でも、たった5,6回の授業でschemeやって
残りの5,6回でprologってのもね
もっとゆっくりやればいいと思うけど
0580デフォルトの名無しさん
NGNGGUIもできますみたいなやつ。
0581デフォルトの名無しさん
NGNG合成型ならタグ付けたりするかも。
それとassertは実行時に評価するわけだから、
scheme側で補足してもいいのでは?
マクロでassert作っておけば不要時にnop変換もできるでしょ。
(define assert-debug #t)
(define-macro (assert test)
(if assert-debug
`(if (not ,test) (error "assert:" ,test))
#t)) ;nop
(define (div s n)
(assert (and (number? s) (number? n) (positive? n)))
(/ s n))
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNGGIMP?
0584デフォルトの名無しさん
NGNGguile なら Project HeavyMoon にバイナリがあるよ.
0585デフォルトの名無しさん
NGNG何倍ぐらい速くなるものですか?
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNGええと、普通は、どれぐらい速くなる事期待して作るんですか?
0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNG普通って何?
標準の速度というものが存在しない以上、計測不能だけど。
0590デフォルトの名無しさん
NGNGじゃあ主観でかまいません。
バイトコード化したコードの速度を1として、
インタプリタとの比がどれぐらいひらけば満足しますか?
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGそうなんですか?
0593デフォルトの名無しさん
NGNGbytecodeは3倍。
ネイティブは10倍。
0594デフォルトの名無しさん
NGNGそこそこ速いんじゃない?bytecodeは所詮駆動ループだから、
nativeにはかなわない。
正直、bytecodeって、eval通すか通さないかぐらいの違いしか
無いんでは?
コンパイラが項書き換えの様な最適化を施さない限りは。
つーわけで憶測でしかないが、せいぜい2倍ぐらい速くなれば
良い方だと思うけど、どう?
0595デフォルトの名無しさん
NGNGlog23 (底が2で真数が3のロガリズム)
を計算するには、どうすればいいの?
底が10の常用対数なら
log x
って素直にやればいいというのは直感でわかるんですが。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGすげぇ。
そうやればよかったんだ。
ありがとう。
0598デフォルトの名無しさん
NGNG>正直、bytecodeって、eval通すか通さないかぐらいの違いしか無いんでは?
とりあえず、xyzzyに関しては「そんなことは無い」みたい(詳しいことは知らヌ)。
http://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp/xyzzy04.html
lispはマクロばかりだから。
(マクロ展開がどのくらい負担になるのかは知らないけど)
ちなみに、pythonのバイトコード(?)は、読み込み以外は速くならないそうです。
>>591
ここではそんなことは無かったようだけど……。
http://www.bagley.org/~doug/shootout/craps.shtml
Javaのプログラムが大きかったとか、jreの展開に時間がかかっていたとか、
本当にJavaのほうが遅いとか。
0599デフォルトの名無しさん
NGNG>http://www.geocities.co.jp/SiliconValley-Oakland/1680/xyzzy_lisp/xyzzy04.html
>queen.l 52 秒
>queen.lc 0.7 秒
この差はどういう理由でついたのか。
0600デフォルトの名無しさん
NGNGバイトコンパイルを前提としてるんだからインタプリタは速度を重視してないのでは?
普通インタプリタっていってもマクロの展開とかはあらかじめ済ませておくよ。
ただ、0.7秒は速いね。優秀なコンパイラだと思うよ。
インタプリタの52秒はどう考えても遅すぎ。
P5 166MHzなら5秒程度が妥当じゃないのかな。
0601デフォルトの名無しさん
NGNG単に数学の問題のような
0602デフォルトの名無しさん
NGNG実装の仕方が違いますよね?
どちらかを使いたいのですが、どちらが優れているのですか?
それぞれの特色みたいなのはありますか?
0603デフォルトの名無しさん
NGNG違うの?
0604デフォルトの名無しさん
NGNGhttp://www.schemers.org/Documents/FAQ/
0605デフォルトの名無しさん
NGNG0606602
NGNG違うみたいですよ。マニュアル見比べたら、定義の仕方が
全然違ってました。
>>604
素晴らしいページですね。こんな記述がありました。
> Some Schemes have their own built-in OO system.
> Most of these (e.g. in Bigloo, MIT Scheme, OpenScheme, STklos) are
> similiar to the Common Lisp Object System (CLOS), while others
> (e.g. in PLT Scheme, RScheme) are conceptually closer to C++ and Java.
> Kawa is fully integrated with the Java object system, i.e. it allows Java
> classes to be defined and extended in Scheme.
つまり、MITSchemeはCLOSに近く、DrSchemeはC++やJavaに近いようです。
>>605
そうなんですか?CLOSに近い方が柔軟性ありそうな気がして私には魅力的なんですが。
0607デフォルトの名無しさん
NGNGこれは recursion ですか?
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG遅いって言うのは、他の処理系がprimitiveとして実装しそうな処理も
全て仮想マシン上でやってるからだろう。
(でも昔Yale大で作られたT-Schemeという処理系も同じ様な思想だったけど、
あっちは速かったという話)
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGつーか食っても食ってもふやけて減らない大盛マーボ春雨を思い出した
0613デフォルトの名無しさん
NGNG0614デフォルトの名無しさん
NGNGhttp://www.kt.rim.or.jp/~qfwfq/rhiz-pi/index.html
shift-jisの通る処理系はどのくらいあるんだろう……。
知ってるのはこれだけ。
http://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNGスレタイトル見れ。age
0617デフォルトの名無しさん
NGNG有名なやつだけでもいくつもありますよね。
LISP or SCHEME を始めてみたいのですが、お勧めの処理系はありますか?
プラットフォーム不問で、テキスト処理、簡単な数値計算がしたいです。
GUI が作成できれば尚良いのですが、そういう方面には向いてないでしょうか。
Perl, Perl/Tk の代わりにしたいのですが。
オブジェクト指向だということで、CLOS にしてみようかと考えているのですが、
いかがでしょう?
識者の皆さんのご意見をお待ちしております。
0618デフォルトの名無しさん
NGNGLispの実装の数はプログラミング言語の中で最大かと。
Guileが617さんのニーズにはあってるような気がする。
0619デフォルトの名無しさん
NGNGどうもありがとうございます。
Guile というのは聞いたことがあります。
SCHEME のインタープリタに GUI ライブラリ ( Gtk? ) がバンドルされている
というイメージで良いのでしょうか?
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNGサーバーって作れますか?
0622デフォルトの名無しさん
NGNG0623621
NGNG同期オブジェクトは使えるんですね。
とりあえず、簡単なMTAでも作ってみ
ます。
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG(de(゚Д゚)(lam()(lam()'ガタガタ)))
(((゚Д゚)))
==>ガタガタ
0629デフォルトの名無しさん
NGNGドキュメントが何にもなくて、ただ置いてあるだけなんで、
どうにも分かりません。
0630デフォルトの名無しさん
NGNG(de(゚Д゚)(lam()(display 'ガタガタ)(゚Д゚)))
((゚Д゚))
ガタガタ
(((゚Д゚)))
ガタガタガタガタ
((((゚Д゚))))
ガタガタガタガタガタガタ
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG(define (fib n)
(cond
((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2)) ))))
(fib 10)=>55
コンパイル前
cell 13471
num 2784
コンパイル後
cell 5704
num 1032
(fib 25)=>75025
コンパイル前
cons 18495431
num 3820480
コンパイル後
cons 7808734
num 1410346
この無駄なオブジェクトの量産を抑止したいんだけど、
どんな手がありますか?
0633デフォルトの名無しさん
NGNGこのスレの人々は自分で lisp 実装したりしてすげえと思っていたが,
この本を読んですごさが少し減少されました.
0634デフォルトの名無しさん
NGNG>sicp
なにそれ?
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNGふむ。紀伊国屋にあるみたいだから読んでみます。
情報サンキュ。
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNG使い方は扱ってないので念のため。
0641デフォルトの名無しさん
NGNGそのfibは元々、大量に資源を消費するやつでしょ。
末尾再帰版で評価し直したら?
0642デフォルトの名無しさん
NGNGマクロって新しい機能なの?
本当?
0643デフォルトの名無しさん
NGNG規格は新しい。機能はLispの定番。
>>640
新しい機能というより、説明に要らない機能は扱っていないようです。
SICPは……、
すごい本だと思うけど、数学関係の話がやたらと出てくるのは困ります。
あとあの日本語訳にはもっと困ります。
英語版
http://mitpress.mit.edu/sicp/full-text/book/book.html
0644はぺぽ
NGNGと言うより、ビギナーの定義が一般人とずれているような気がする。
あれは、2,3の言語(c,pascal系)をそれなりに勉強してからやると、
具体的なイメージのつかめる本だ。
そのビギナーの定義に付いて混乱があるため、
賛否両論多いのではないかと思う。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNG良い方法は無いでしょうか。
例えば
(match? '(lambda ()) s)
↓これを
(and (pair? s)
(eq? (car s) 'lambda)
(pair? (cdr s))
(null? (cadr s))
(null? (cddr s)))
に直したい。
0647デフォルトの名無しさん
NGNG0648646>647
NGNGでも始点から辿っていくとca..dr参照が長くなって
効率悪くなるなあ・・
0649デフォルトの名無しさん
NGNGどっかに似たような事してるソースがあった気が
matchとかで検索
0650デフォルトの名無しさん
NGNGほかには回路と線形システムな二科目とディジタルシステム設計な科目がある。われわれは1978年からこの科目の開発に関わってきており、1980年の秋学期からこの教材を現在の形で毎年600名から700名の学生に教えた。
これらの学生のうち、多くは計算機で少しは遊んだことがあり、僅かはプログラムやハードウェア設計の経験をもっているが、大部分は計算の正式教育を少ししか、または全く受けていない。
------------------------
いじょ、「第一版への前文(日本語訳版)」より。
>>644
違うようです……少なくとも、製作者の意図によると。
0651デフォルトの名無しさん
NGNG一般人とMIT一年生を単純に比較することが間違ってると
思われ。しかし、(直接www.ulis.ac.jpが見えないのでgoogleで勘弁して)
http://www.google.com/search?q=cache:Y5Uv4m8_dnU:www.ulis.ac.jp/~nakai/ipsj/9811/ie9811.html
によると、MITでさえもそれほどうまくいってないようだ。
0652デフォルトの名無しさん
NGNGだから、644がいってるのは、その製作者の意図と一般人のビギナーの定義が違う
ということだろ。
そりゃそうさ。MITなんて世界一の大学だからな。
MITにとってのビギナーが一般人にとってのビギナーと同じわけが無い。
0653デフォルトの名無しさん
NGNGはじめてのプログラミング言語
って、まるっきりこの板の厨房レベルの話題だな
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG最強の〜とか好きだよね。
信じちゃいけないよ>654
0656650
NGNGうーん、やっぱりみっとだからですかぁ。
(みっとは我々の言う大学とは別物? なんでしょうね)
>>654
>LispやPrologも当初思われていたような万能なプログラミング言語
Lispが万能と言う話は一度も聞いたことがありませんが……。
; >ポインタなどの構文要素を用いて比較的低レベルの記述が可能なので、
; >ワークステーション上のオペレーティングシステムであるUnixとの相性もよく
;低レベル記述とunixとの親和性は別では……。
http://job.recruit.co.jp/TECH/tensyoku/0002.html
CommonLispのお仕事だそうで。めずらし?
0657デフォルトの名無しさん
NGNGありましたが.
確かにあの本の内容全てを理解することはできなくても,
学部生の時にああいうものに触れておくというのは貴重だと思った.
0658デフォルトの名無しさん
NGNGその文書
MIT では Scheme を教えているが
Scheme は特定分野でしか使われていないから
(MIT での教育が)うまくいっているとはいえない
って感じだね…。
0659デフォルトの名無しさん
NGNG自前?だったらすごいな。
0660はぺぽ
NGNG>これらの学生のうち、多くは計算機で少しは遊んだことがあり、
>僅かはプログラムやハードウェア設計の経験をもっているが、
>大部分は計算の正式教育を少ししか、または全く受けていない。
こういう人達を対象にした本だということは、
一般人にビギナー向けの本だという印象を抱かせる。
実際にそのように理解している人達もいる。
例えば、
http://www.amazon.com/exec/obidos/tg/stores/detail/-/books/0262011530/customer-reviews/104-8598983-8275910?show=1&Go.x=9&Go.y=14
等を参照。
0661デフォルトの名無しさん
NGNGAllegro CLかなんかだったと思う。
でも、なんか会社自体の様子があまり芳しくなくなってしまったようで残念。
0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNGたかだかunder graduateの学生。しかも一年生でしょう。
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG俺漏れも
ミンナニハ ナイショダヨ
0666デフォルトの名無しさん
NGNGその書評で一つ星と五つ星が極端に別れてるのは面白かった.
0667デフォルトの名無しさん
NGNGでも20歳とかその辺だろ?
一番頭がいい時期じゃんかよ。
それに、百歩譲ってMITがあまり凄くないとしても
平均レベルの人とはやはりレベル差があると思う。
0668デフォルトの名無しさん
NGNG鬱だ・・
0669デフォルトの名無しさん
NGNG入った時点では日本の大学生の方が優秀だよ。
高校生の成績を見れ。
0670デフォルトの名無しさん
NGNGだからって、MITが普通レベルということにはならない。
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG東大に合格した学生とMITに合格した学生だと
前者の方が数学や理科の成績は良いよ。
0673デフォルトの名無しさん
NGNG東大と比べてどうだろうが話とはあまり関係ない。
0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNGもちろんどうでも良い事。
アメリカの大学生だからと逝って崇め奉る必要はないという話。
0677デフォルトの名無しさん
NGNGだから、関係ないことを突然しゃべって何になるんだ。
話をずらしてるだけ。
0678デフォルトの名無しさん
NGNGだったはず。東大と比べてどうとかいう話は意味が無い。
0679デフォルトの名無しさん
NGNGMITが特殊だからできて、他じゃ無理というのが馬
鹿げた議論であることがはっきりすると思うが。
東大はただの例だよ。それくらいいちいち言わせるな。
0680マターリ逝こうよ
NGNG0681デフォルトの名無しさん
NGNGはぁ?全然馬鹿げてない。
MITが特殊だから初心者向けでも一般と食い違いがある。
東大よりMITのレベルが低くてもそれは成り立つ。
どこがおかしいんだよ。言ってみろよ。
0682デフォルトの名無しさん
NGNGすぐ実行して試せるからでは?
最初は「文を前置記法にして括弧で括る」って事だけ
覚えればいいから。
(文がリストで出来ているって事は特に意識しない)
0683デフォルトの名無しさん
NGNG「一般」って何だよ?
東大もMITも「一般」じゃないのか?
じゃあ京大や阪大や...や日大や東洋大はどうなんだよ?
SICPがエリートにしかわからん小難しいもののように言うのが
馬鹿げてるって言ってるんだよ。
0684デフォルトの名無しさん
NGNGだれか有名なひとが言ってたな。
理工系の人じゃないけどw
0685デフォルトの名無しさん
NGNG読者のレベルが上がれば、SICPのレベルも上がる
0686デフォルトの名無しさん
NGNGそう。そうが名著たる所以。
K&Rもそうなのかな?読んだことないけど。
0687デフォルトの名無しさん
NGNGK&R はそうでもないような…
0688デフォルトの名無しさん
NGNG東大もMITも「一般」じゃないね。
平均とは明らかにレベルが違う。
京大も阪大もそうだな。
もっとレベルを落とすと怪しくなってくるかもしれないが、それだって
程度問題だ。
それに、誰もエリートにしかわからんとは言ってないだろ。
SICPに初心者用と書いてあっても、普通の初心者用とはちょっと違うのではない
かという話になってるだけのことだ。
0689名無しさん
NGNG0690デフォルトの名無しさん
NGNG竹内郁雄先生の本でLisp (てゆーか、プログラミング)
入門をした私は逝ってよしですか?
SICPは、あとになって実際に使える環境得てからぱらぱら
飛ばし読みして、ふふんって感じでした。こんど、
ちゃんと読み直そうと思います。
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG大学いってないヤツも含めると?
0693デフォルトの名無しさん
NGNGとても理解できない難解なもの、ということですね。
0694デフォルトの名無しさん
NGNGSchemeは理解できるだろ
0695デフォルトの名無しさん
NGNG0696651
NGNGこれ以上やりたい奴は学歴板に逝ってくれ。
あくまでもあの本はSchemeを学ぶ本ではない(翻訳された和田先生もそう
おっしゃっている)。私は >>651 のリンクに載っている大学で
Schemeに触れたのだが、計算機科学の教科書としてはSICPは良いと思う。
ただ、計算機のイロハもわからずその他のプログラミング言語の
利用経験もない、計算量の概念も分からないド素人が人の助けもないまま
あの本で勉強するのはちょっと難しいとおもう。多分それだけのことでしょう。
http://www.ipl.t.u-tokyo.ac.jp/sicp/epilog.html
でもいま湯浅先生の本って書店に行ってもないんだよね。最近Scheme
の本が新しく出たそうだけどだれか読んだことありますか?
0697デフォルトの名無しさん
NGNG最近でたSchemeの本なら読んだことあるけど、なかなか
しっかりした普通の本。
ただ、入門書にしてはちょっと難しい。
0698デフォルトの名無しさん
NGNG0699650
NGNG>>696-698
最近出た本といえば、これですね。
http://www.shuwasystem.co.jp/SchemePrimer/
slibを使っていろいろ。
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG"XXX: The Language"スタイルの本だよ.
0703デフォルトの名無しさん
NGNGこっちの方が新しいようですね。
hhttp://www.amazon.co.jp/exec/obidos/ASIN/4879669547/qid=1005591029/sr=1-2/ref=sr_1_0_2/249-2880077-0801100
>>650の本は取り扱いできないらしい……。
0704デフォルトの名無しさん
NGNG結構良い感じだった。Macに偏ってたけど。
LispでGUI作るのも面白そうそうだね。
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNG特に OOP、 CLtL2 ならCLOS 周りとか。
0707デフォルトの名無しさん
NGNGhttp://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/scheme/impl/rabbit/
0708デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4756139264/
これですか?面白そうですね。今度書店に行って確認してみたいです。
ところでLispが使える仕事ってないものですかね。
いつかそんな会社をここにいるような方たちと作りたい。
これがおれの夢。
0709デフォルトの名無しさん
NGNGどうなんでしょ?と聞かれて何を答えればいいんだ?
0710デフォルトの名無しさん
NGNG>ところでLispが使える仕事ってないものですかね。
つーか強引に普段の仕事で使ってみれば?
煙たがれる様だったら、こっそり組み込んじゃえ(w
0711
NGNGAIBOに笑えないほど本格的な人工知能を。
0712706
NGNGCLtL2 をあんまりわかってないんですけど、 ISLISP と CLtL2 ソースや動作の互換性とか。
CLOS でつくってソース持っていけるのかなと。
0713デフォルトの名無しさん
NGNGhttp://tacs2001.ito.ecei.tohoku.ac.jp/~izumi/TISL/doc/ISLISP/index_j.html
どうなんでしょ、と訊き返してみる。
>>704
Windowsでもああいうのは欲しいですねぇ〜。
(apiを直に、というのならあるんですけど)
.NET関係でSchemeが使えるみたいですけど、よく分からない。
0714デフォルトの名無しさん
NGNGISLISPはCommonLispの下位互換と見なせば根本は多分同じだから、
ISLISP側で足りない物を補完すれば同じ様に動くと思うけど。
0715デフォルトの名無しさん
NGNGとりあえずlispコアをdllにでもして、
外部から扱える様にしとくと便利。
lisp_handle h = lisp_create();
lisp_evalstring(h, "'(a b c)");
obj = lisp_result(h);
・・・
0716706
NGNGいきなり CLtL2 は理解するのが大変なので、 ISLISP ならまだ小さいから覚えやすいかなと。(w
>>714なるほど、下位互換っていう位置づけだったのか。
全然違う仕様を作ったのかと思ってた。
0717713
NGNGそうでしたか。
ついでに。
http://www.okilab.com/islisp/islisp.html
>ISLISP の目的は、一貫した言語仕様をもち、産業界での使用に耐え得る品質を持った、
>Common Lisp のサブセットを開発することであり、
……
>仕様の検討が行なわれながら,今回のISLISP規格に含まれなかった
>機能として,パッケージあるいはモジュールがある.
>実用的なソフトウェアの開発では,名前の衝突を解決するこれらの機能は不可欠であり,
>今後の課題である
だそうです。
0718デフォルトの名無しさん
NGNGISLISPでも動く様にするってのは、趣味でしょ。
変なこと気にしながら中途半端なコードを書くよりは、
CL2ISLISPを作るとかした方が健全。
0719デフォルトの名無しさん
NGNG'(a b (e f) c d) -> "(a b (e f) c d)"
0720デフォルトの名無しさん
NGNG(format nil ...)
0721デフォルトの名無しさん
NGNGできました。ありがとうございます。
0722デフォルトの名無しさん
NGNGschemeならこうかな?
(define (s-expresstion->string s)
(call-with-output-string (lambda(port)(write s port))))
(define (string->s-expresstion s)
(call-with-input-string s (lambda(port)(read port))))
0723デフォルトの名無しさん
NGNG問題 1.5 なんですけど, (ひまがある人は見てね)
正規順序にしても作用順序にしても,
(p) を展開したり評価している所で
無限ループに陥るような気がするんですが.
誰か教えて下さい.
0724これか
NGNG(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
Then he evaluates the expression
(test 0 (p))
What behavior will Ben observe with an interpreter that uses applicative-order evaluation?
What behavior will he observe with an interpreter that uses normal-order evaluation?
Explain your answer.
(Assume that the evaluation rule for the special form if is the same whether the interpreter is using normal or applicative order:
The predicate expression is evaluated first, and the result determines whether to evaluate the consequent or the alternative expression.)
0725デフォルトの名無しさん
NGNG彼は、次のような2つの手続きを定義しました。
(define (p) (p))
(define (test x y)
(if (= x 0)
0
y))
そして、彼は次の式を評価しました。
(test 0 (p))
applicative-order なインタープリターでは、どんな結果になるでしょうか?
normal-order な評価ではどうなるでしょう?
あなたの考えを説明してください。
(normal と applicative とで、スペシャルフォーム if の動きは同じものとします。
ifの条件式がはじめに評価されます。その後に、その結果が真か偽かによって、then部とelse部がそれぞれ実行されます。)
0726デフォルトの名無しさん
NGNGを評価すると
(if (= 0 0)
0
(p))
になるから、
(if (TRUE)
0
(p))
↓
0
0727723
NGNGguile で実際にやってみたんですが,
(if (= 0 0)
0
(p))
だと, if は special form なので確かに (p) は評価されないんですが,
(test 0 (p))
だと止まらなくなります.
問題の出し方は applicative-order と normal-order で異なる振るまいをする
という感じなので, どっちかは止まるのかなと思ってるんですが,
applicative(作用) order だと (test 0 (p)) の (p) の評価の時に止まるし,
normal (正規) order だと演算子 (p) の展開が無限に続いて止まらないのでは
と思うのです.
guile は作用順序だと思うので, 正規順序の時実際にどうなるかは
わからないんですが.
0728デフォルトの名無しさん
NGNGnormal orderだと726の書いた通り止まる。(p)は評価されないから。
(展開って何?)
Schemeのようにapplicative orderだと止まらない。
0729デフォルトの名無しさん
NGNG作用順序: 他のredexに含まれていないredexのうち、最も左のものを書き換える。
0730723
NGNGnormal order だと
(test 0 (p)) の test のみが演算子であって,
この時点では (p) は演算子ではないので, (p) が評価されたり
展開されたりするということはないんですね.
展開というのは SICP の日本語版の説明にあった言葉ですが,
ここでは被演算子を評価しないで演算子を基本演算子が出てくるまで
置換えていくことを指すようです. もっとも置換えという言葉も,
厳密に定義するとずいぶん難しいということが脚注にありました.
やっとわかりました. みなさんどうもありがとうございました.
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG俺は第三章まではスムーズに来れたんで、そこまではアドバイスできる。
あの本はどんどん難しくなるんで、仲間がいないとつらいよ。
0733デフォルトの名無しさん
NGNG全部おわらしました。
問題は、そうですねー、7割くらいしか解いてません。
0734いや、なんとなく
NGNGhttp://www.sampou.org/scheme/sicp/answer/
http://www.melt.kyutech.ac.jp/~gogogo/sicp_ex/
http://pluto.aurorasd.co.jp/~mkama/sicp/
0735デフォルトの名無しさん
NGNG自分で考えないと。
0736デフォルトの名無しさん
NGNGMLに対するLazy-MLみたいなのか。
インタプリタなら難しくないね。Scheme自身で書けば特に簡単。
でも、自分でdelayとforce使えば、素のSchemeでも似たような
ことはできるよ。
・(car, +, <などstrictなprimitive関数を除く)関数呼び出しの引
数はすべて(delay ...)で囲う。
・変数参照は全て(force ...)で囲う。
とするだけ。
(define lazy-tak
(lambda (x y z)
(if (not (< (force y) (force x)))
(force z)
(lazy-tak (delay (lazy-tak (delay (- (force x) 1)) y z))
(delay (lazy-tak (delay (- (force y) 1)) z x))
(delay (lazy-tak (delay (- (force z) 1)) x y))))))
(lazy-tak (delay 18) (delay 12) (delay 6)) => 7
0737736
NGNG0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNG実装用ではなく、
人間の理解に資するための方法ではないのだろうか?
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743742
NGNGいわゆるcall-by-needと言われる奴で、
正規順序というのは、
call-by-nameとか言われる奴だったと思うが。
自信無いんで適当に調べてくれ。
0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNGちがうって。kawaはただのcall-by-valueだよ。
call-by-nameで生じる無駄な計算を避けるのがcall-by-need。
call-by-name (normal order):
((lambda (x) (+ x x)) (* 10 10))
-> (+ (* 10 10) (* 10 10))
-> (+ 100 (* 10 10))
-> (+ 100 100)
-> 200
call-by-need だと、(* 10 10)をコピーせずに、同じ式を
共有して
((lambda (x) (+ x x)) (* 10 10))
-> (+ (* 10 10) (* 10 10)) ; 2つの(* 10 10)は同一のセルで表す
-> (+ 100 100)
-> 200
みたいになる。
delayとforceを使った場合、forceするたびにdelayの引数を計算
しなおすとcall-by-name。一度forceされたら結果をキャッシュして
計算し直さないのがcall-by-need。(ふつうの実装は後者。)
0746デフォルトの名無しさん
NGNGnormal formが存在するならば、正規順序の簡約で必ずnormal form
に到達できるという保証がある。つまり、止まるプログラムなら正
規順序で評価すれば必ず止まる。正規順序で止まらないプログラム
はどうやっても止まらない。
作用順序簡約にはその保証がない。正規順序なら止まるプログラム
も、作用順序だと止まらないかもしれない。そういうプログラムの
例が >>725
他にも、
(define infinite-list (cons 1 infinite-list))
(caddr infinite-list)
なんていうのは、正規順序の言語なら止まるが、Schemeのような作
用順序の言語では止まらない。
MLやSchemeのような作用順序の言語に比べて、正規順序で評価する
と >>745 のように無駄な評価が生じて桁違いに遅くなる。そこで
開発されたのがcall-by-need (graph reduction, fully lazy
reduction)。能力は正規順序と同じで、効率が良い。Haskellや
Cleanはfully lazyな言語。
07477
NGNGあれから、gc直後をフックする様にして、
hash-object毎にrehashする関数をフックに登録する方法で
なんとかできました。結果、物凄く速くなりました。
答えてくれた方、ありがとうございました。
0748742
NGNG一般に、実引数の評価時期(評価順序)は、3つに分けられるらしい。
1.eager-evaluate
2.lazy-evaluate
3.normal-order
んで、1.は、cとかpascalで一般に行われているようなものをいう。
これは、簡単なんだが、不必要な引数(!)まで評価してしまう。
2.は、必要な時に評価されるが、それは最初だけで、
次から同じ物が出てきた時には、どっかに取っておいた最初の評価結果を使う。
3.は、必要な時に評価されるのは同じだが、その評価結果は取っておかないで、
いつもいつも評価する。自明のことだが、これは不効率ということになる。
2.3は関数プログラミングでは、有効とされている方法らしい。今思い出した。
んで、1の不必要な評価って言うのが、例えば、次のような奴。多分。
int f(void){return f(void);}
void g(int a, int b){cout << "a has " << a << endl;}
ここで、g(1,f());とかやると、終了しなくなる。
これが、正規順序だと、f()は評価されないまま終了できる。
つーことらしい。
しかし、考えてみれば分かるが、C/C++とか使っている限りでは、
こんなプログラミングはしない。
そのことよりも、lazy-evaluationをやることのオーバーヘッドが気になってしまう。
まあしかし、最近はほとんど問題にならないということらしいが詳しいことは知らん。
0749デフォルトの名無しさん
NGNG実装したところで「何に使うんだ」という疑問は残るな・・
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNGできると思うんですが, scheme でとりわけ強調されるのは
それが一定以上のスペースを使わないことが保証されている
からですか?
0752デフォルトの名無しさん
NGNGLazyな言語だと、なんていうか、式をいつ使うかとか
「これはまだ評価しちゃいけない」とか考えなくて良くて、
なんだか楽なことがある。
(define quick-sort
(lambda (vector)
(letrec ((recur (vector-append (quick-sort left)
(vector pivot)
(quick-sort right)))
(insert (insert-sort vector))
(parts (partition vector))
(left (car parts))
(right (cadr parts))
(pivot (caddr parts)))
(if (< (vector-length vector) threshold)
insert
recur))))
あんまり良い例じゃないかも知れんが…
recurとかinsertとかは、いわばサブルーチンみたいなもんだが、
それを(lambda () )でくくる必要がなくて、単に「使うかも知れない
式」をどんどん部品として挙げていけば良いというか…
分かってもらえるかな。(ちなみに、Haskellだとletとletrecの
区別は無くって、全部letと書く。)
0753デフォルトの名無しさん
NGNGてゆっか、あの手のマシンで動くその手の処理系って、いまでも
使われているようなのってあるんでしょうか?
0754デフォルトの名無しさん
NGNG>あの手のマシンで動くその手の処理系
って何?
0755デフォルトの名無しさん
NGNGの事かな?もうそんなマシン残ってないんじゃないかと思うが…
まあ、普通のapplicative orderのLispだよ。ただ、data
parallelな並列処理をするための、特殊なデータ構造(Xector,
Xet, Xapping)が加わってるだけ。
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGを実行する」みたいに、データ構造に対する操作として並列処理を行う考え方。
High Performance Fortranとかもそうだね。
CM Lispについては、えーと、うまく説明する自信がないので、詳しくは
Connection Machine Lisp: fine-grained parallel symbolic processing ,
Guy L. Steele and W. Daniel Hillis,
Proceedings of the 1986 ACM conference on LISP and functional programming,
1986, ACM Press New York, NY, USA, Pages: 279 - 297, ISBN:0-89791-200-4
を読んで欲しいんだけど、ちょっとやってみる。
xapping (mappingのもじり)とは、写像を表すデータ構造で、
{sky->blue apple->red grass->green}
のように書く。順序は関係ない。{grass->green apple->red sky->blue}
と書いても全く同じデータを意味する。
(xref '{sky->blue apple->red grass->green} 'apple) => red
のように検索ができる。
キーと値が同じ要素(例: apple->apple)は、単にappleと書いて良い。
{apple orange strawberry} のように、そういう要素ばかりからなる
xappingをxet (setのもじり)と呼ぶ。
また、[red blue green]は{0->red 1->blue 2->green}と書いたのと同じで、
xector (vectorのもじり)と呼ぶ。
任意のキーに対して同じ値を持つxappingをconstant xappingと呼ぶ。
例えば{->5}は、どんなキーで検索しても値として5が返る。
任意のキーに対してキーと同じ値を返すxappingをuniversal xappingと呼び。
{->}と書く。
任意のキーに対して、キーに1引数関数fを適用した結果を値とするxappingを
lazy xappingと呼ぶ。例えば{sqrt}は、任意の数に対してその平方根を値として返
す。
listと同じドット記法で、「その他すべての要素」を表すことができる。
例えば、{pi->1.772453851 e->1.6487212 -1->i . sqrt}とか。
0759デフォルトの名無しさん
NGNGxappingに対して、αという操作を使って一斉に関数を適用することができる。
mapcarみたいなもの。引数が複数あるとき、複数のxappingでキーが共通の要素
にだけ関数が適用される。
(αcons '{a->1 b->2 c->3 d->4 f->5} '{b->6 d->7 e->8 f->9})
=>{b->(2 . 6) d->(4 . 7) f->(5 . 9)}
βは縮約演算。(β+ '{1 2 3 4 5}) => 15
2引数だと、第1引数と第2引数で共通するキーを取り、第1引数の方の値をキー、
第2引数の方の値を値として、関数を適用した結果を返す。例えば、
(β+ '{glass->green sky->blue banana->yellow
apple->red tomato->red egg->white}
'{grass->1 sky->2 banana->3 apple->4 tomato->5 mango->6})
=>{green->1 blue->2 yellow->3 red->9}
red->9は、apple->4とtomato->5の値に関して+を適用した結果。
ヒストグラムは(defun histgram (x) (β+ x '{->1}))と書ける。
(histgram '{a b a a b c d}) => {a->3 b->2 c->1 d->1}
この他、Common Lispのsequence関数(remove-ifとかsortとか)はxappingに対しても
使えるよう拡張されている。また、xapping同士の和集合などいくつかの演算が用意
されている。xappingに対する基本操作は全て並列に行われる。
これらを組み合わせて、並列プログラミングができる。APL言語とFP言語の影響を強
くうけている、らしい。
0760無名λ式
NGNGCommon Lisp上のemulatorだけで。(まあCM-2に実装できるわけもないが…)
美しいから、100台のPC-UNIXとかで実装したら面白いだろうな。
>>751
最初だから自慢げなんでしょ。
新宿の中村屋のカリーみたいなもん。
0761デフォルトの名無しさん
NGNG>Connection Machine Lispって結局並列計算機上の実装ないよね?
無いと思う。上の文献はSymbolics 3600上でのエミュレータ。
>美しいから、100台のPC-UNIXとかで実装したら面白いだろうな。
ちょっと粒度が小さすぎるかもね。
0762デフォルトの名無しさん
NGNG「粒度」は大きいような気が...ていうか、「粒度が低い」ならわかる。
(いや、揚げ足とるつもりとかじゃなくて、ホントに知りたいのです。)
0763デフォルトの名無しさん
NGNGいやー、syntax sugarは言語機能から排除して本質的な構文だけにする、
というのがSchemeのポリシーじゃない? tail recursionがloopになる
から、loopが必要ならtail recursionを使えば良い=loopはsyntax sugar
だから実装しない、ということが主張できる。そのためにtail recursion
をどう実装するかを決めておく必要があるってことでしょう。
0764デフォルトの名無しさん
NGNG同意。
唯一の繰返し構文doでさえオプション扱いなのがカコイイ
0765デフォルトの名無しさん
NGNG同意。
唯一の繰返し構文doでさえオプション扱いなのがカコイイ
0766デフォルトの名無しさん
NGNGなんやねんあんたら('Д`;)
0767デフォルトの名無しさん
NGNG無限ループしてるね。stack食い潰しそうだ。
0768デフォルトの名無しさん
NGNGschemeなら大丈夫ってことで
0769デフォルトの名無しさん
NGNG言葉足らずだった。
「Connection Machine Lispの並列処理機能は粒度が細かいので、PCクラスタ
だと効率が良くないかもしれない」と言いたかった。
粒度というのは並列処理の分割単位の木目の細かさのことで、タスク間の通信
の間にいくつの命令が実行されるかで定義される。Connection Machine Lisp
だとほんの数命令くらいになると思う。
0770デフォルトの名無しさん
NGNGわかった人いる?
0771無名λ式
NGNG> 「Connection Machine Lispの並列処理機能は粒度が細かいので、PCクラスタ
> だと効率が良くないかもしれない」と言いたかった。
xappingと同時にα、βを真面目にフル実装しようとすると、
PEは最低でもPalm Pilotくらいの能力が必要だと思う。
集合論的な関数(とその合成を)実装しないといけないので。
> Connection Machine Lispだとほんの数命令くらいになると思う。
となるようにCM Lispを簡略化したのが、CM-2やCM-5で動いていたらしい*Lisp。
C*ってのもあったな。どれも現物使った事ないや。似非エミュ書いた事はあるけど。
0772デフォルトの名無しさん
NGNGTurboScheme作れば売れると思うんだけど。>Borland
せっかく昔TurboProlog作ったのに
0773デフォルトの名無しさん
NGNGDelphi/Kylixのようにするとか。
でも、今BorlandがPascalの処理系を作っているのは、TurboPascalの頃からのブランドイメージがあるからだと聞きました。
Lisp/Schemeが今売れるかどうかは別として(売れてほしいなぁ)、Borlandは今のところ他の言語に手を伸ばすつもりはないでしょう。
>Prolog
すごい。
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNGどうだろ。当然primitiveにも、だよね。
Common Lispのequalやsortの型は何?
0776デフォルトの名無しさん
NGNGequalは構造の比較だから置いておくとして、
sortは比較関数次第でしょ?
入出力がリスト->リストだとして、比較関数とリストを引数に取るんなら、
比較関数側の入出力型判定でどういうリストが入力としてふさわしいか
実行前に判るんじゃない?
合成型とかの伝播考えると難しそうだけど。
シンボルをキーとしたalistをソートする場合は、
「caarがシンボルのリスト」とか、最低限何が満たされてる必要があるのか、
でもわかってれば有用なんじゃないかなあ。
0777デフォルトの名無しさん
NGNGsortは文字列やベクタも受け付けるんだけど…
:key, :start, :end引数もあるし…
「caarがシンボルのリスト」って型の概念じゃ表せないと思う。
0778デフォルトの名無しさん
NGNGC言語とタメ張れる様にするにはどうしたらいい?
トランスレータ書くしかない?
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNGバイトコード化程度じゃ、多分駄目。
制御構造を全部nativeにするとか。
トランスレーターは、同時性が薄れるから個人的には却下。
0781デフォルトの名無しさん
NGNGLISPでCコンパイラ作るぐらいの気合が必要。
0782デフォルトの名無しさん
NGNGインライン展開するためには型が推測できないと。
Common Lispで型宣言つけまくったプログラムなら頑張ればなんとか
なるはず…でも大変。
0783デフォルトの名無しさん
NGNG型が推測以前に四則演算だってただの関数だから
変更されるかも知れないのであらかじめ展開するのは…
0784デフォルトの名無しさん
NGNG日本語が通ればもっといいんだけど。
0785デフォルトの名無しさん
NGNGEdScheme Installer 3,483 KB
0786デフォルトの名無しさん
NGNGちょっと触わってみたけど、IDEとしてはDrSchemeより良い感じ。
まあ、売り物だし、これぐらいのクオリティは当然かも。
ドキュソ大学生の作った物と比べるのも酷だが。
0787デフォルトの名無しさん
NGNGDrSchemeはドキュソ大学生が作ったものだったのか?
0788デフォルトの名無しさん
NGNGsignalトラップしてそこまでの継続を保存するのって
schemeなら簡単だよね?
0789デフォルトの名無しさん
NGNGドキュソ大学生=ドキュソドキュソ大学生
すなわち
大学生=ドキュソ
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNGなんだ、そういうくだらない思考だったのか・・・
わかりにく。(w
0792デフォルトの名無しさん
NGNGSchemeではprimitiveをインライン展開することが規格で許されている。
0793デフォルトの名無しさん
NGNG基本的に同じものと思うよりも。
0794デフォルトの名無しさん
NGNGS式解析してまわる場合ってマクロも展開しなきゃいけないの?
0795デフォルトの名無しさん
NGNGインライン展開は簡単、
解析して、展開したい関数名に到達したら、その名前をlambdaに
置き換えるだけ。ただ、これだけでは効率は良くならないから、
不要なlambda/letを削除していく。
この作業が大変。
0796デフォルトの名無しさん
NGNGそういう話しなのかなぁ?
上の方でprimitiveが〜とかっていってるけど、
primitiveはlambdaを置き換えたりとかしないよね?
>>794はコンパイルする話をしてる?
0797794
NGNG一般的なS式のインライン展開の話でした。
primitiveのインライン展開も興味ありますが、
バイトコードとかの話ですよね?
>>795
やっぱりマクロは展開しないと解析できないですよね?
マクロ毎に解析するロジックを作るのは大変そうだし。
0798デフォルトの名無しさん
NGNG規格的にもOK。(common-lispパッケージの関数は再定義できなくても良い。
再定義しようとするプログラムの動作は未定義。)
0799sageておきます
NGNG>ISLispはオブジェクト指向機能を備えていますので、すべてのデータはいずれかのクラスのインスタンスです。
CommonLispもこんな感じでしたっけ?
0800デフォルトの名無しさん
NGNGCommon Lispでは違う。
standard-objectおよびそのサブクラスだけがいわゆるobject。
しかし、ISLispでも実質的には同じ。整数やconsのサブクラスを作れるわけで
はない。
0801デフォルトの名無しさん
NGNGあ、そうか……。
どうもです。
0802デフォルトの名無しさん
NGNGslib?
CommonLisp より柔軟なのはわかるけど, 実際に
プログラムを作る時はもうちょっと
関数がそろっていた方がいいような気がする.
0803デフォルトの名無しさん
NGNGCommonLispエミュる(というほど大袈裟なものではない)
パッケージがリボジトリにあった気が。
0804デフォルトの名無しさん
NGNGは「拡張パッケージ」とは言わないなあ……。
他にはslibしか聞いたことがありません。
0805デフォルトの名無しさん
NGNGSLIBは初期化ファイルを揃えとけばそのまま使える物。
という感じがする。
処理系にdefine-macro書式のマクロ構文を用意しておくと、
STkやDrSchemeのスクリプト類が使える。
個人的にはS式→S式変換の類(処理系依存しないもの)
はもっと広めて欲しい。(SRFI程度では不足)
0806名無しさん@Emacs
NGNGテキストファイルの処理とか。
0807デフォルトの名無しさん
NGNGDrSchemeかな?
0808デフォルトの名無しさん
NGNG他の scheme で regexp が使えるのありますか.
0809デフォルトの名無しさん
NGNGらしい。
http://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0810808
NGNGお, ありがとうございます.
Gauche って初めて聞いたけど, 見たところ結構よさそう.
0811デフォルトの名無しさん
NGNGWindowsでSchemeするなら、さしあたってEdSchemeが一番洗練されていると
思う。150ドルするけど、それだけのことはあると思う。もっとも日本語文字化けするけど。
日本語を扱うならKawaがいいんじゃないか。Javaが動作する環境なら、可搬性がある
わけだし。
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG特徴は
・フリーソフト
・さまざまなプラットフォームで動作可能
・高速なJITコンパイラ搭載
・日本語などの文字も使用可能
・その他
0815デフォルトの名無しさん
NGNGEdSchemeってEXE作れるの?
ちなみにSIODって処理系は作れるぞ。
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNG心なしかCPU負荷が高いような気もするが。
0819デフォルトの名無しさん
NGNGEdSchemeのような環境とセットだとすっごくいいと思う。
売り物のChez Schemeはすっごく高価なんでしょ。
0820デフォルトの名無しさん
NGNGvschemeより速い?
0821デフォルトの名無しさん
NGNG特にメモリがすぐなくなるな。
メモリ自体は安くなってるんだけど、ノートだとメモリの最大搭載量が
512MB だったりするので困る。
0822デフォルトの名無しさん
NGNGんで >>33 >>41 >>94あたりの話へ戻る、と。
0823821
NGNG処理系 or OS が糞ってことか?
それはそうかもしれないけど、なんかすっきりしないなぁ。
Lisp/Scheme ではそういう問題が起きやすいという印象を持ったよ。
ちなみに WinMe(スマソ) + DrScheme でサンプルプログラムを動かした。
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNGtclぶっ潰そうっていう意図が見え見えだから。
0828デフォルトの名無しさん
NGNGtcl好き?
0829デフォルトの名無しさん
NGNG人がせこせこ作っているものを
こともなげに壊そうとする連中は嫌いだと言っているに過ぎない。
0830デフォルトの名無しさん
NGNGwetだねえ。いや、否定はしないけど。
でもさ、guileがtclを話せるようにすれば、
guileの中でtclは生きるわけで。
(でもって、その逆は無理なわけで。)
やっぱりtclが非力すぎるのが問題なんだと思う。
0831デフォルトの名無しさん
NGNGその意図が嫌いなんだよね。
Stallmanのある種の大人気無さが。
0832デフォルトの名無しさん
NGNGっていうか、そんなことがguileの普及を妨げている理由だと本気で考えてるの?
0833デフォルトの名無しさん
NGNGそれをつぶすのが目的ってことはないでしょ
0834デフォルトの名無しさん
NGNG実際のところは、lisp系の言語が普及しないのと
同じような感じだろ。
>>833
tclのいる立場にとって代わろうと言うのは紛れもない事実だ。
それをつぶすといわずしてなんと言おう。
0835デフォルトの名無しさん
NGNGほかのフリーソフトの地位を奪おうっていう例は
べつに珍しくないんじゃ? GNONMEとKDEとかさ。
とあるソフトの機能だとかパッチとかのレベルになると、
完全に正面対決してたりするんでは。
0836デフォルトの名無しさん
NGNG漏れも。
でも、この件に関しては大人げないとは思わないけどね。
拡張言語に tcl を使わず guile を使おうってのは
ただ単に、(重要なところで)より良いモノを使おう(作ろう)って発想だし。
0837デフォルトの名無しさん
NGNGgnomeとkdeは違う。
>>836
んじゃ、使えばいいだろ。
別にそのことまでいやだといっているわけではない。
個人的な感覚の問題さ。
0838デフォルトの名無しさん
NGNGん?gnomeとkdeはそりゃ違うに決まってるがそれがどうした?
同じだといってるやつなんていないぞ。
個人的な感覚だからしょうがないのかもしれないが、
君の感覚はちょっと変だな。
いいものを使えるようにしようとしてるのを大人気ない
と思うなんて。
0839デフォルトの名無しさん
NGNG意味がわからんことを言うな。
0840デフォルトの名無しさん
NGNGというか、どう言う経緯でそのような理解になったのかを
詳細に説明してください。
0841830=832
NGNG829=831=840はtclが非力かどうかとか、拡張言語とはどうあるべきかとか、
そういう話は別として、RMSの態度が気に入らないって言ってるんだよね?
それはあなたの勝手ですし、RMSの態度が気に入らない同志を探してもいいし、
RMSが人を傷付けたということをアピールしてもらってもいいけれど、
なぜGuileが流行らないかという問いかけに対するフォローとしてはお粗末じゃないかしら。
RMSがもっと別の言い方でGuileをアピールしたとしても、
結局tclキラーとして登場することには変わりがない。
RMSの主張が間違っている、Guileよりもtclの方が良い、という意見なら、
興味深いけど、RMSの態度が気に入らないといだけではね。
もっとジェントルにGuileが登場したとしても、本質的にtclと衝突するわけ
だから、結果はいっしょだと思うんだが、そこところはどうですか。
0842838
NGNG俺は>>837のほうこそ意味がわからない。
stallmanがtclを潰そうとしてるのが大人気なくて、
それが普及の妨げになってるのだろうと主張してるやつが
いて、その意見に対してよせられた主張が次の二つ。
・gnomeとkdeのように、他のソフトから地位を奪おうとするのは
珍しいことではない。
・tclより良いものを使いたいからguileを作っただけなのでは
ないか。
そして、それに対して、>>837がgnomeとkdeが違うなどと
意味不明の主張をしたわけ。
俺個人としては2つ目の反論と同じ意見で、大人気ないと
思うのは変だと思う。>>841が言うように、そう思うのは
個人の勝手だけどね。
0843デフォルトの名無しさん
NGNG>そういう話は別として、RMSの態度が気に入らないって言ってるんだよね?
>それはあなたの勝手ですし、RMSの態度が気に入らない同志を探してもいいし、
>RMSが人を傷付けたということをアピールしてもらってもいいけれど、
>なぜGuileが流行らないかという問いかけに対するフォローとしてはお粗末じゃないかしら。
>>834
0844841
NGNG0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNG過去に発生したフレームを蒸し返したら、泥沼になるに決まっている。
0847デフォルトの名無しさん
NGNGそれに関しては大して興味がないとしか言えない。
0848デフォルトの名無しさん
NGNGそれのどこが非難されるべきなのかわからん。
永久にCOBOLとFORTRANつかっとれ、とか?
0849デフォルトの名無しさん
NGNG正規表現がない実装系では text 処理は
やらないものなんですか?
perl みたいに使おうとするのは間違いかな?
0850デフォルトの名無しさん
NGNG第三者の立場から言わせてもらうと、837の意見は
「gnomeとkdeは(他のソフトから地位を奪おうとしているのとは)違う。」
という風にも受けとめられるということを一言、言わせてもらいます。
多分、その意味解釈の仕方で意見が分かれているように感じられたので。
ただし、もう一言付け加えるなら、
一読した時点では、私も838と同様な意味の受け取り方をしたことも付け加えます。
文を略すこと自体は悪くないが、
文脈上、837の略すタイミングが悪かったと言わざるを得ないです。
0851デフォルトの名無しさん
NGNGSchemeで書かれた正規表現ライブラリを使えば良い。
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html
0852デフォルトの名無しさん
NGNG処理のしくみを勉強したいんで、効率悪くてもいいです。
0853デフォルトの名無しさん
NGNG並行処理ってのはよく知らんけど、継続でなんとかなるのでは?。
call/ccでノンプリエンティブ(協調型)スレッド(=コルーチン)
なら作れるよ。
プリエンティブマルチスレッドが使えるかは処理系に依る。
0854デフォルトの名無しさん
NGNGschemeの本買えばたいがい書いてあるよ
継続使うやつね
立ち読みで確認してからゲット
0855デフォルトの名無しさん
NGNG838と同様な意味って言うのは、どんな意味だ?
838からはどんな意味かがわからん。
0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNGそう言う意味か。
確かにそのレスの字面だけ追えばそうなるな。
しかし、他のレスも含めて考えればそうはならないと思うが。
0858デフォルトの名無しさん
NGNGいいかげんに荒らすのやめろよ。
君は個人的な感覚について表明したかっただけなんだろ。
君がそう感じているのはわかったよ。
でも、それを周知したところで誰にどんな得があるんだい?
0859デフォルトの名無しさん
NGNG誰かがguileが広まらない理由を聞いていたので
俺はそれに俺なりに答えただけだ。
それより他の意味はない。
下らんことを言うな。
0860デフォルトの名無しさん
NGNGそれぞれ続くなら)別のスレでやった方がいいんじゃない?
0861デフォルトの名無しさん
NGNG「なんでguileは広まらねえのか?を話し合うスレ」
立てていいって事?
0862デフォルトの名無しさん
NGNG引用符付けただけでコードがリスト構造になるじゃん?
これってすごくない?
0863デフォルトの名無しさん
NGNG最近C言語使ってるんだけど、
""で囲っただけでコードが文字列になるじゃん?
これってすごくない?
0864デフォルトの名無しさん
NGNGで、文字列をどう使えと?
0865デフォルトの名無しさん
NGNGもっと震えるほど感動してもいいんだよ。
0866デフォルトの名無しさん
NGNGでも構文なめるときは解析が必要だろ。ifだったら
(define expr '(if test-part true-part false-part))
(cadr expr) => test-part
(caddr expr) => true-part
(cadddr expr) => false-part
0867デフォルトの名無しさん
NGNG文字列->トークンにするだけで一仕事って事でしょ。
しかもCじゃトークンを保持する汎用的な型なんて無いし。
0868デフォルトの名無しさん
NGNGmemchrみたいなオフセット操作なんか。
0869デフォルトの名無しさん
NGNGSchemeのライブラリは少ないけど、Common Lispなら文字列処理もかなり強力だよ。
文字列、リスト、ベクタをまとめたもの(列)に対して使える関数も多数。
;;; strの先頭からaという文字まで(なければ末尾まで)をコピーして返す。
(subseq str 0 (position #\a str))
;;; str中の.をすべて/に置き換える。
(substitule #\/ #\. str)
;;; strが(英字だけ見て、大文字小文字無視して)回文になっているか
;;; どうか判定する。(ちょっと無駄だが。)
(let ((s (remove-if-not #'alpha-char-p str)))
(string-equal s (reverse s)))
;;; str中にA-Zまでの英字(大小無視)を全て含んでいるかどうか判定する。
;;; (かなり無駄があるが。)
(= 26 (length (remove-duplicates
(remove-if-not #'alpha-char-p str)
:test #'char-equal)))
0870デフォルトの名無しさん
NGNGそうそう。それで、その時に全ての文が(関数 引数...)の形で
統一されてることが役に立つんだよ。
Lispのいいところは、'一つでリストになることではなく、
その上で文の形式が統一されてることにあるんだよ。
0871デフォルトの名無しさん
NGNGLisp入門ってこれやっとけばOK?
0872.
NGNGそれより最近出版されたMac寄りの分厚い本お勧め。
0873デフォルトの名無しさん
NGNG例えば命題Pに対して否定命題をP'とするとP∨P'だと#t
P∧P'だと#fみたいに評価するのってSCHEMEでは
どう書くの?
0874デフォルトの名無しさん
NGNGpの値が分かっているとき、そこからもっと複雑な条件を判定したい
という意味なら
(and p (not p))
とか
(or p (not p))
とか書けば良い。
上が恒偽(恒真)であることを証明するという意味なら、証明系を
書かねばならない。
0875デフォルトの名無しさん
NGNG(lambda (sequent var)
(eval
`(let ((fun (lambda (,var) ,sequent)))
(and (fun #t) (fun #f)))
(null-environment 5))))
(tautology? '(or p (not p)) 'p) => #t
0876デフォルトの名無しさん
NGNGしかも時代暮れ
その点留byさいこー!!!
rうbyいgへ胃の援護はいって吉!
0877デフォルトの名無しさん
NGNGschemeはstring-〜直接使うよりも
Cのポインタ操作のエミュレートでもした方が使い勝手いいと思うんだけど
(define p (make-ptr "abcdef"))
(* (++ p)) ;genericが無ければ ((p '++) '*)
==> #\b
(* p #\a) ;(p '* #\a)
==>#\a
(ref p 1 #\x) ;(p 'ref 1 #\x) ;p[1] = 'x';に相当
==>#\x
(write p) ;(p 'write)
"aaxdef"
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGの訳本買ったのですが、問題の答えありますか?
ネット上を探したのですがみつかりません。
0880デフォルトの名無しさん
NGNGそれぐらいご自分で解きなはれ
0881デフォルトの名無しさん
NGNGみんなが添削してくれるでしょう。
0882デフォルトの名無しさん
NGNGどうして、指導マニュアル本も翻訳しないんだろ。
0883デフォルトの名無しさん
NGNGInstructor's Manualの方は公開されてませんよね。
買うしかないか?
0884デフォルトの名無しさん
NGNG日本語ならわかるかと思って買ったけど,
日本語も難しかった.
言語の問題じゃなかったんだな.
0885デフォルトの名無しさん
NGNGあるサンプルで
(funcall '+ 1 2 3)
というのがあって、これを
(funcall #'+ 1 2 3)
としても、動きました。「関数を引数で渡すとき#'をつける」と
何かで読んだことがあるのでやってみたのですが、この二つの違いはなんですか?
0886885
NGNG0887デフォルトの名無しさん
NGNGInstructor's Manualは学校の先生だという証明がないと買えないよ.
0888デフォルトの名無しさん
NGNGCommonLisp ではどうか知らないけど,
Emacs lisp の manual では無名関数を
(function) で quote することによって
byte compile 時に関数としてコンパイルする
という説明があった.
#' というのは function の省略形ね.
0889デフォルトの名無しさん
NGNGということは、独学でSICP読んでも、答え合わせの手段がない?
とりあえず、問題無視して本文だけ読んじゃおうっと。
0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG(let loop ((start 0)(pos (strchr s c))(r '()))
(if pos
(loop (+ pos 1) (strchr s c (+ pos 1)) (cons (substring s start (+ pos 1)) r))
(if (< start (string-length s))
(reverse! (cons (substring s start) r))
(reverse! r)
)
)))
0893デフォルトの名無しさん
NGNGどこかにありました。
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/
わたしもここに貼っておきます。
0894デフォルトの名無しさん
NGNGありがとう
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNGgcの配列探索でのネストが深くなりすぎてスタックオーバーフロー
でこけてしまうんですが、うまく探索する方法ないですか?
↓こういうvectorのデータ構造
#(#(#(#(#(#(#(#(#(#(#(#(#(#(.....)
0897デフォルトの名無しさん
NGNG何が原因なのかよくわからんが、
再帰を使っててスタックオーバーフローしてるのなら
gcを再帰を使わずに書きましょう。
0898デフォルトの名無しさん
NGNGDQIIIクリアしたんで次は「計算機プログラムの構造と解釈」だ。
というわけで掲載サンプルを全て実行可能なWin2k/XP用の処理系ってありますか?
なるべくGUIな環境がくっついてないやつがいいです。
0899899
NGNG0900899+1
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0901デフォルトの名無しさん
NGNGやらせは遺憾よやらせは
プロなら899のレスが付くまでじっと待つのだ
0902デフォルトの名無しさん
NGNGそんなことも自力で調べられない奴がSICPを読破できるわけがない。
0903デフォルトの名無しさん
NGNG現在メンテされてる処理系なら多分どれ使っても大丈夫だよ。
0904デフォルトの名無しさん
NGNGあれはK&Rと同じで最後に読んだほうがいい。
0905デフォルトの名無しさん
NGNG最後ってなんの最後だ?
人生の最後か?
0906デフォルトの名無しさん
NGNGいちいち説明しないとわからんのか。
さては貴様、コーダーだな?
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGアマゾンの評価じゃなくて自分の感想を書いてくれよ。
0909903
NGNGそうですね。
0910デフォルトの名無しさん
NGNGK&Rは言語の解説だが、SICPは違う。
Schemeは単に採用されているだけで、Schemeの解説本じゃない。
コンピュータ科学の本だからな。
0912903
NGNG0913デフォルトの名無しさん
NGNGでもさ、scheme採用しなかったらあの本書けるのかな?
0914SICP Isn't Computer Program
NGNG↓
厨房もどんどん読み始める。
↓
手に負えない人が不満を垂れる。
↓
理解できない腹イセにamazonで悪くいう。
↓
(゚д゚)マズー
↓
厨房は読まなくなる。
↓
正当な評価に戻る。
↓
(゚д゚)ウマー
0915デフォルトの名無しさん
NGNGん、例えばあのほんの内容をRubyですげ替え可能か、とか?
0916デフォルトの名無しさん
NGNG例えばJava。同じ内容を扱うと最低でも三倍の厚み。
0917デフォルトの名無しさん
NGNG0918デフォルトの名無しさん
NGNGないんだよ。適材適所なのよ。
Ruby荒しクン達はその辺判ってないね。
0919デフォルトの名無しさん
NGNGtar玉にしてうpしてくんない?
0920デフォルトの名無しさん
NGNGはっきりいって非常に評価低いよ。
0921デフォルトの名無しさん
NGNGら、ある程度の素養のある人が読んだらつまらないですよ、SICP。もちろ
ん入門レベルの教科書としては最高だと思いますけどね。重点は、コンピュ
ータを使って問題をいかに定義して解くか、にかかっているわけだし。そう
いう意味では、あれが計算機科学、というのはかなり変。なぜ日本だとこれ
ほどまでに持ち上げられるのかわからない。
Amazonのレビューに関して言えば、大学でSICPを使った講義を取って、
ゴリゴリ宿題を解かされた挙げ句Cを食らったような人達が悪く書いている
のでは?(ちょっと邪推すぎるか) 五つ星を付けている人も結構いるし。
0922デフォルトの名無しさん
NGNG> ある程度の素養のある人が読んだらつまらないですよ、SICP。
そうか、高林さんとかはある程度の素養がないんだ。納得。
http://namazu.org/~satoru/
http://namazu.org/~satoru/programming/sicp.html
> 重点は、コンピュータを使って問題をいかに定義して解くか、にかかっているわけだし。
三章以降はまだ読んでないとかじゃないよね?
0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG半期の講義で、演習問題ぜんぶ解け、とか言われてたら嫌いになってたかも。
0925名無しさん@ソウダソツケンヤロウ
NGNG(1000 円)
ってリストがあったとして、この1000の数字を半角数字に直す方法ってありますか?
xyzzyスレにあったの1桁だったから…
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNGそれぐらい探せよ・・・
0928デフォルトの名無しさん
NGNG0929BASICER
NGNG人工知能研究関係者を歓迎します。
>>926
Franz LispをまんまとCompileしたとか?
0930デフォルトの名無しさん
NGNGまず、それってシンボルなの? 文字列ではなく?
第二に、そういう処理をする出来合いの関数が欲しいって話?
それとも、そういう処理をする関数の書き方がわからないって話?
0931925
NGNG説明不足スマソ
データは文字列でもシンボルでもどっちでもいい
あと既存の関数があればそれを使用したいけど残念ながら見つけられなかったので
あれば教えて欲しい
無ければそれを処理できる関数作るヒントくださいw
0933デフォルトの名無しさん
NGNG0934925
NGNG情報サンクス
また説明不足(汗
使ってるのはGCLです
EmacsもろくにしらないLINUX初心者なもんでw
#というかxyzzyだと引継ぎのプログラムが動かないのでLINUXを導入した
最初はLINUXのEUCとWINDOWSのS-JISの所為かと思ったのだがそれだけではなかったらしい
引継ぎのプログラムのため大部分がブラックボックスw
あと3ヶ月か(;´Д`)
チョト試してみます
0935デフォルトの名無しさん
NGNG見た目だけ?
作るのは楽そうだけど、他人のソースをスラスラ読める人いる?
0936925
NGNG(defun number_change (x)
(cond
((eql x '0) (setf x '0))
((eql x '1) (setf x '1))
((eql x '2) (setf x '2))
((eql x '3) (setf x '3))
((eql x '4) (setf x '4))
((eql x '5) (setf x '5))
((eql x '6) (setf x '6))
((eql x '7) (setf x '7))
((eql x '8) (setf x '8))
((eql x '9) (setf x '9))
)
)
まぁこの程度の知識しかないです(;´Д`)
0937デフォルトの名無しさん
NGNGなんか頭悪い気がするんだけど、気のせいでしょうか。
0938デフォルトの名無しさん
NGNG(define (number_change x)
(cdr(assq x '((0 . 0)(1 . 1)
(2 . 2)(3 . 3)
(4 . 4)(5 . 5)
(6 . 6)(7 . 7)
(8 . 8)(9 . 9)))))
0939デフォルトの名無しさん
NGNG手段にすげ替えてくれるとうれしいんだけど。
0940デフォルトの名無しさん
NGNG(defun 線路は続くよどこまでも ()
(線路は続くよどこまでも))
0942デフォルトの名無しさん
NGNGlispはシンボルを使って何かするのは得意だけど、
そのシンボルを分解したりするって処理は向いてないんじゃないかな。
lispでやる利点なさそうだし。
その辺のトークンの問題はreaderの時点で解決してるべき。
0943デフォルトの名無しさん
NGNGGCL でどーかはわからんが。
(defun hoge (str)
(map 'string
#'(lambda (c)
(if (char<= #\0 c #\9)
(code-char
(+ (char-code #\0)
(- (char-code c)
(char-code #\0))))
c))
str))
(hoge "12345あいう")
"12345あいう"
0945おやつは
NGNG0946デフォルトの名無しさん
NGNG思ったんだけど, lisp ってビジネス用途に
多人数で共同開発する場合はどうなんでしょうか.
自分で作る分には楽しいんだけど,
保守とかデバッグはどうなんだろう.
>>935 とも関係ある話だけど.
0947945
NGNGいまや大企業でも多人数は珍しいですよ。せいぜい10人じゃないですか?
3,4名の開発がほとんどでは?
AgileAllianceにみられるように、変化につよい、小回りの利く
開発手法はお客さんも求めてるなぁと日々実感してますよ。
Perl,SmallTalk,Python,Ruby,Lisp,Java,C++,Cを
適所適材っつーかんじで
組織やチームの文化も考えて使い分けるのがいいのじゃないの
でしょうか。
前置きながくなったけど、ペアプログラミング可能な言語だと思うので
メンタリングといゆか教えるのが好きで皆から信頼されてる
プログラマがチームに1人いるならLispはOKでしょう。
保守、デバッグについては、Unitテストを活用すべし。でしょう。
0948デフォルトの名無しさん
NGNG別解
(defun hoge (str)
(map 'string
#'(lambda (c)
(let ((pos (position c "0123456789")))
(if pos (char "0123456789" pos) c))
str))
(しかし、EUCの2バイト文字を1文字と扱えるのか?ダメだと思うが…)
0949デフォルトの名無しさん
NGNGつーか、シンボルは分解するようなものじゃないだろ?
0950926
NGNGわざわざcygwin版探してるのは挙動が素直そうだからです
SCMはDOSアプリだしMIT版は謎の独自コンソールだし
他のは不安定なGUI版だしで処理系探しに疲れました...
0951デフォルトの名無しさん
NGNGGuileは?
あと、SCMをcygwinでコンパイルするとか。
0952925
NGNGxyzzyだと動作確認できたけどGCLだと無理みたいです
エラー内容
>Error: "0" is an illegal character name.
>Fast links are on: do (si::use-fast-links nil) for debugging
>Error signalled by LOAD.
>Broken at LOAD. Type :H for Help.
やっぱ2バイト文字は認識されないのか
0953950
NGNG# それにしてもこんなドメイン使っていいのか?
入力用のプロンプト"> "を標準出力に吐くのが気になりますが
Windowsのアプリとしては一番挙動がまともっぽいです。
0954デフォルトの名無しさん
NGNG0955950
NGNGCygwin(というかbash)から16ビットDOSアプリの起動・実行は問題なく出来ます。
ただ、一般的に16bitの処理系にはいろいろ制約があることが多いのでなんとなく避けたかったんです。
0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNGこんなのはどうですか?
(defun agi (str)
(labels ((agi% (new-old-alist list)
(if (endp new-old-alist) list
(let* ((new (caar new-old-alist))
(old (cdar new-old-alist))
(pos (search (map 'list #'identity old) list)))
(if pos
(agi% new-old-alist
(concatenate 'list
(subseq list 0 pos)
new
(subseq list (+ pos (length old)))))
(agi% (cdr new-old-alist) list))))))
(map 'string #'identity
(agi% '(("1" . "1")
("2" . "2")
("3" . "3")
("4" . "4")
("5" . "5")
("6" . "6")
("7" . "7")
("8" . "8")
("9" . "9")
("0" . "0"))
(map 'list #'identity str)))))
(setq yen "1231234567890円")
(agi yen)
0958デフォルトの名無しさん
NGNGこれって難しいよね?
Schemeのことについてあらかじめ知ってないと、あの説明では
理解出来ないと思う。
でも、Schemeを知ってる人が知識を確認したり、知識を磨くの
には素晴らしいのは確かだと思う。
C++におけるプログラミング言語C++と同じような立場の本だね。
0959925
NGNGいまGCLで動作確認しました。本当にありがとうございますm(__)m
ところで、ここにいるLISP使ってる人達ってLISP歴どのくらいなんだろう(汗
私は半年ですけど・・・
0960デフォルトの名無しさん
NGNGあの本は Lisp 系 の基本を知らないと難しいが,
知っている人なら当り前のことで簡単過ぎるような気がする.
基本的な概念への入門的な説明が少ないような気がする.
continuation の概念なんか, 本文の説明よりも付録の R5 を
読んだ方がわかりやすかった. 一度理解してから本文を読むと
なにを言っているのかわかるんだけど.
という訳で, 個人的には中途半端な本のような気がする.
ただリファレンスとしては便利だと思う.
0961デフォルトの名無しさん
NGNGコードの解説はあまりしてないから読むのに苦労する。
作者のオナニーにしか見えん。
0962デフォルトの名無しさん
NGNGよくある「プログラミング言語○○」の一種。
SchemeはこれとSICPと入門本でとりあえずOK。
0963デフォルトの名無しさん
NGNGLispの概念は「初めての人のためのLISP」(竹内郁雄=著)が奥深いと思います。
いずれも絶版なのが残念です。
0964名無しさん@Emacs
NGNG初めての人のためのLISPはいいですね。
対話形式で話が進むので最初しまったと思いましたが。
0965デフォルトの名無しさん
NGNG原著でも、むずかしい英語じゃないし
(っていうか、それ以前に文章量が少ないし)
原著で読めばいいんじゃないですか?
ちなみに僕はLittle Schemerを読んで
Scheme好きになりました。
0966このスレの1
NGNG0967デフォルトの名無しさん
NGNGじゃあ、立てます。
0968ななしさん
NGNGアメリカのComputer Scienceの人にも評価は高いよ。
streamの導入のあたりはなんど読んでもぞくぞくする。
でも今は教育用の言語としてはJava一人勝ちだからね。
0969967
NGNG立てました。
0970このスレの1
NGNG0971BASICER
NGNG09721000
NGNG\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
0973埋め立て屋
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1008220265/1-4
0974倉庫に逝く前に
NGNG今まで、C/C++, perl, java, elisp とかじってきたけどこれから scheme 信
者になります。scheme カコ(・∀・)イイ!! 立派な schemer になれますように。
0975cmlisp
NGNGcmlisp は、CM-2 で実装されました。しかし、data paralle な計算の
Nest が高速に扱えず速度が出ないため、Thinking Machines から商品と
して売られることはありませんでした。その後、CMU の Guy Blelloch
によってこの問題の解決手法が提案され NESL という言語があります。
NESL はフリーで手に入ります。MPI にも対応しているようなので
PC Cluster で NESL を動かせるかもしれません。
0976無名λ式
NGNG> cmlisp は、CM-2 で実装されました。
それは、*Lispじゃない?
Connection Machine Lispは、SIMDじゃ実装しにくいからね。
αapplyとかね。
0977デフォルトの名無しさん
NGNGLISP Scheme Part4
http://pc.2ch.net/test/read.cgi/tech/1016211619/l50
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。