トップページtech
1001コメント388KB

Common Lisp, Scheme Part 14

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/11/18(金) 10:02:06
過去スレ
Part1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: http://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: http://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part11: http://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part12: http://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part13: http://pc8.2ch.net/test/read.cgi/tech/1115901841/
06556402006/04/13(木) 17:46:59
>>648,653
ありがとうございます。
環境のスナップショットは継続には含んじゃいけないんですね。

> どのローカル変数が書き換えられるか静的にわかるから、Cへの
> トランスレータでSCM/Guile方式の継続を使っている処理系なら
> 変更を受けるローカル変数だけ特別扱いしてるよ。適当な処理系の
> 出すコードを読んでみ。

例えばどの処理系がこれにあたるのでしょうか?
0656デフォルトの名無しさん2006/04/13(木) 19:20:15
Scheme->C という処理系の出すCコードがわりとわかりやすかったが、
まだ手に入るだろうか。R3RSかR4RSの時代のものだったが。
0657デフォルトの名無しさん2006/04/13(木) 20:46:10
これのこと?
http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/scheme/impl/scheme2c/0.html
0658デフォルトの名無しさん2006/04/13(木) 21:37:41
フレーム構造の性能を計りたい時に有効なベンチマークって
fib, tarai, ack 以外になにがありますか?
0659デフォルトの名無しさん2006/04/13(木) 21:42:20
>>658
フレーム構造の性能を計りたい時という意図がいまいちわからんけど、
とりあえず Gabriel の本に載ってるベンチマークは全部やってみたら?
0660デフォルトの名無しさん2006/04/13(木) 21:59:01
>>659
>フレーム構造の性能を計りたい時という意図がいまいちわからんけど、
継続や引数を積んでジャンプしたり、末尾呼び出しをしたりといった
基本的な性能を計りたいです。

>とりあえず Gabriel の本に載ってるベンチマークは全部やってみたら?
そんなものがあるとは知りませんでした。
"Performance and Evaluation of Lisp Systems" というやつでしょうか。
ネットでは読めないんでしょうか。図書館で探してみます。
0661デフォルトの名無しさん2006/04/13(木) 22:03:25
Lispシステムの評価・活用法
http://www.amazon.co.jp/exec/obidos/ASIN/4526024937
Performance and Evaluation of LISP Systems
http://www.amazon.co.jp/exec/obidos/ASIN/0262571935

だね。ちょっと古いけど Lisp ベンチマークの業界標準だ。
0662デフォルトの名無しさん2006/04/13(木) 23:00:49
>>654
http://www.roy.hi-ho.ne.jp/pastel/home/Lisp/index.html
これだな。
0663デフォルトの名無しさん2006/04/14(金) 10:43:00
>>662
そこでした。ありがとう!
0664デフォルトの名無しさん2006/04/14(金) 22:30:07
http://clozure.com/pipermail/openmcl-devel/2006-April/003265.html

OpenMCL for x86-64/Linux のテスター募集してるみたい。
リリースまではまだしばらく時間が掛かる感じだけど。
0665デフォルトの名無しさん2006/04/15(土) 02:40:53
Gauche 0.8.7リリースあげ
0666デフォルトの名無しさん2006/04/15(土) 06:49:17
>>665
shiroたん乙
0667デフォルトの名無しさん2006/04/15(土) 10:26:55
Gauche-0.8.7をCygwinでmakeすると、docディレクトリでmakeinfoの段階でこける。
--enable-encodingを付けるとよいみたい。
0668デフォルトの名無しさん2006/04/15(土) 22:55:30
SICP再発見
http://d.hatena.ne.jp/higepon/19700103/1145105233
0669デフォルトの名無しさん2006/04/16(日) 05:56:11
>>660
遅レスですが。
http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/bench/gabriel/0.html
0670デフォルトの名無しさん2006/04/16(日) 10:21:57
>>669
ありがとうございます。

自作のSchemeはまだ pair型を作ってない状態でして、
納得できるまで速くなってから先に進もうと思ってます。
gabriel benchmarkだとtakぐらいしか使えないみたいでした。

