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

Lisp Scheme Part19

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/01/14(月) 00:14:56
過去スレ
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
0652デフォルトの名無しさん2008/02/20(水) 20:51:09
>>645

Petite Chez Scheme だとprocessを使って
他のプロセスにデータを送れたよ。
fprintを使うんだったかな。

>>650
数式処理には向いていると思う。
他にもいろいろと応用はあるんじゃないかな。
06536442008/02/20(水) 21:35:05
>>651
MzScheme, DrSchemeでうまく行きました。
ありがとうございました。

Gauche はこんな感じのようです。

・トレース - 結城浩のSICP日記 - sicp
http://sicp.g.hatena.ne.jp/hyuki/20060507/trace
0654デフォルトの名無しさん2008/02/20(水) 21:41:28
>>650
使用言語の選択を誤っていると思う
あなたの場合Lispを選択する意味はないのではないか
一般に手に入る資料が豊富な分C/C++でやるのがよい
0655デフォルトの名無しさん2008/02/20(水) 21:44:42
>>654
C/C++は習得済みで業務で使用してます。
Schemeでプロダクトコード書くわけではないので。
0656デフォルトの名無しさん2008/02/20(水) 21:58:03
lispやってる奴がもれなく超人に見える
だからやりたい
とか言う程の物さ
0657デフォルトの名無しさん2008/02/20(水) 22:16:40
>>655
言語の話とライブラリの話がごっちゃになってないかな。

言語の特徴としては、再帰的な処理の記述とか、
メタなプログラミングが楽とか色々あるけど。
そういうことが知りたいんじゃないんだろうし。

Schemeのアプリケーションって言われても、
ウェブアプリケーションサーバ書いてる人もいれば、
.NET向けのアプリケーションを書くために処理系を実装してたり、
日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。
0658デフォルトの名無しさん2008/02/20(水) 22:22:45
>>657

>再帰的な処理の記述とか、 メタなプログラミング
ここが勉強したいと思ったきっかけです。

>Schemeのアプリケーションって言われても、
>ウェブアプリケーションサーバ書いてる人もいれば、
>.NET向けのアプリケーションを書くために処理系を実装してたり、
>日常的に使うスクリプトをSchemeで書いてる人もいたりして様々。

色々できるんですね。ありがとうございます。
0659デフォルトの名無しさん2008/02/20(水) 22:30:23
>>658
ttp://practical-scheme.net/index-j.html

にある文章をいくつか読んでみたらどうだろう。ここのスレの人とかが、
何故敢えてLispやSchemeを使うのか、理解する助けになると思う。
0660デフォルトの名無しさん2008/02/20(水) 22:32:48
たぶん、プロセス間通信みたいな処理が好きな人は
SchemeよりEmacs Lispの方が楽しめると思う。
CL使わないとLispらしさのかけらもないコードになっちゃうけど。
0661デフォルトの名無しさん2008/02/20(水) 22:52:37
>>657
>言語の特徴としては、再帰的な処理の記述とか、
>メタなプログラミングが楽とか色々あるけど。
>そういうことが知りたいんじゃないんだろうし。
とオレも思ったのだが
>>658
>>再帰的な処理の記述とか、 メタなプログラミング
>ここが勉強したいと思ったきっかけです。
という意外な応答
真意がつかめない
0662デフォルトの名無しさん2008/02/20(水) 22:58:39
便乗質問で恐縮です

Larcenyでtraceは使えるんですが、再帰関数をtraceしても
再帰的にtraceしてくれません
何かうまい使い方があるのでしょうか?
0663デフォルトの名無しさん2008/02/21(木) 00:40:01
>>659
読んで見ます。

>>661
C++でテンプレート使ってライブラリ書きたいんですが
再帰とメタファンクションを使わなければいけないんですよ。
で、そもそも再帰とベースとする言語として関数型言語
を覗いたわけです。
0664デフォルトの名無しさん2008/02/21(木) 07:29:08
>>662

そうなんだよね、traceがちょっと他と違っている。
libにtrace.schがあるんでこれをハックしてみるとか。
0665デフォルトの名無しさん2008/02/21(木) 12:55:30
guile + swig でc++のメタ制御してみて便利さを体験してみたら?
Gimpのスクリプトで遊んでみるのもいいかも
0666デフォルトの名無しさん2008/02/21(木) 14:52:33
gauche本の発売日が1ヶ月伸びてますが、
やっぱりあれだけ赤が入ると無理だったのでしょうか。
0667デフォルトの名無しさん2008/02/21(木) 16:23:22
Gauche本てどんな読者が対象なんだろう。
0668デフォルトの名無しさん2008/02/21(木) 17:23:12
このスレの住人
0669デフォルトの名無しさん2008/02/21(木) 17:24:08
まぁ、まんざらでもないよなw
0670デフォルトの名無しさん2008/02/21(木) 17:49:47
The Little Schemer読んでる俺も対象に入れてくれお
0671デフォルトの名無しさん2008/02/21(木) 18:54:27
>>670
ナカーマ
象さん分かりやすいが、文法のリファレンスも欲しい今日この頃。
お勧めありますか?
0672デフォルトの名無しさん2008/02/21(木) 19:05:40
つR5RS

自分はA5用紙に印刷して綴じて常に携帯してる
ついでに電子辞書にもtxtファイルで入れてる
0673デフォルトの名無しさん2008/02/21(木) 20:28:28
carとcdrは何と読めばいいんでしょうか?
カーとクダーでいいですか?
0674デフォルトの名無しさん2008/02/21(木) 20:29:03
>>672
thx 日本語訳あったんで落とした。
0675デフォルトの名無しさん2008/02/21(木) 21:29:24
>>673
おk
0676デフォルトの名無しさん2008/02/21(木) 22:12:42
>>671 ( ^ω^)λ(^ω^ )ナカーマ
漏れはネットのあちこち入門サイトにお世話になってるお
0677デフォルトの名無しさん2008/02/21(木) 22:23:57
再(再(再(再帰)帰)帰)帰
0678デフォルトの名無しさん2008/02/21(木) 22:56:02
C/C++で仕事するのが面白くなくて辛いです。
Scheme勉強するのは楽しいです。
仕事の時間は無駄な時間に感じます。
0679デフォルトの名無しさん2008/02/21(木) 23:04:03
仕事というのはそういうものですよ
0680デフォルトの名無しさん2008/02/21(木) 23:17:53
確かに、金をもらわなきゃ誰もやらないようなことだからこそ、
金をもらえるんだものね。
金なしでやる人が大勢いるようなことなら、誰も金を出すわけない。
0681デフォルトの名無しさん2008/02/21(木) 23:25:36
家に帰ってSchemeにポートするつもりで作れYO!
ようやって作ったScheme版で独立すれば?という夢ぐらいは持ちたいものだw
0682デフォルトの名無しさん2008/02/21(木) 23:27:08
だれかR6RSの日本語訳早く作れよ
0683デフォルトの名無しさん2008/02/22(金) 00:15:56
R6RSの解説を読んだら、Schemeの欠陥が色々書いてあった
CLは細かいところまでよくできてるっぽいし
見かけによらないものだなーと
0684デフォルトの名無しさん2008/02/22(金) 00:50:01
>>677
先頭の再と末尾の帰が!
0685デフォルトの名無しさん2008/02/22(金) 00:52:27
>>683
>CLは細かいところまでよくできてるっぽい
と思えない俺は異常かおrz
0686デフォルトの名無しさん2008/02/22(金) 01:13:30
(再(再(再(再帰)帰)帰)帰)
0687デフォルトの名無しさん2008/02/22(金) 01:13:33
Common Lisp規格まとめ役のスティール親分が、
Schemeみたいにsymbol-valueとsymbol-functionを統合しとけば良かったなあ
けど互換性を重視したから難しかったんだよ
そう言っておられたぞ。
0688デフォルトの名無しさん2008/02/22(金) 01:35:56
Gauche-libsvmのリンク先に飛べない