ちなみに左から (fib 33) (tak 18 12 6) (ack 3 9) (loop 2000000) (loop2 2000000)で
5.79s 5.28s 5.25s 0.65s 1.11s original
4.45s 5.36s 6.50s 0.51s 2.68s scm
5.38s 5.37s 6.51s 0.63s 1.20s mzscheme
2.67s 2.91s 4.86s 0.32s 0.91s gosh
2.45s 3.19s 2.66s 0.32s 4.66s petite
という感じです。CPSみたいに closure作りまくるベンチの性能はかなりいいんですが
continuationを実装すると変わる可能性もあるのでなんとも言えないです。
0671デフォルトの名無しさん2006/04/16(日) 18:25:44
LISP勢は
4.42s 0.05s xxxxx 0.49s 2.44s OpenLisp
0.63s 0.02s 0.54s 0.06s 0.10s SBCL
です。OpenLisp は(ack 3 9)だと stack over flowで (ack 3 8)だと
1.09sでかなり速いです。
特に takとackの速さが圧倒的なのが気になります。
LISP勢の方が速いのは継続がないからできる最適化ですかね。
あと、TISLは今は手に入らないんでしょうか。
0672デフォルトの名無しさん2006/04/16(日) 18:28:12
>"A program may use a top-level definition to bind any variable.
>It may subsequently alter any such binding by an assignment (see see section 4.1.6 Assignments).
>These operations do not modify the behavior of Scheme's built-in procedures.
>Altering any top-level binding that has not been introduced by a definition has an unspecified
>effect on the behavior of the built-in procedures."

(define + (lambda (n) n))
は未定義としても

(define a +)
(define a (lambda (n) n))
これも未定義なんでしょうか?
0673デフォルトの名無しさん2006/04/16(日) 19:25:50
後者のどこが引用のunspecified回りに該当するのだろうか。
0674デフォルトの名無しさん2006/04/17(月) 00:08:10
>>671
| LISP勢の方が速いのは継続がないからできる最適化ですかね。
Scheme の言語仕様はまだコンパイラの事考えてないからねぇ
R7RS あたりを待て。
0675デフォルトの名無しさん2006/04/17(月) 00:30:32
>>674
>Scheme の言語仕様はまだコンパイラの事考えてないからねぇ
そうなんですか。コンパイラで思い出したんですが Shiroさんのとこに書いてある
>同じソースファイルを、インタプリトした場合とコンパイルした場合に、
>全く同じ動作を保証するのは見かけほど自明な話ではない。
っていうのにとても興味があるんですが意味よくが分かりません。
一式づつコンパイルすればいいってことじゃないんですかね。
(load)があると駄目とか?(loadの意味を今いち理解してないんですが)
なんか論理学チックな匂いがする気もします。
0676デフォルトの名無しさん2006/04/17(月) 00:44:11
loadとかevalとかcompile-file(もしあれば)の挙動とか考えるといろいろある。
Common Lispのeval-whenに相当するものが必要になるケースもあり得る。
0677デフォルトの名無しさん2006/04/17(月) 01:06:12
>>676
なるほど。define-syntaxってトップレベルでしか使えないのにload やevalで使えちゃう
って変じゃないですか?