Gauche c-wrapperはswigみたいなもの?
なんでswigにしなかったの?
0689デフォルトの名無しさん2008/02/22(金) 05:46:08
>>687
へー、初耳だ。
どこで言ってたの?
0690デフォルトの名無しさん2008/02/22(金) 09:35:15
>>686
それでよし
0691デフォルトの名無しさん2008/02/22(金) 09:37:24
>>687
>symbol-valueとsymbol-function
CL最醜の汚点だと思う
0692デフォルトの名無しさん2008/02/22(金) 11:14:06
>>689
bitの井田さんのインタビューかな?
0693デフォルトの名無しさん2008/02/22(金) 12:06:12
>>691
ちなみに、funcallを書くのは面倒だけど
フォームの頭に構文の名前 (funcallやlambdaやifやマクロの名前) を必ず書きましょう
と考えると汚くはない

funcallが汚いんじゃなくて、funcallを省略できる設計が汚い
0694デフォルトの名無しさん2008/02/22(金) 12:10:21
funcallはあまり気にならないな。むしろ判りやすい。
SPECIAL変数付近の扱いはちょっと汚いかなと思う。
0695デフォルトの名無しさん2008/02/22(金) 12:54:19
個人的にはCLで名前空間が単一/一様でないのは気にかかるところだ
関数とその他の値とを区別無くfirst class objectとして扱うコードを
書きたいときに柔軟性を制約する一因とはならないのだろうか?
0696デフォルトの名無しさん2008/02/22(金) 12:58:11
>>693
その話は関連する話ではあるけど、
symbolがsymbol-valueとsymbol-functionの二つ持つという話そのものから、
ちょっと離れていっていると思います。
一つしかない場合もその種の議論は成立するのですから。

>>694
スペシャル変数は、スレッドローカルな変数とか、
elispみたいなバッファーローカルな変数と同様の「パターン」で、
ある種のライブラリ、応用にはとても自然なeval拡張だと思う。
別の機構も考えられるけども、とてもLisp的だと思う。
(拡張というのはレキシカルスコープなevalに対して)
0697デフォルトの名無しさん2008/02/22(金) 13:01:00
>>695
そういう「特殊な」ことをやる場所ではfuncallを使う。
そういうとこへ関数を渡すときは #' を付けてましょう。
というのが CL 的発想だと思う。大きなプログラムの中での可読性を
考えれば、そんなに悪くないと思う。
純潔なSchemerには我慢できないだろうけど。w
0698デフォルトの名無しさん2008/02/22(金) 13:29:54
>>695
> 関数とその他の値とを区別無くfirst class objectとして扱うコードを

CLが違うのはシンボルにセルが2つあるのと関数を適用するときの特別扱いであって、
「区別無くfirst class objectとして扱う」こと自体は普通に書けるじゃん。
0699デフォルトの名無しさん2008/02/22(金) 13:40:16
座席が区別されてるだけで乗客は区別されない
0700デフォルトの名無しさん2008/02/22(金) 13:43:02
>>696
>一つしかない場合もその種の議論は成立する
そうです
Schemeでも関数なのかマクロなのか判断できなくて困ることがある
CLを汚いと言えるほどSchemeは綺麗じゃない

変数と関数じゃなくて
コンパイル時と実行時とで名前空間を分ければいいのかな?
0701デフォルトの名無しさん2008/02/22(金) 13:44:44
俺は人間が汚れてるから、ちょっと汚い言語のほうが好きだな
07026952008/02/22(金) 13:51:18
>>697>>698>>699
なるほど
0703デフォルトの名無しさん2008/02/23(土) 12:21:19
>>688

>Gauche c-wrapperはswigみたいなもの?
そう、ヘッダファイルからスタブを自動生成して関数やデータやマクロなんかをGaucheで使えるようにするもの。

>なんでswigにしなかったの?
最初swigを見たとき、バインディングの作り方がよく分からなかったから。
あと、コンパイルとかInterfaceファイルを作るのが面倒そうだったから。
0704デフォルトの名無しさん2008/02/23(土) 17:07:34
The Reasoned Schemer