Schemeのややこしさってほとんどトップレベルに起因すると思うんですよ。
トップレベルは開発環境のためにあるようなものだと思うので、コンパイル時には邪魔なだけっていう。
let, letrec, let-syntax, letrec-syntaxあたりだけで書けばずいぶんすっきり
すると思うんですけどね。
0678デフォルトの名無しさん2006/04/17(月) 04:07:22
>>674
ええっ?
むしろ1980年代には、実装の関心はコンパイラになかったっけ。
RabbitとかTとか。PC上でもTIが出してたやつとか。
インタプリタがこんだけ広く使われるようになったのが
最近のような気がする。
仕様としてCLほど厳密にコンパイル時の動作を決めていないってのは
あるけれど、それはThe Right Thingを決めるにはまだ経験が足りないって
ことであって、コンパイラのことを考えてないってんじゃないと思うなあ。
evalがR5RSまで入らなかったのも、モジュールシステムが未だに無いのも、
コンパイラのことを考えて (考え過ぎて?) いるからでしょ。
0679デフォルトの名無しさん2006/04/17(月) 11:19:31
Schemeの本はここ6年間、出版されてませんが何か。
0680デフォルトの名無しさん2006/04/17(月) 13:00:18
The Reasoned Schemerの出版は去年ですが何か。
0681デフォルトの名無しさん2006/04/17(月) 13:26:46
考えすぎた末にいろんな宗派が出来てしまって今更まとまらない。
0682デフォルトの名無しさん2006/04/17(月) 13:57:47
Scheme界でそれを言ったらおしめえよ。
0683デフォルトの名無しさん2006/04/17(月) 17:06:51
>>676
今日図書館で論文を読んでいたらその話が書いてありました。
"Weak Consを用いたマクロ再定義時の自動再コンパイル"
というやつです。
マクロや関数の依存関係をグラフで持っておいて、マクロが
定義されると依存関係にあるマクロ、関数を再定義、再コンパイル
するというものです。これによってコンパイラでも最新のマクロ
定義が使えます。
思ったんですが変数にも同じことができるんじゃないでしょうか。
定数を埋めこんだり、手続きをインライン展開できたりします。
再コンパイルが起きまくるようなコードを書くことも可能なので
再コンパイルはlazyの方がいいかもしれません。
SBCLで disassembleしてみたところ、そのような最適化はされて
いないようでした。
0684デフォルトの名無しさん2006/04/17(月) 17:09:22
>>683
disassembleじゃあるかどうかわからないと思うけど。
そういうグラフがあったとしても、関数のコードの外部に持つから。
0685デフォルトの名無しさん2006/04/17(月) 17:19:09
>>684
えっと
(setq a 3)
(defun f (n) (+ n a))
(disassemble 'f)


(defun g (n) (+ n 1))
(defun h (n) (+ 2 (g n)))
(disassemble 'h)
とかしてもaが埋めこまれたり、gがインライン展開されたり
していなかったからです。
0686デフォルトの名無しさん2006/04/17(月) 17:27:55
それどころか
(defmacro test (x) `(+ ,x 1))
(defun f (n) (+ 2 (test n)))
(disassemble 'f)
(defmacro test (x) `(+ ,x 10))
(disassemble 'f)
でも fは変わっていませんでした。
上の論文では変わらなきゃいけないと書いてあったと思うんですが、
Common Lisp的にこれはOKなんですかね?
0687デフォルトの名無しさん2006/04/17(月) 22:43:57
Scheme 仲間では Bigloo がかなり高速です。ネイティブコードにコンパイルした場合、SBCL のような高速 CL に匹敵する場合もあります。
ちょっと古いけど、ベンチ。
http://www.cs.bath.ac.uk/~jap/ak1/youtoo/Bench/

とくに Bigloo の場合、コンパイラ用にコードに型情報を付加できたり、floating point 専用の関数 fl+, fl-, fl< ... のようなものが付いてきたり、かなりアグレッシブな処理系です。
もちろん互換性だとか Scheme のシンプルな美しさは失われますけど。また、今どきの Scheme にしてはややライブラリが少ないです。

ちょっと使った印象としては、Scheme で数値処理などを中心に行いたければチェックしてみてみる価値はあります。
私の場合、そこまでするくらいなら Scheme 使わなくていいやと思って、SBCL を採用しましたが。
0688デフォルトの名無しさん2006/04/18(火) 02:29:06
>>686
OK なんじゃない?新しい定義使いたきゃコンパイルしなおせばいいだけでしょ?
0689デフォルトの名無しさん2006/04/18(火) 03:05:29
スレ違い覚悟で訊くけど、CPS(継続渡しスタイル)って、
実用的なプログラムで使っても、プロセスのスタック足りる?
とくにLisp/schemeじゃなくて普通の言語で書いた場合とか。
0690レス分割スマソ2006/04/18(火) 03:07:46
例えば、数千ノードのグラフ処理とか、かなり無理っぽい気がするんだけど…
0691デフォルトの名無しさん2006/04/18(火) 03:33:12
>>689
足りるわけないだろ。
普通はスタックの GC を行う。
0692デフォルトの名無しさん2006/04/18(火) 09:32:09
おお、なるほどスタックのGCか。
…って、CPSでスタックにゴミなんて発生するの?普通に全部戻ると思うんだけど。
関数末尾での呼び出しは、ゴミ以前にそもそも最初からスタックに積む必要はなさそうだし。
0693デフォルトの名無しさん2006/04/18(火) 13:10:53
中でクロージャ使ってたらエクステントは長くなるでしょ。
環境をヒープにとるならともかく。
0694デフォルトの名無しさん2006/04/18(火) 17:58:10
>>688
OpenLispはコンパイルしなおさなくても新しいマクロが反映して
clispはコンパイルしなおせば反映するんですが SBCLはコンパイルしても古いままです。

>>689
CPSだとスタックの消費がクロージャセル+環境の消費になります。
環境全体を保存すると 環境の消費 >= スタックの消費 なのでメモリ消費は減らないと思います。
クロージャから参照されている変数だけ環境に保存すれば減ると思います。
schemeなら末尾呼び出しでいいですけど末尾呼び出しが最適化されていない言語では
他の方法を考えないといけません。

>>691 >>693
意味わからん。

関数の再コンパイルもコンパイルにかかる時間とそれで得する時間を考えると
自動化は難しいのかもしれないです。
compile! expr levelで(compile! f 3)みたいに手動ですればいいのかも。
0695デフォルトの名無しさん2006/04/18(火) 18:30:21
SBCL でもコンパイルしなおせば新しいマクロが反映されるけど?
0696デフォルトの名無しさん2006/04/18(火) 18:48:44
>>695
コンパイルしなおすっていうのはもう一回 defunの式を書くってことですね。
(compile 'f)としていたので古いマクロが使われてました。
clispはデフォルトで(compiled-function-p #'f)がNILなので新しいマクロが
使われているだけでした。

しかしこれでは evalや loadでマクロが定義された時の動作が処理系依存に
なるような。CommonLispのことは全然知らないので外してるかもしれませんが。
Schemeでもいろいろ調べてみます。
0697デフォルトの名無しさん2006/04/18(火) 22:55:00
>>696
> clispはデフォルトで(compiled-function-p #'f)がNILなので新しいマクロが
> 使われているだけでした。

そりゃコンパイルしてないってことじゃ?
それと sbcl って repl 上でも on the fly でコンパイルするんじゃなかったっけ。
ええと、何はともあれその辺の微妙な挙動を詰めたいなら、
仕様書をちゃんと当たっといた方がいいかと。
http://www.lispworks.com/documentation/HyperSpec/Body/03_b.htm
0698デフォルトの名無しさん2006/04/19(水) 21:46:32
gaucheのライブラリをCで書くときのお作法のドキュメント、どこかにありますか?
0699デフォルトの名無しさん2006/04/19(水) 23:22:23
Gauche-mqueueってのを実装するサンプルがアーカイブに入ってた希ガス。
ドキュメントもちゃんとShiroさんが書いたの入ってたと思うけど。
スタブジェネレータとか既存のスタブで勉強しないで手取り足取り親切に
教えてくれるようなのを期待してるとしたら多分ない。

この辺のAPI見直す予定ってアナウンスされてるからそれまで待てば?
0700デフォルトの名無しさん2006/04/19(水) 23:50:19
>>699
あ、ほんとだ。READMEにも説明書いてありますね。
ネット上だけ探してた…
0701デフォルトの名無しさん2006/04/20(木) 12:58:43
>>687
> Scheme にしてはややライブラリが少ないです。
bigloo-lib http://bigloo-lib.sourceforge.net/(ダンロードhttp://sourceforge.net/project/showfiles.php?group_id=3455)
もあります。

内部にHaskellのような型システムを持っているのでbiglooとCの型から新しい型を定義することも可能ですが、ドキュメント化されてません。bigloo-libの人達が「ドキュメント化してくれ〜」と言っても「未完成だからドキュメント化しない」と答えて6年以上になるでしょうか。

bigloo-libのSRFIですら取り込まれる気配が無いし、*bigloo-version*のような基本的なシンボルをChangeLogに書かずに消してしまってbigloo-libがコンパイルできなくなったりとか、孤高の天才の高性能コンパイラ、という印象です。
0702デフォルトの名無しさん2006/04/20(木) 13:23:17
>>687
>Scheme で数値処理などを中心に行いたければチェックしてみてみる価値はあります
biglooでデータ構造の最適化をしようとするとCの型が増えていきますが、書いているうちに制限の多いCでコーディングしているような錯覚に陥って、なんでこんなことしてるんだろうと思ったこともあります。

>Scheme のシンプルな美しさは失われますけど。
A practical Scheme compilerとあるように、美しさではなくて簡単にCと共存できる実用性を目指している処理系だと思います。Xlib.hを読み込んでbiglooのインクルードファイルが平気で生成されたときにはびっくりしました。

何かまともなことをやろうとすると独特のコーディングが要求されるので、それに慣れるまでけっこう大変だと思います。私がいじってた頃はインタプリタのreplが末尾再帰でなかったので途中でやめてしまいましたが。
アグレッシブと言うよりアレゲかもしれません。名前はstalinに負けてますが。

ただし出来上がってしまえば、やたらにパフォーマンスのいいものが出来ると思いますよ



0703デフォルトの名無しさん2006/04/20(木) 15:14:02
>>701
補足しておくとbiglooの型システムはbigloo上のオジェクトシステムとは別物です。
bigloo本体を書換えずにプリミティブを作成したり、既存型を拡張したりできます。
type、subtype、coerceなどのキーワードが出てきます。

bigloo-libのcgenがbiglooへのプリプロセッサとして型に対する細々とした操作を
代りにやってくれます。

ChangeLogのバグフィックスが気にならなければ、少し古いbiglooでbigloo-libの
コンパイルは可能だと思います。

biglooがbigloo-libとの連携さえしっかりしてくれれば、またbiglooやりたいと
思ってます。bigloo-libのコンパイルで失敗する度にbigloo-libの人達の気持を勝手に
想像して、暗い気分になるのが嫌なだけかもしれません。それも思い込みで。

期待しすぎてコケたので否定的なことを書きましたが、biglooにはいじれる所がたくさん
あるので、最初はschemeだとは思わずに遊んでみると幸せになれるんでないでしょうか。
0704デフォルトの名無しさん2006/04/20(木) 22:16:30
すれ違いで悪いけど
bigloo って INRIA でしょう?
良く知らないけど INRIA の本命は OCaml じゃないのかなあ。
0705デフォルトの名無しさん2006/04/20(木) 22:30:39
>>704
INRIAだって大組織だからいろんな先生が居るだろうし、統一した意思を
持っているとはとても思えない。
0706デフォルトの名無しさん2006/04/21(金) 00:01:26
Eiffel やってる人も居るね。

http://smarteiffel.loria.fr/

これも C or Java に変換する系
0707デフォルトの名無しさん2006/04/21(金) 03:13:42
>>689
末尾再帰の最適化がきちんとされる言語ならば。
例えばluaはそう。
0708デフォルトの名無しさん2006/04/21(金) 09:20:35
>>707
lua sugeeeeeeee!!!!
0709デフォルトの名無しさん2006/04/22(土) 03:12:34
>>689, >>707
>とくにLisp/schemeじゃなくて普通の言語で書いた場合とか。

普通の言語ってのがよくわからんが、luaは普通の言語なの?
とりあえずメジャーな言語だと、Javaが処理系依存だけど末尾再帰を最適化してた。
たしかIBMのVM、SUNはやってなかったと思う。
0710デフォルトの名無しさん2006/04/22(土) 05:05:25
末尾再帰の最適化は多くの場合はコンパイラの最適化オプション(GCC とか)であって、
言語仕様として要求される事は少ないですね。関数型言語くらい?
0711デフォルトの名無しさん2006/04/22(土) 08:56:26
おまいら、DrSchemeの話しようぜ
0712デフォルトの名無しさん2006/04/22(土) 09:04:59
L#なんてのもあったんですね。.Net用のLispだとか。
http://www.lsharp.org/
0713デフォルトの名無しさん2006/04/22(土) 17:37:01

普通の奴らの上を行け、を読んで
ハッカーはlispを習うもんだと洗脳されたので
GWにschemeを勉強しようと思うのですが
間違っていないですよね?
0714デフォルトの名無しさん2006/04/22(土) 17:48:46
はい。間違っていません。
0715デフォルトの名無しさん2006/04/22(土) 17:52:03
>>713
GW 中に SICP 読破できれば完璧です。
0716デフォルトの名無しさん2006/04/22(土) 18:49:18
>>709
luaはふつ〜の言語だよおw
JavaScrpit似でゲームに組み込まれてる言語の中では一番メジャー
0717デフォルトの名無しさん2006/04/22(土) 19:39:56
>>715
もうちょっとでかい字で印刷してほしかったと思った。

眼鏡新調かのぉ
0718デフォルトの名無しさん2006/04/22(土) 19:45:34
http://www.ccs.neu.edu/home/will/Larceny/

Larceny って地味に更新されてるのね。IA32 向けのアセンブリ出力
出来るようになってたの知らんかった。
0719デフォルトの名無しさん2006/04/22(土) 19:51:38
>>710
関数型言語でも、言語仕様で末尾最適化が明記されてるのは稀だとおもう
HaskellもOCamlも当たり前のように最適化を行うけど、言語仕様には含まれてなかったような・・・
(間違ってたらスマソ)
0720デフォルトの名無しさん2006/04/22(土) 21:31:01
MLは常識、Haskellはする必要がない
0721デフォルトの名無しさん2006/04/23(日) 02:35:51
coerceってなんて発音するの?
0722デフォルトの名無しさん2006/04/23(日) 02:37:41
こえーす
0723デフォルトの名無しさん2006/04/23(日) 03:39:51
http://www.m-w.com/dictionary/coerce で発音が聞ける。
0724デフォルトの名無しさん2006/04/23(日) 09:52:46
おまいらDrSchemeの話をしろ。
強制だ。
0725デフォルトの名無しさん2006/04/23(日) 10:33:35
昨日、MacにGaucheをインストールしようとして、うまくいかなかったので、
Dr.Schemeを代わりにインストールした。
学習目的にはいいかも。他にもおもちゃ的要素があって楽しい。
0726デフォルトの名無しさん2006/04/23(日) 13:53:02
MrED というのを見るたび、勃起不全の知人を思い出して笑ってしまう。
0727デフォルトの名無しさん2006/04/23(日) 14:37:28
>>726
そこは笑うところじゃないだろ。
0728デフォルトの名無しさん2006/04/26(水) 02:34:15
処理系を(特にCで)作るとき、どこからどんな順で作っていきますか?
自分はエラー処理は当初はabort一択、GCもさっぱり忘れて
作り始めて、ある程度形になるまではそのままいっちゃうんですが。

0729デフォルトの名無しさん2006/04/26(水) 05:42:01
GCは、少なくともどういう方針でゆくか (オブジェクトの移動は
ありか/conservativeで行くか明示的にprotectするか/SCMみたいに
固定長ヘッダだけ自前で管理して後はmallocに任せるか、それとも
全て自分で面倒みるか、等) だけは決めとかないときつくない?

0730デフォルトの名無しさん2006/04/26(水) 16:43:45
Schemeで、文字列だけでなく数値やリストを連結してひとつの文字列にしてくれるような関数はありますか。
(concat "foo" 123 '("a" "b" "c"))

"foo123abc"
になるような感じです。
0731デフォルトの名無しさん2006/04/26(水) 17:42:10
>>730
自分で書いてみました。初心者なんであまりうまくないでしょうけど。
(define (string-concat list)
(if (eq? list '())
""
(string-append (car list)
(string-concat (cdr list)))))

(define (to-string val)
(cond ((string? val)
val)
((number? val)
(number->string val))
((boolean? val)
(if val "true" "false"))
((symbol? val)
(symbol->string val))
((eq? '() val)
"")
((list? val)
(string-concat (map to-string val)))))

(to-string '("foo" 123 #f 'symbol (10 20 30))) ;; 結果:"foo123falsequotesymbol10quote2030"

なんか、この程度なら標準関数にありそうな気はするんですけど。
というか、Shemeの入門ページはいくつかありますが、関数リファレンスみたいなのが見つからないです。
どこかによさげなのないですか。
0732デフォルトの名無しさん2006/04/26(水) 17:54:05
>>731
関数リファレンスなんてR5RS(とSRFI)を見ればいいじゃん。
0733デフォルトの名無しさん2006/04/26(水) 19:28:19
>>731
Gaucheのマニュアルが充実してる。
根拠になる規格(SRFI)の番号も付記してるから何かと便利。
Gauche使いでなくても手元にあって損はないと思うよ。
日本語でこれだけそろってる資料は少ないんじゃないかな。
0734デフォルトの名無しさん2006/04/28(金) 10:59:55
話の腰を折って申し訳ないんですけど、質問す。
当方 SCM のインストールを試みているのですが、
build の途中で以下のメッセージが出て scmlit のプロンプトに入ってしまいます。

> ;In file loaded from /home/hoge/work/cvs/scm/Init5e2.scm:782:
> ;ERROR: "/usr/local/lib/slib/require.scm": unbound variable: *features*
> ; in expression: (cons (#@software-type) *features*)
> ; in scope:
> ; (provided? feature-list . #@define)
> ; (expression) procedure provided?
> ; defined by load: "/usr/local/lib/slib/require.scm"
>
> ;STACK TRACE
> 1; (#@define ((provided? (#@lambda (expression) (if (memq express ...
> 2; (#@cond ((#@slib:provided? (#@quote srfi)) (slib:provide (quot ...
> 3; (#@define ((hss (#@has-suffix? #@file (#@scheme-file-suffix))) ...
> 4; (#@load (#@in-vicinity (#@library-vicinity) "require"))

SCM だと特に slib の init を弄らなくていい、ということだったので、
てっきり簡単に build できるものと思っていたのに…。
slib 同梱の Template.scm に *features* のための configure だとかなんとか
書いてあったのでこれをどうにかするのでしょうか?
あと build のオプションも -F をいろいろ試してみましたが結果は同じ。
いかにも素人くさい質問なんですがご助力おねがい致します。

SCM -> cvs 先端
slib -> 3a3
環境 -> linux Kernel 2.6.16.11 (Archlinuxというマイナーなやつです)
0735デフォルトの名無しさん2006/04/28(金) 19:30:47
releaseじゃなくていきなりcvsから引っ張ってきて失敗したからって
質問されても。しかもドキュメントもろくに読んでないっぽいな。
0736デフォルトの名無しさん2006/04/28(金) 20:05:01
>>729
ある程度の見通しは立てて、それを阻害しないような選択はするけど、
基本的には忘れます。
0737デフォルトの名無しさん2006/04/28(金) 21:52:31
>>735 レスどうもです。
まったくおっしゃる通りで返す言葉もございません。
release落としてやってみたらすんなり通りましたorz...。

ドキュメントは読んだんですが、エラーメッセージからしてきっと単純なミスなんだと
思い込み、あれかこれかと憶測で試みた後、結局自分の無理解を思い知らされた格好です。

それでも懲りずに質問なんですが、r4rstest.scm を走らせると

> errors were:
> (SECTION (got expected (call)))
> ((6 5 6) (#f #t (mult-float-print-test #f)))
> ((6 5 6) (#f #t (mult-float-print-test #f)))
> ((6 5 6) (#f #t (mult-float-print-test #f)))
> ((6 5 6) (#f #t (mult-float-print-test #f)))
> ((6 5 6) (#f #t (mult-float-print-test #f)))

というエラーが出ます。
どこかでこれは実行環境の浮動小数点数の入出力の精度によるもので、
大して気にすることはないとあったと思うのですが、そういうものでしょうか。
初心者が気にするようなところではないのでしょうが、
どうにかしようがあるのなら、どうにかしたい気がします。
0738デフォルトの名無しさん2006/04/28(金) 22:02:13
>>737
そんなに気になるならどういうテストだかちゃんと調べて自分の頭で考えて
みればいいじゃないか。謙遜かもしれんが、自分で自分を「初心者」と呼ん
でるうちは進歩しないぞ。
07397372006/04/28(金) 22:25:36
>> 738
そうですね。泣き言いわずに自分で頑張って調べてみることにします。
Bootstrap にするには良い取っ掛かりかも知れません。
どうもでした。
0740デフォルトの名無しさん2006/04/28(金) 22:44:19
俺はふどー小数点は諦めてる
どうせ使わないし
Cと同じ動作すればとりあえず実用上問題ないし
0741デフォルトの名無しさん2006/04/28(金) 22:51:10
CLtL2の浮動小数点のとこはGuy Steeleの執念を感じる
0742デフォルトの名無しさん2006/04/28(金) 23:45:54
むしろ浮動小数点数を基本にして NaN の中に fixnum 等を埋め込む
0743デフォルトの名無しさん2006/04/29(土) 00:26:57
>>742
ALUレベルから設計したくなるな。
0744デフォルトの名無しさん2006/04/29(土) 01:19:07
前に今は亡きbitで読んだJava関係のGLSのネタには感動した。
sinの精密な定義にえらい時間をかけてるとか。
0745デフォルトの名無しさん2006/04/29(土) 05:27:17
>>743
あれだ、Opteronのソケットに挿せるFPGA。
0746デフォルトの名無しさん2006/04/29(土) 06:06:47
>>737
まったく気にしないよりは気にした方がいいと思うけど、
気にしたからといって全ての問題が解決できるわけじゃないからね。
ここはそういうことがあったと心に留めておいて、ひとまずは先に進むのがいいのでは?
何をしたくてSCMをインストールしたのか知らないけど、目的はあったんでしょ?
0747デフォルトの名無しさん2006/05/03(水) 16:32:37
Gauchのコマンドgoshって、readlineをサポートしないのでしょうか。
インタラクティブに実行できるのはいいんですが、C-pとか使えるようになってほしいんですけど。
0748デフォルトの名無しさん2006/05/03(水) 16:45:28
>>747
ledit
ttp://cristal.inria.fr/~ddr/

rlwrap
ttp://utopia.knoware.nl/~hlub/uck/rlwrap/
0749デフォルトの名無しさん2006/05/03(水) 17:47:01
>>747
Gauche-readline
http://www.netlab.is.tsukuba.ac.jp/~yokota/izumi/gauche/
0750デフォルトの名無しさん2006/05/03(水) 20:02:00
このごろscheme勉強はじめたんですが、
listの操作でいろいろなクイズ(パズル?)ありますよね。
あれでおもったんですが、ああいったlistの操作を群論にあてはめるような
研究(遊び?)ってないんでしょうか。
つまり、群論の最初でやる置換群を拡張したようなもの。

もしあるならば、任意のリスト遊びがある記号に対応し、
その記号を分解していくことで、
任意のリスト遊びが、記号の積で自明にあらわせないものかと。

こういうことは誰でもおもいつくものだから、
すでに誰かやっている、もしくはやっても意味無い事の説明でも
どこかにころがってないかな、と思い質問いたします。
0751デフォルトの名無しさん2006/05/06(土) 04:31:14
http://www.amazon.co.jp/exec/obidos/ASIN/4757727151/
S式ってあるけど、Lispとは関係なさげ
0752デフォルトの名無しさん2006/05/06(土) 17:29:33
ライトノベルってやつか。
以前もプログラミング用語使った題名の作品をこの板で見たな。
0753デフォルトの名無しさん2006/05/06(土) 18:35:53
登場人物のお姉ちゃんの名前にコンパイラだのインタプリタだのついてる漫画もあった気がする。
0754デフォルトの名無しさん2006/05/06(土) 18:39:26
eq とかを名前に使うのはどうかしてる。
■ このスレッドは過去ログ倉庫に格納されています