この本はどのような人を対象としてるか読んだ人分かりますか?
なんかProlog的なコーディングをSchemeでもできるという紹介
文でしたが、これはScheme的ではない異色の内容なんですかね?
0705デフォルトの名無しさん2008/02/23(土) 17:21:57
とてもScheme的な応用の本。
言語プリミティブ的なものが応用対象だから。
0706デフォルトの名無しさん2008/02/24(日) 17:18:06
LispとPrologとは両輪だという話を読んだ覚えがある。
On LispでもPrologやってるし。
0707デフォルトの名無しさん2008/02/24(日) 17:20:49
両輪というより、レイヤーが違う感じかな
0708デフォルトの名無しさん2008/02/24(日) 17:30:57
Lisp/Schemeにはないが、
ML/Haskellはパターンマッチ渡しがあるから、
論理型言語とは「項書換えシステム」で統一的な見方ができる。
The Reasoned Schemerはその点でも面白い。S式は面白い。
0709デフォルトの名無しさん2008/02/24(日) 17:50:24
買ってみようかな
0710デフォルトの名無しさん2008/02/24(日) 17:58:54
The Little Schemerで教えてください。 P.121です。

1> (apples peaches pumpkin pie) はrelではない。なぜならペアのリストではないから。
2> ((apples peaches) (pumpkin pie) (apples peaches)) はrelではない。ペアのセットではないから。
3> ((apples peaches) (pumpkin pie)) はrelですか? yes
4> ((4 3) (4 2) (7 6) (6 2) (3 4)) はrelですか? yes
どういうことなのかさっぱりわかりません。
0711デフォルトの名無しさん2008/02/24(日) 18:02:25
>>710
まだそこまで読んでない。
0712デフォルトの名無しさん2008/02/24(日) 18:09:41
「セット」は重複要素を許しません。それで後は分かりませんか?
;; カッコに全角を使うのは辞めてください。釣りかと思います。
0713デフォルトの名無しさん2008/02/24(日) 18:15:06
>>712
サンクス!そういうことか!
ていうか、章の始めで教わってんじゃん・・・1日悩んじまったorz
全角ゴメン。気をつけます!

てかP.121じゃなくてP.119だし・・・
0714デフォルトの名無しさん2008/02/25(月) 19:07:24
javascriptがlispに匹敵する表現力があるって聞いたのだけど本当?
0715デフォルトの名無しさん2008/02/25(月) 19:39:24
brainfuckですらLispに匹敵する表現力がありますけど?
0716デフォルトの名無しさん2008/02/25(月) 19:40:14
>>714
ecmaスレで聞けよw
0717デフォルトの名無しさん2008/02/25(月) 20:31:44
アセンブラ表現力最強ですけどっ!!
0718デフォルトの名無しさん2008/02/25(月) 20:35:09
表現力最強じゃなくて記述力最強だ
まあいいや
0719デフォルトの名無しさん2008/02/25(月) 20:37:18
どちらにしても曖昧だな。強弱比較できるような概念でもあるまい。
0720デフォルトの名無しさん2008/02/25(月) 21:01:45
スペックじゃんけんがしたいならHaskellを選べばいいと思うよ。
0721デフォルトの名無しさん2008/02/25(月) 21:11:19
brainfuckにすら負けてる正規表現やcppの立場って・・・
0722デフォルトの名無しさん2008/02/25(月) 21:19:45
そのためのPEGとtemplateだろ?
0723デフォルトの名無しさん2008/02/26(火) 00:19:15
初心者は抽象化が苦手だ、とMatzが言ってた
チューリング完全性だけが重要なら、抽象化はどうでもいいはずだが、現実は違う
0724デフォルトの名無しさん2008/02/26(火) 00:48:20
>>714
JavascriptのクラスシステムはJavascriptで書かれてます。
次のバージョンからは組み込みになりますが。
prototype base object systemあたりでググってください。
0725デフォルトの名無しさん2008/02/26(火) 13:22:52
Little schemer P122 P123 に出てきた

Go and get one!
Or better yet, make your own.
は

”先へ進んで、完璧を目指せ!
もっといいのは、自分の力でやることだ。”

という意味であってる?
0726デフォルトの名無しさん2008/02/26(火) 22:17:26
>>725

邦訳の「Scheme手習い」元吉文男、横山晶一訳 
たぶん、7章の最後の文だと思うんだけど。

「自分で行って手に入れよ。
さもなくば、独自のものを作れ」

となっている。
0727デフォルトの名無しさん2008/02/26(火) 22:34:52
俺はなんかそんな堅苦しいメッセージじゃなくて、
「ここで一休み、お菓子取ってきなよ♪
 でなきゃ、自分で作ってみてはどうかな?」
という意味に取ったけど。
0728デフォルトの名無しさん2008/02/26(火) 22:38:29
>>726
全然違ってた。。

邦訳なんかあったんだ
まあ内容には関係ないからいいか

>>727
お菓子はないだろw
0729デフォルトの名無しさん2008/02/26(火) 22:41:23
>>728
いや、まじめに。だってクッキーの作り方書いてあるじゃん。
0730デフォルトの名無しさん2008/02/26(火) 22:50:15
>>726
その訳でクッキーのレシピはどうなってるの?
0731デフォルトの名無しさん2008/02/26(火) 22:53:27
>>729
ああ、あの囲みのコード?
おれはてっきりあれを自分で完成させろということかと思った。
アメリカンジョーク?
0732デフォルトの名無しさん2008/02/26(火) 22:55:26
>>731
あのコードをみて Make your own cokkies.ということかと・・・・

てか、度々「一休みしてお菓子食べなよ!マスタード忘れないようにNE!」
みたいなメッセージが出てきてるじゃん?
0733デフォルトの名無しさん2008/02/26(火) 22:58:15
>>730
クッキーのレシピがlambda式風に書かれている。

戒律風に訳されているので、この部分も戒律風にわざと訳したのかもね。
0734デフォルトの名無しさん2008/02/26(火) 23:00:22
(define クッキー
  (lambda ()
   (焼く
    (quote (180 度))
    (quote (12 分))
0735デフォルトの名無しさん2008/02/26(火) 23:02:47
>>733
そんな風になってるのか。
0736デフォルトの名無しさん2008/02/26(火) 23:02:51
アメリカンジョークというより、ウィットという感じかな。
0737デフォルトの名無しさん2008/02/26(火) 23:03:45
もうフリードマンさんの本全部読んでみたくなってきたw
0738デフォルトの名無しさん2008/02/27(水) 01:17:17
>>725
後半は、
「まだまだいいのがあると思うなら、自分で作ることだね」
0739デフォルトの名無しさん2008/02/27(水) 01:45:50
http://www.ccs.neu.edu/home/matthias/BTLS/

> A Food Preparation Place
0740デフォルトの名無しさん2008/02/28(木) 10:57:55
Little Schemer
Seasoned Schemer
Reasoned Schemer

があるんだけど、Little Schemerだけ紙質が悪いんだが
何で?わら半紙みたいでツルツルしてない。
0741デフォルトの名無しさん2008/02/28(木) 11:25:16
>>738
それが一番しっくりくるかな
0742デフォルトの名無しさん2008/02/28(木) 13:49:27
>>740
学生用のテキストは安いのを作ることがある。
0743デフォルトの名無しさん2008/02/28(木) 14:04:29
>>742
ツルツル版もあるの?
0744デフォルトの名無しさん2008/02/28(木) 14:05:50
ハッ!ハッ!ハッ!ハッ!
はげまるくーん
0745デフォルトの名無しさん2008/02/28(木) 14:16:05
醤油こぼしたらオシマイだよ。
0746デフォルトの名無しさん2008/02/28(木) 14:17:46
Schemeすげー、関数を渡せるなんて。C#のdelegateの構文に似たような
ものがあったな。
0747デフォルトの名無しさん2008/02/28(木) 20:41:32
関数ぐらいCでも渡せるだろう
0748デフォルトの名無しさん2008/02/28(木) 23:13:03
クロージャにしても継続にしても
Cでスタックを使うところにヒープを使えば自然と思いつきそうなものだが
Schemeみたいな高級言語で教えるのとどっちが分かりやすいのかね
0749デフォルトの名無しさん2008/02/28(木) 23:15:36
>>747
ポインタはね。関数は無理なのよ。しかも定義を呼び出し関数内に書ける
のがいい。C++のBOOST_FOREACHに似てる感覚。
0750デフォルトの名無しさん2008/02/28(木) 23:56:38
JavaScriptでも出来るぞw
0751デフォルトの名無しさん2008/02/29(金) 00:05:37
高級言語ならそれぐらい出来て当然
■ このスレッドは過去ログ倉庫に格納されています