08/01/17 14:00:35
>>155
Lisper一般ではなく、あくまで俺の印象だが、
「純粋すぎてちょっとめんどい」って感じ。
たぶん誤解なんだろうけど。
160:155
08/01/17 14:16:28
なるほど、ちょっとメンドイというのは、Schemeの芸術的シンプルさから見たら
色々煩すぎるよ、ということでしょうか。
161:デフォルトの名無しさん
08/01/17 14:16:43
> Haskell
数学や哲学の匂いに比べて、肝心の(という言い方はトゲがあるかな)工学の匂いが薄い、
という風に感じる。
でもこれは、2chのスレや、関数型言語関連の検索で引っかかったページからの印象で、
実際にHaskellに触ったことは無いんで、>>159と同じく、色々誤解もあるんだろうなと想像。
162:デフォルトの名無しさん
08/01/17 14:36:20
>>160
ちょっと違うかな。
LispでもSchemeでも、関数型風に書くこともできれば、手続き風に書くこともできるよね。
純粋関数型言語ってのはそういう融通が効かなさそうで、用途によっては面倒じゃね?って
イメージ。たぶんいろんな逃げ道があって、そうでもないんだろうけど。
163:155
08/01/17 14:45:03
>>162
そうですね。言語の入門ってよく"Hello World"をコンソールとかに出力するのとか
から始まりますが。Haskellの場合それは典型的な副作用関数なので、モナドが
必要とか、そんな話になってしまいます。
164:デフォルトの名無しさん
08/01/17 18:06:23
>>155
Haskellみて思うのはUKの純粋関数型言語というイメージかな?
ML系やLisp系にはUKの言語みたいなこだわりは感じないかなぁ。
良いとか悪いとかいう感想は持ったことない。職人的なこだわりが感じられる。
165:デフォルトの名無しさん
08/01/17 18:23:28
やっぱLispは東海岸?
BSDが西海岸文化で。
166:デフォルトの名無しさん
08/01/17 18:57:24
どなたかSimply Schemeの紹介キボンヌ
167:デフォルトの名無しさん
08/01/17 21:21:03
>>165
もっと絞るとボストン周辺文化
168:デフォルトの名無しさん
08/01/17 21:33:55
>>155
俺と全く同じ状況でワロタ。
lispの構文はシンプルで美しいと、心から思ったよ。
169:デフォルトの名無しさん
08/01/18 01:12:10
URLリンク(www.oreilly.co.jp)
赤多過ぎ。
表紙が「Gaucheプログラミング」って表紙からして間違ってない?
ダイジョブカ?
170:デフォルトの名無しさん
08/01/18 01:38:34
>>169
逆に考えるんだ。それだけ改善される、と。
171:デフォルトの名無しさん
08/01/18 01:58:30
オレも頑張ってるなとオモタよ。
172:デフォルトの名無しさん
08/01/18 02:26:18
>>167
そりゃ偏見w
インディアナあたりもガンガってる。
173:デフォルトの名無しさん
08/01/18 03:43:26
>>163
「モナドが必要」って,一体何をそんなに仰々しく構えているのか.
何も考えずに putStrLn すればいいんですよ.
(write "Hello world!") (newline) と書くとき,Schemeの意味論を思い浮かべる?
;; そもそも意味論はRnRSの一部しか記述してないけど
174:デフォルトの名無しさん
08/01/18 12:25:47
ここにいる人たちは学生ですか?
あるいは社会人だけど趣味やスキルアップのためにSchemeを
やっているのですか?
仕事でScheme使ってる人はいるのでしょうか?
175:デフォルトの名無しさん
08/01/18 12:49:33
いつか仕事(個人的なutilじゃなく)で使えればなーと思いつつ、スキルアップのため
176:デフォルトの名無しさん
08/01/18 12:58:20
黒田さんとかshiroさんレベルになれれば、
「大丈夫俺に任せろ」で仕事にできちゃうんだろなぁ
177:デフォルトの名無しさん
08/01/18 13:15:20
普段は普通の手続き型言語やね、でも強いて言えば
再帰が必要な処理だけは手続き型言語で書こうとすると悩むから
一旦Schemeで下書きしてから手続き型に直す
178:デフォルトの名無しさん
08/01/18 13:17:57
>>173
むしろ、writeが再定義されてたらどうしよう、とか思い浮かべたほうがいい
179:デフォルトの名無しさん
08/01/18 13:19:28
>>174
いろんな人がいると思うよ。画一的に考えるな。
俺は仕事で使ってるよ。Common Lispだけど。
180:デフォルトの名無しさん
08/01/18 22:00:49
>>174
本職はハードの設計だが, できあいのツールで機能が足りないときは
Lisp で書いてるな. C とか C++ で数値計算する気にならん.
181:デフォルトの名無しさん
08/01/18 22:12:59
SIAGの廃れっプリが凄いw
182:デフォルトの名無しさん
08/01/18 22:40:51
無職の人はいるのか?
183:デフォルトの名無しさん
08/01/18 22:55:04
Lispme使ってますがなにか?
184:デフォルトの名無しさん
08/01/19 22:46:09
>>174
回路設計者(しかも、アナログ)だけど、趣味でschemeやってますよ。
185:デフォルトの名無しさん
08/01/19 23:58:15
意外とハードウェア技術者が多いな。俺も昔、Lisp系でHDL(ハードウェア記述言語)を作ろうとか
考えたことがあるよ。
186:180
08/01/20 01:07:07
>>185 wwWwWW!おまえはなんて俺なんだ!!!
187:デフォルトの名無しさん
08/01/20 01:07:34
Lisperなんだが、あまりにgaucheが素晴らしいのでschemerになろうと思う。
そこで質問なんだが、Lispだとnil==()なのにschemeだと#f != ()な理由ってあるの?
188:デフォルトの名無しさん
08/01/20 01:11:05
>>187
おそらく宗教的な理由
189:デフォルトの名無しさん
08/01/20 01:11:19
意味のない混同で、バグの温床となることがあるので、止めた。
190:デフォルトの名無しさん
08/01/20 01:24:49
>>185-186
俺が多すぎ
191:デフォルトの名無しさん
08/01/20 01:33:02
VHDLisp
192:デフォルトの名無しさん
08/01/20 01:45:17
>>26-154
Little Schemer ⇒ ゾウさんの絵 ⇒ 繰り返しはどこまで続くのか? ⇒ Yコンビネータ ⇒ To Mock A Mockingbird ⇒ ゲーデルの定理
読み返してみたらホントにそう書いてあった。すげー。
193:デフォルトの名無しさん
08/01/20 08:01:34
>>187
どんな所がいいですか?
194:デフォルトの名無しさん
08/01/20 08:28:45
SICPにネットリスト記述処理系とかあるし
195:デフォルトの名無しさん
08/01/20 09:12:55
おれの場合、elispと「リスト遊び」でリスト便利、って気付いて、
schemeを知ってやべぇ美しすぎる!とか思った。
でも今は仕事でCommonLisp(ACL)を少し使ってる。バカでかい仕様も、
今では信頼の元。CLは愛してるというより尊敬の対象。
196:デフォルトの名無しさん
08/01/20 13:39:49
おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ
配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
197:デフォルトの名無しさん
08/01/20 13:42:24
そういう発想は無かったな。
使い分けるのが馬鹿らしかったら使い分けなきゃいいんじゃないか?w
198:デフォルトの名無しさん
08/01/20 13:47:21
>>196
> おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ
うん!
> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
あんまおもわねぇなぁ
assoc と hash …
199:デフォルトの名無しさん
08/01/20 14:08:27
>>198
前スレでassocの書き方を色々とやってたな。4つぐらいあった希ガス。
でも使い分けるという感じではなかった。
200:デフォルトの名無しさん
08/01/20 15:09:18
> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
JavaScriptなんかはそこらへんルーズなんで楽ちんではある
201:デフォルトの名無しさん
08/01/20 15:15:18
Lispでも「俺はハッシュしか使わん」というのは勝手なんだが
問題はキーを比較するときに多態性がないと不便ってことかな
202:デフォルトの名無しさん
08/01/20 16:06:12
>>196
Arcってそゆんじゃなかったっけ? alistとhashを抽象化したdbって。
>>200
久しぶりに書くと配列をiterateするのにfor(var in ary)で書いてしまって??となる
203:187
08/01/20 17:38:21
>>193
まずschemeで((if #t + -) 1 2)がでできることに感動
まだほとんど触ってないけどgaucheは
・速い(と聞いている)
・バインディングが書きやすい(ように見える)
・スレッドが使える
・dotimes, whileとかあるし、ライブラリが使いやすそう
defunとかmapcarなくて戸惑ってるけど、これから勉強します
204:デフォルトの名無しさん
08/01/20 18:44:45
>203
define
map
205:デフォルトの名無しさん
08/01/20 19:07:12
hash と assoc は計算量がちがうよね。
用途に合わせて使い分けるもんじゃないの?
206:デフォルトの名無しさん
08/01/20 19:18:13
まだconsのところだけど、Little Schemer面白くなってきた。
再帰は苦手だけど、この本の再帰の妥当性チェックの仕方の
説明が良かった。コツを掴めそう。
207:デフォルトの名無しさん
08/01/20 19:27:45
>>205
> 用途に合わせて使い分けるもんじゃないの?
どの辺で切り分けるかでいつも迷う.
208:デフォルトの名無しさん
08/01/20 19:32:14
大きいときはハッシュテーブル。
後で追加したものを優先したくて、一発である時点へ戻したいという場合は連想リスト。
どちらでもなければ、どちらでもいい。w
209:デフォルトの名無しさん
08/01/20 19:33:08
URLリンク(www.amazon.com)
The Scheme Programming Language, 3rd Edition
米国では評価高いみたいですが読んだ人どうですか?
210:デフォルトの名無しさん
08/01/20 19:54:09
>>208
> どちらでもなければ、どちらでもいい。w
ここだろ? >>207 が頭抱え込んでるのは…
211:デフォルトの名無しさん
08/01/20 19:57:08
小さいなら連想リストでいいべ
212:デフォルトの名無しさん
08/01/20 20:04:36
CやC++なんか知らねえ。
おれはscheme一筋って人いますか?
213:デフォルトの名無しさん
08/01/20 20:16:13
>>212
さすがに高級アセンブラであるところの C を知らねぇって奴はいないんじゃねぇの?
C++ とはあまりお近づきになりたくないのは確だけど。W
214:デフォルトの名無しさん
08/01/20 20:27:52
C知らないことはないけど、大規模なのは作ったことないorz
215:デフォルトの名無しさん
08/01/20 20:51:28
>>209
巻末の仕様書。
216:デフォルトの名無しさん
08/01/20 21:20:23
Scheme処理系を今時オールアセンブラで書こうっつう漢はいねぇべ
217:デフォルトの名無しさん
08/01/20 21:32:41
(defun my-foreach (proc-list 'val-list)
(if (not (cdr var-list))
(proc-list (car val-list))
(progn
(proc-list (car val-list))
(my-foreach proc-list (cdr val-list)))))
(setq list-a '(1 2 3 4))
(1 2 3 4)
(my-foreach '(lambda (x) (print x)) 'list-a)
foreachのような関数をlispで作ろうと考えたのですが、どうもうまくいきません。
上記のようにするとlist-aがvoidだと怒られてしまいます。
218:デフォルトの名無しさん
08/01/20 22:00:18
>>216
ツウジテナイw
219:デフォルトの名無しさん
08/01/20 23:03:13
>>216
8008の頃からマイクロプロセッサさわってると衝動的にその罠に落ちる。
#でもarm7とかだと今でも有効なキガス
220:デフォルトの名無しさん
08/01/20 23:21:24
話の流れが見えない
>>213 は (equal? C 高級アセンブラ) => #t
>>216 のは (equal? C アセンブラ) の評価結果はどうなるんだ?
221:デフォルトの名無しさん
08/01/20 23:28:24
>>220 天使のオペレータ
amb!
amb!
222:デフォルトの名無しさん
08/01/20 23:45:42
>>220
そうだと思う。>>216,>>219は妙だw
223:デフォルトの名無しさん
08/01/21 00:30:54
>>217
どこから突っ込めばいいのか……
とりあえず val-list の引用符いらない
224:デフォルトの名無しさん
08/01/21 00:31:31
>>217
(defun my-foreach (proc-list val-list)
(if (not (cdr val-list))
(funcall proc-list (car val-list))
(progn
(funcall proc-list (car val-list))
(my-foreach proc-list (cdr val-list)))))
(setq list-a '(1 2 3 4))
(1 2 3 4)
(my-foreach #'(lambda (x) (print x)) 'list-a)
schemeと違ってlispはfuncallしないと関数は呼び出せないよ。
225:デフォルトの名無しさん
08/01/21 00:49:15
あ、list-aにクォート付いてたw
(my-foreach #'(lambda (x) (print x)) list-a)
226:デフォルトの名無しさん
08/01/21 01:54:50
>>224
なるほど、勉強になりました。どうもです。
227:デフォルトの名無しさん
08/01/21 02:57:56
>>209
全文公開されてるから読め。
228:デフォルトの名無しさん
08/01/21 12:51:48
Schemeの「継続」ってのをわかりやすく教えてくれないか。
自分的にはドラえもんの「人生やり直し機」みたいなイメージをもっているんだが。
229:デフォルトの名無しさん
08/01/21 13:33:40
なんでも継続 でググ(略
230:デフォルトの名無しさん
08/01/21 14:16:46
>>228
的確なイメージですね
231:デフォルトの名無しさん
08/01/21 15:16:38
まずは人生やり直し機の実装について語ろうか
232:デフォルトの名無しさん
08/01/21 17:03:49
ファーストクラスの継続は、やり直せる。
ファーストクラスの人生は、やり直す必要がない。
233:デフォルトの名無しさん
08/01/21 22:11:06
>>232
で、ファーストクラス未満の人生は、やり直しが効かないと…
234:デフォルトの名無しさん
08/01/21 22:44:04
人生は不可逆だからやり直しはできないだろうけど、
出直しならできるんじゃない。本人は変われないが環境を変えることはできる。
Schemeだと昔の環境を保存しておいて復元した環境に飛び込んでいくんでないの。
235:デフォルトの名無しさん
08/01/21 23:38:56
>>234
人生に関しては逆だよ、変わるのは環境じゃなく自分。
乱暴に言えば自分しか変われる要素は無い。
236:デフォルトの名無しさん
08/01/21 23:40:27
人生の話はスレ違いですよ
237:デフォルトの名無しさん
08/01/22 01:22:28
lispは人生
238:デフォルトの名無しさん
08/01/22 11:29:02
Schemeは哲学
239:デフォルトの名無しさん
08/01/22 21:09:16
C#は成功
240:デフォルトの名無しさん
08/01/22 21:26:31
Cは仕事
241:デフォルトの名無しさん
08/01/22 21:41:12
国歌がないぞ
242:デフォルトの名無しさん
08/01/22 21:50:38
国家はコッカだけに、
「静かな湖畔の...」と対になる曲が必要だな。
243:デフォルトの名無しさん
08/01/23 08:33:14
>>176
>黒田さんとかshiroさんレベルになれれば、
shiroさんはコードとか読んでも本当に凄いと思うんだけど、
黒田さんって凄いの? どっかで氏が書いたコード読めますか?
どんだけ凄いのか是非読んでみたい。
話だけ聞いてると名物*ANSI* CL厨親父にしか思えない人が多い気がする。
244:デフォルトの名無しさん
08/01/23 08:34:53
gauche で cons, list に nil 渡すとエラーになる。
これは gauche の仕様っていう認識で OK?
245:デフォルトの名無しさん
08/01/23 08:40:36
schemeにnilなんてあったっけ?
246:デフォルトの名無しさん
08/01/23 09:49:23
>>245
そもそもないのね。
SICP に書いてあったから、あるのかと思った。
247:デフォルトの名無しさん
08/01/23 12:01:03
(define nil '())
248:デフォルトの名無しさん
08/01/23 14:03:19
'()や#'(lambda ...)のクオートは省略できる?
というか何故クオートつけるのか分からない…
249:デフォルトの名無しさん
08/01/23 15:10:53
前者については
Schemeの場合は()は自己評価的でないからクォートしなければならないとR5RSに明記されている
空リストはアトムだから自己評価的だという考え方もできるけど
リストだからクォートしなければならないとも考えられる。
個人的には自己評価的のほうが自然だと思えるけど。
CLなら自己評価的だからクォートしなくてもいい。
後者については
CLの場合はクォートしない(lambda ...)はlambdaマクロとして評価されて
#'(lambda ...)に展開される。(らしい。CLはよく知らない)
#(...)もCLだと自己評価的、Schemeだとクォートしなければならないけど
自己評価的でいいのに。
250:デフォルトの名無しさん
08/01/23 16:39:52
なるほどありがとう
色々弄ってたら酷い例を見つけてしまった
(flet ((function (x) x)) #'(lambda (x) x))
251:デフォルトの名無しさん
08/01/23 16:43:34
>>249
をいをい。#(...) は配列だぞ。#' でひとかたまり。
252:デフォルトの名無しさん
08/01/23 18:57:53
>>251
違う話だからパラグラフを分けたのに><
253:デフォルトの名無しさん
08/01/23 20:07:52
適当な接続詞も入れればよかったね
254:デフォルトの名無しさん
08/01/23 20:25:28
ちなみにとか
255:デフォルトの名無しさん
08/01/23 20:40:14
いや普通わかるだろw
256:デフォルトの名無しさん
08/01/23 21:40:53
いまさらだけど”空リストはアトムだから自己評価的”って
シンボルの例があるから妙な主張でしたね
Schemeの場合#'が(syntax ...)に展開される処理系もあるってことも最初書いてたんだけど
さすがにこの話ではないと思って削って
ついでに#(...)の段落を足したんでした
どこかでCLにおける#()は(vector ...)に展開される入力マクロだからクォートしないって見たような気がするけど
違いますよね?
257:デフォルトの名無しさん
08/01/23 21:46:40
CLにおける#()は入力マクロだけど、そういう話とは別に配列というもの
自体が自己評価的。つまり、何度 eval しても変わらない。
258:デフォルトの名無しさん
08/01/24 00:44:50
>>243
トークショーでの黒田さんのツッコミ能力はすごいぞ。その点期待はずれなのが小飼弾だ。
259:デフォルトの名無しさん
08/01/24 00:46:52
それって的確な突っ込みがビシバシ来る感じ?
260:デフォルトの名無しさん
08/01/24 00:57:37
>>243最初の記事が煽りっぽかったからな。おれも最初は define-syntax しらねーのかよ、とか思ってたクチだが、俺がアホなだけだった…。
まぁ WiLiKi の Scheme:マクロ:CommonLispとの比較:意味論 で Shiro さんが「黒田さんに指摘されてはたと膝を打った次第です。」と書くくらいだからね。
「名物*ANSI* CL厨親父」ってのは初耳な単語だが、まずもうちょっと謙虚に相手の言う事を考える事も必要だと思うよ。
261:デフォルトの名無しさん
08/01/24 01:05:38
そういや昔のスレでも感情むきだしな奴がいたな。Scheme派としては気持はわかなくもないけど
262:デフォルトの名無しさん
08/01/24 01:33:28
WiLiKiを読んで思ったが
<expression>が<datum>であるべきだと仮定すると、
()がreadされた時点で自己評価的なオブジェクトになってるわけだから
やっぱり(quote ())というのは冗長だよなぁ
263:デフォルトの名無しさん
08/01/24 01:40:22
今更な気もするけど、>>2の慶応SFCの
授業ページ(記号処理プログラミング)のリンク切れてるね。
とりあえず2007年度のもの。
URLリンク(web.sfc.keio.ac.jp)
264:デフォルトの名無しさん
08/01/24 16:55:36
「入門CommonLisp 関数型4つの特徴とλ計算」(新納浩幸著)
この本、いいなぁ。8章からラムダ計算のこと、Lispによって具体的に説明している。
高橋正子先生の教えを受けたんだ。茨城に住んでいたらぜひとも聴講に行きたいところだ。
265:デフォルトの名無しさん
08/01/24 17:11:47
>>264
そいつのブログ見てみろよ。ひどいぜ。
愚痴ばっかだし、自分の研究室の学生をバカにするようなことまでブログに書くんだぜ。
とても大学の教員とは思えない幼稚な記事ばかり。
266:デフォルトの名無しさん
08/01/24 17:27:52
>>264
8章は良いですね。
URLリンク(book.mycom.co.jp)
わかっていて買う人は良いですけど。
タイトル買いをしてCommon Lispの入門に使えないのは残念だと思います。
プログラムをCommon Lispで動くかどうかも試してないみたいですし。
267:264
08/01/24 17:42:27
>>265
>>266
なるほど~、そうなんだ。
FXはちょっとだな...プロにかもられなきゃいいけど。
268:264
08/01/24 22:03:16
でも、本はなかなか良いと思う。
黄金比の固有値、固有ベクトルなんかにも触れていたり。
数学へのモチベーションも上がるし高校生なんかにはいいんじゃないかね。
269:デフォルトの名無しさん
08/01/24 22:20:40
本人自演乙
270:デフォルトの名無しさん
08/01/24 23:28:11
>>268
> 黄金比の固有値、固有ベクトルなんかにも触れていたり。
で, どのあたりが
> 数学へのモチベーション
につながるのかな?
271:デフォルトの名無しさん
08/01/25 01:15:13
入門の入門には悪くないと思う
自分はλ計算についてこの本で知った
そしてすぐに高橋正子の計算論、グレアムのAnsi Common Lisp、ディヴィグのプログラミング言語Schemeを買ってどっぷりはまったクチ
でも「代入文は使わない」のところで(Cの)初期化と代入を混同してるような文章がある等
あちこち気になる点があるのも事実
それに高校生の「数学への」モチベーションにはならないと思う
だけどLispやλ計算を知るきっかけになってくれたことには感謝してる
(λ記法は知ってたけどλ算法は知らなかった)
272:デフォルトの名無しさん
08/01/25 01:16:53
入計算λ門
ぱっと見わからないなw
ごめんなさい
273:デフォルトの名無しさん
08/01/25 01:28:58
数学もプログラミングもほとんど素地なくても(←念のため俺のこと)
あの入門本から計算論ていけるもんですか?
274:デフォルトの名無しさん
08/01/25 01:33:24
君の素地次第だからなんとも言えない
275:デフォルトの名無しさん
08/01/25 01:45:57
じゃあ逆に、、どんな素地の人がそんなに一気にはまったのですか?
276:デフォルトの名無しさん
08/01/25 01:55:49
それは逆になっていませんよ
277:271-272
08/01/25 02:02:46
274は271じゃないけど
自分は素地というよりλ計算の美しさに魅せられたからだと思ってる
278:271-272
08/01/25 02:09:56
あ、それから計算論はまだ読破できてません
自分の素地といえば
・車輪の再発明が大好き
・Smalltalkに惚れた
・MIPSのアーキテクチャに惚れた
・Windows、32bitのx86を毛嫌いしている
・今はSchemeに夢中
・でも一番美しいのはλ式だと思ってる
「美しいものを嫌いな人がいるのかしら?」ってとこかなw
279:デフォルトの名無しさん
08/01/25 02:10:00
ディヴィグ本買いそびれてオジサン涙目 orz
280:デフォルトの名無しさん
08/01/25 02:15:28
美しいものを嫌いな人はあまりいないだろうが美的センスは個々によってだいぶ違うだろうな
281:271-272
08/01/25 02:25:15
そうですね
λ式よりもコンビネータ理論のほうが美しいと言う人もいますしね
282:デフォルトの名無しさん
08/01/25 03:05:23
多少不細工でも料理の上手い子のほうがいいよ
283:デフォルトの名無しさん
08/01/25 04:07:48
Perlか。>不細工だけど料理は出来る
284:デフォルトの名無しさん
08/01/25 05:13:37
>>270
大学1年で線形代数をみっちりやるじゃない。
後期で固有値、固有ベクトルをやったんだけどその応用のひとつ。
フィボナッチ数列が行列の積として表せて固有値を計算すると黄金比
がでてくるなんてすごいじゃんと思った。
萩谷先生の「関数プログラミング」にもそういう題材があったと思う。
本はどこに片付けたかわからなくて確かめられないけど、たしか
あったと思う。
高校でやる行列やベクトルが実はとても面白い分野と将来結びついてくる
ということを知ればもっともっと数学が楽しくなると思う。
285:275
08/01/25 08:35:20
サンキューララァ。なんとなくだけどわかりました。
286:デフォルトの名無しさん
08/01/25 13:25:08
固有値に黄金比が出てくるのは大学受験の時知ったけど…
287:デフォルトの名無しさん
08/01/25 15:50:30
高校生の時、勉強さぼってたんでよくわからないけど、
優秀な人は高校の時に固有値、固有ベクトルに慣れ親しんでるらしいね。
萩谷先生の本だったかエッセーだったかに「高校時代に慣れ親しんだ...」みたいな
話があったと思う。
288:286
08/01/25 19:31:03
固有値やったのは俺が旧課程だからかもしれないな。
だって優秀じゃないし(^_^;)
289:デフォルトの名無しさん
08/01/25 19:42:59
CやC++で窓のGUI書くのとLISPで書くのどっちがお手軽かな・・・
290:デフォルトの名無しさん
08/01/25 20:05:52
最近はC#が楽すぎワロタっていう感じ。
291:デフォルトの名無しさん
08/01/25 20:46:10
やっぱKawaでしょ
292:デフォルトの名無しさん
08/01/25 22:44:59
>>278
Lisp系だと「原理主義」にどう対応するかで派閥があるからなぁ。
293:デフォルトの名無しさん
08/01/25 23:50:56
>>278
単なる茶々だけど
> ・MIPSのアーキテクチャに惚れた
NIPS 32bit: シンプルでかわぇぇ!!!
MIPS 64bit: バッチィ… 特にアドレス空間周りがorz
消防とか厨房とかの頃, 好きだった女の子に同窓会でであったら… … …
てな, 心境だったな > MIPS 64bit
294:デフォルトの名無しさん
08/01/25 23:52:33
>>279
> ディヴィグ本買いそびれてオジサン涙目 orz
げええっ、絶版かよ!俺もまだ買ってないのに!
URLリンク(www.amazon.co.jp)
> 現在在庫切れです。この商品の再入荷予定は立っておりません。
295:デフォルトの名無しさん
08/01/26 00:24:54
>>293
激しく同意です
R3000はイカスけどR4000はイケてない
遅延スロット使ってストールなしに分岐できるのがクールなのに
といいつつ一番弄ったMIPSはEmotionEngine(^^;)
>>294
某大手書店の最後の一冊買っちゃった
日本語版の初版第2刷
オライリーさん、>>209の日本語版よろしくです
296:デフォルトの名無しさん
08/01/26 00:46:07
>>294
これって名著なの?
俺買ったけど面白くなかったからSICP買って今それ読んでる。
SICP読み終わってからこれ読んだらわかるようになってるかな?
297:デフォルトの名無しさん
08/01/26 00:49:36
別に名著じゃないと思うけど
グレアムのAnsi Common Lisp/On Lispの方がずっといい
けどSchemeは本が少ないから
自分が持ってるのはディヴィグ本の日本語版、SICPの日本語版、Schemeによる記号処理入門
298:デフォルトの名無しさん
08/01/26 00:53:24
本が少ないってのは日本語の本のことね
299:sage
08/01/26 07:53:15
いま、とんでもないことに気がついたんだが ...
LISP は LISP で アトム を定義することができない
そんな、気がするんだが気のせいか?
300:デフォルトの名無しさん
08/01/26 09:12:44
>>299
atom は pure lisp の5関数(CAR、CDR、CONS、ATOM、EQ)に含まれているんだからそらそうでしょ
301:デフォルトの名無しさん
08/01/26 10:29:10
Lisp作るのにyaccは不要だがlexに匹敵する強力なリードマクロがあってもいいはず
302:デフォルトの名無しさん
08/01/26 12:35:10
>>266
>プログラムをCommon Lispで動くかどうかも試してないみたいですし。
本のサポートページにソースがあったのでちょっとだけ試してみた。
URLリンク(book.mycom.co.jp)
8章のコードはGCLならOKだったよ。SBCLだとひっかったのがあったけど。
CLだとfuncallとか1+をquoteしなきゃならないとか気持ち悪いので
Schemeで書き直そうかと思っている。
303:デフォルトの名無しさん
08/01/26 13:07:21
λ計算はβ変換で簡約していくのに対して
Lisp、Schemeは都度実際に計算していくので
λとは違うみたいだね。
Lispでλ式をλ計算どおりに簡約化していくものを作ったら面白いかも。
304:303
08/01/26 13:12:05
ああ、萩谷先生、もうとっくにそういうの作ってるね。
URLリンク(hagi.is.s.u-tokyo.ac.jp)
305:デフォルトの名無しさん
08/01/26 15:50:38
>>303
いかにしてα変換をサボるかが重要なわけだが
((lambda (x) (lambda (y) x)) y) => (lambda (foo) y)
306:デフォルトの名無しさん
08/01/26 16:15:30
やたー!
OpenBSDザウルスでGaucheが動かせるようになったー!
pdaXromやtitchyやPocketWorkstationに浮気する必要がなくなったー!
307:デフォルトの名無しさん
08/01/26 18:05:38
>>303
その辺りは昔、関数型言語の遅延評価の実装で良く議論されました。
古いけど全文公開されている↓の「第二部 グラフ簡約」など。
URLリンク(research.microsoft.com)
308:デフォルトの名無しさん
08/01/26 20:45:52
>>305
>>307
面白くなってきたので今晩、Schemeでλ計算インタープリタを書いてみるよ。
309:デフォルトの名無しさん
08/01/26 22:34:06
;;λ計算インタープリタ
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (lambda? f)
(and (list? f) (eq? (car f) 'lambda)))
(define (atom? f)
(and (not (pair? f))))
(define (beta-redix? f)
(and (lambda? (car f))
(not (null? (cdr f)))))
310:デフォルトの名無しさん
08/01/26 22:34:45
(define (beta-conversion l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
;; (((lambda (x) ...) M)) -> ((lambda (x) ...) M)
(define (deep-lambda? f)
(cond ((lambda? f) #f)
((atom? (car f)) #f)
((and (list? (caar f)) (eq? (caaar f) 'lambda)) #t)
(else #f)))
(define (reduction form)
(cond ((deep-lambda? form) (reduction (car form)))
((not (beta-redix? form)) form)
(else (begin (display form)(newline)
(reduction (beta-conversion (car form) (cadr form)))))))
(define foo '((lambda (x) x) (lambda (a) a)))
(define bar '((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a)))
311:デフォルトの名無しさん
08/01/26 22:37:43
> (reduction bar)
((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a))
((lambda (a) a) ((lambda (z) x z) (lambda (z) z)))
((lambda (z) x z) (lambda (z) z))
(x (lambda (z) z))
新納先生のp157をやってみて同じ結果になったつもりなんだけど...
こんなんでいいのだろうか?
β変換しか考えていない。α変換は無視している。
312:デフォルトの名無しさん
08/01/26 22:44:47
一瞬意味判らんかったけど、x yの場合(x y)の意味か。
まあ副作用無視なら単純だよ。
313:デフォルトの名無しさん
08/01/26 23:29:18
λx.(NM)はλx.NM と略記して良いと書いてあったので。
正直、まだよく理解できていない。こういうことをやることがλ計算と
言われるものなのだろうか???
314:デフォルトの名無しさん
08/01/26 23:40:32
> (reduction '((lambda (x) x) y))
((lambda (x) x) y)
(y)
これは(null? (cdr f))とかすればいいとして
> (reduction '(x ((lambda (x) x) y)))
(x ((lambda (x) x) y))
こっちが面倒だな
315:デフォルトの名無しさん
08/01/27 07:27:52
>>314
あ、そっか。なるほど~。
考えてみる。λ計算ってのはなかなか面白いね。
かんばってチャーチ、ロッサーの定理にも挑戦してみたい。
316:デフォルトの名無しさん
08/01/27 08:35:22
;;λ計算インタープリタ ver0.2
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (lambda? f)
(and (list? f) (eq? (car f) 'lambda)))
(define (atom? f)
(and (not (pair? f))))
(define (beta-redix? f)
(cond ((atom? f) #f)
((and (atom? (car f)) (null? (cdr f))) #f)
((and (lambda? (car f))(not (null? (cdr f)))) #t)
((lambda? (caadr f)) #t)
(else #f)))
317:デフォルトの名無しさん
08/01/27 08:36:45
(define (left-lambda? f)
(and (lambda? (car f))(not (null? (cdr f)))))
(define (right-lambda? f)
(lambda? (caadr f)))
(define (beta-conversion l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
(define (deep-lambda? f)
(cond ((lambda? f) #f)
((atom? (car f)) #f)
((and (list? (caar f)) (eq? (caaar f) 'lambda)) #t)
(else #f)))
(define (var? f)
(and (atom? (car f)) (null? (cdr f))))
(define (deep-lambda2? f)
(and (lambda? (car f)) (null? (cdr f))))
318:デフォルトの名無しさん
08/01/27 08:37:34
;; (((lambda (x) ...) M)) -> ((lambda (x) ...) M)
;; (x) -> x
;; ((lambda (a) a)) -> (lambda (a) a)
(define (simpl f)
(cond ((atom? f) f)
((deep-lambda? f) (car f))
((deep-lambda2? f) (car f))
((var? f) (car f))
(else f)))
(define (reduction form)
(cond ((not (beta-redix? form)) form)
((left-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (car form) (cadr form))))))
((right-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (caadr form) (cadr (cadr form)))))))))
(define foo '((lambda (x) x) (lambda (a) a)))
(define bar '((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a)))
(define baz '(x ((lambda (x) x) y)))
(define boo '((lambda (x) x) y))
319:デフォルトの名無しさん
08/01/27 08:39:33
> (reduction foo)
((lambda (x) x) (lambda (a) a))
(lambda (a) a)
> (reduction bar)
((lambda (y) y ((lambda (z) x z) (lambda (z) z))) (lambda (a) a))
((lambda (a) a) ((lambda (z) x z) (lambda (z) z)))
((lambda (z) x z) (lambda (z) z))
(x (lambda (z) z))
> (reduction baz)
(x ((lambda (x) x) y))
y
> (reduction boo)
((lambda (x) x) y)
y
>
こんどはいいかな?
320:デフォルトの名無しさん
08/01/27 09:02:39
(define uoo '((lambda (x) (lambda (y) x)) y))
> (reduction uoo)
((lambda (x) (lambda (y) x)) y)
(lambda (y) y)
>
これがダメなんだけどα変換がよくわからない。
高橋正子先生の本にもα変換がないみたい。
321:デフォルトの名無しさん
08/01/27 09:42:50
違っていた。修正
(define (beta-redix? f)
(cond ((atom? f) #f)
((and (atom? (car f)) (atom? (cadr f))) #f)
((and (atom? (car f)) (null? (cdr f))) #f)
((and (lambda? (car f))(not (null? (cdr f)))) #t)
((lambda? (caadr f)) #t)
(else #f)))
(define (reduction form)
(cond ((not (beta-redix? form)) form)
((left-lambda? form)
(begin (display form)(newline)
(reduction (simpl (beta-conversion (car form) (cadr form))))))
((right-lambda? form)
(begin (display form)(newline)
(reduction (list (car form)
(simpl (beta-conversion (caadr form) (cadr (cadr form))))))))))
> (reduction baz)
(x ((lambda (x) x) y))
(x y)
322:デフォルトの名無しさん
08/01/27 18:13:47
>>306 激しく乙
つ旦
323:デフォルトの名無しさん
08/01/27 19:17:30
>>322
ども
だけどGC周りがまだ怪しいから手をくわえなきゃいけない
324:デフォルトの名無しさん
08/01/27 21:14:25
URLリンク(tcc.nifty.com)
gauche.night前売りktkr。今年は黒田さん出ないの?
325:デフォルトの名無しさん
08/01/27 23:02:15
>>324
黒黒田でないんじゃつまらんなぁ
326:デフォルトの名無しさん
08/01/27 23:14:26
>>320
λ式をリストで表現してると、名前の衝突回避は難しいような
327:デフォルトの名無しさん
08/01/27 23:35:04
>>326
> uoo2
((lambda (x) (lambda (z) x)) y)
> (reduce uoo2)
((lambda (x) (lambda (z) x)) y)
(lambda (z) y)
>
束縛変数の付け替えをすればうまくいくはずで、そのことを
α変換というのだと思う。で、このα変換をどのようにアルゴリズム
として表現できるのかと考えている。
新納先生のp156のβ変換の説明の最初にあるアンダーラインの部分が
α変換のことだと思う。
コンパイラ設計者には必須の知識らしいんだけどさっぱりわからない。
328:デフォルトの名無しさん
08/01/27 23:38:22
チャーチ符号化はこんなことなのだと思う。
> two
((lambda (x) (lambda (s) (s (s x)))) 0)
> (reduce two)
((lambda (x) (lambda (s) (s (s x)))) 0)
(lambda (s) (s (s 0)))
> ((lambda (s) (s (s 0))) 1+)
2
>
SICPの1章にもあったような気もするけど忘却の彼方。
329:デフォルトの名無しさん
08/01/27 23:47:46
openmclがClozure CLに改名したね。
330:326
08/01/27 23:58:13
>>327
ああそうか、ちょっと勘違いしてたみたいだ。
(lambda ...) に代入するときに名前を変えてやればいいんだから、
そんなに難しくはないね。
331:デフォルトの名無しさん
08/01/28 00:05:11
>>327
住井先生の速攻MinCamlコンパイラ概説のAlpha.mlが読めればそれを参考にするといいかも.
URLリンク(min-caml.sourceforge.net)
MinCamlではλ式でなくlet recのところでローカル関数を定義するけどね.
構文木を上から調べていって,変数が導入されていたら
グローバルなカウンタか何かを使ってとにかく一意な名前に変えてしまう( x → x1, y → y2 etc. )
そしてハッシュでその対応を覚えておく.
ネストした変数束縛で同じ "x" が再び現れたら,
そこから下の部分木では対応は x → x1 でなく x → x3 (例えば)であるとハッシュを更新.
例.構文木のうち見終わった部分を [] で書くと...
(lambda (x) (lambda (y) (lambda (x) (list x y x))))
→ [lambda [x1] (lambda (y) (lambda (x) (list x y x)))] with {x → x1}
→ [lambda [x1] [lambda [y2] (lambda (x) (list x y x))]] with {x → x1, y → y2}
→ [lambda [x1] [lambda [y2] [lambda [x3] (list x y x)]]] with {x → x3, y → y2}
→ [lambda [x1] [lambda [y2] [lambda [x3] [list x3 y2 x3]]]] with {x → x3, y → y2}
332:デフォルトの名無しさん
08/01/28 01:35:10
C#の匿名メソッドはクロージャーじゃないっていうけど、何で?
クロージャーの補足する環境にオブジェクトの値ではなく参照を含めるだけじゃダメなの?
scheme的にはどう?
333:327
08/01/28 08:30:39
>>331
ありがとう。
やってみるよ。
334:デフォルトの名無しさん
08/01/28 10:26:25
>>332
URLリンク(blogs.msdn.com)
335:306=323
08/01/28 17:16:03
GaucheをOpenBSDザウルスでビルドできるようになったんだけど
45%程度の確率で*load-path*が破損している
55%: ("../test" "../lib" "../libsrc" "../src" ...)
45%: ("\f" "../lib" "../libsrc" "../src" ...)
みたいな感じ
-Iで与えられたディレクトリ名のみが破壊されてる
破壊されるパターンはランダムではなく、
いつも決まった文字列にすり替わってる
GC_DONT_GC=Yesすると0%になるからGC周りの問題なんだろうけど
どこが悪いのか見当もつかない
せめて同じ引数で起動したときには同じ状況になってくれればいいのに
336:デフォルトの名無しさん
08/01/28 23:03:08
うへえ、追いにくそうなバグだね
337:デフォルトの名無しさん
08/01/28 23:36:35
起動してから20分ぐらいして温まったら安定したりしてなw
そのザウルス大丈夫なんだろうな?
338:306
08/01/28 23:44:17
これまでにわかったのは
・最初のプロンプトが出る前にGCが発動した場合にのみ破壊が起こってること
・プロンプトが出た後のGCによって破壊されることは(今のところ)ないこと
・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数でgoshを起動しても
最初のプロンプトが出る前にGCが発動するのが1000回試行中440回程度あること
・-I引数をいくつも与えると"srfi-6"とか"srfi-2"とか意味のある文字列にすりかわったりする場合があること
・同じカレントディレクトリに同じ環境変数に同じコマンドライン引数で起動した場合
すりかわった後の文字列はいつも同じであること
これらの材料でアタリをつけられる人いませんか?
339:306
08/01/28 23:58:06
温まったら安定するようになるって可能性より
稼働時間長すぎて不安定になってるって可能性のほうが高いかもw
セルフコンパイル&セルフデバッグ&SSH鯖だから
340:306
08/01/29 00:05:48
あ、そういえばプログラムが暴走したり長時間走ってるプロセスがあると
プログラムを起動しようとしてもBad Addressで起動しなかったりするようになる
何度も何度もチャレンジすれば起動するけど
i386-OpenBSDならそういうことないんだけど
でもそういうハード的な原因ならもっとランダムに破壊されそうなものだけど
破壊される場合は必ず同じパターンに破壊されるからソフト側の問題だと思う
Boehm-GCの機種依存部分であるスタックの底とstatic領域の始点を得る関数は
破壊パターン正常パターンともに同じ値を返してます
Gauche本体に当てたパッチはDOUBLE_ARMENDIANを未定義にするってのだけだから
やはりBoehm-GCに当てたパッチのバグ臭い
341:デフォルトの名無しさん
08/01/29 01:11:53
>機種依存部分
CPUのレジスタも?・・・考えるだけでも恐ろしい
342:306
08/01/29 01:30:37
static領域の終点も同じ値を返すから
どうもレジスタの指す領域のマーク漏れ臭い
でもi386-OpenBSDでは問題ないし
Linuxザウルスではうまくいってる(らしい)から
もうBoehm-GC側では怪しいところはないんだけどなぁ
343:デフォルトの名無しさん
08/01/29 06:46:25
α変換とβ変換を考え直した。
;;λ計算インタープリタ ver0.3
(define (subst old new f)
(cond ((null? f) '())
((equal? (car f) old) (cons new (subst old new (cdr f))))
((atom? (car f)) (cons (car f) (subst old new (cdr f))))
(else (cons (subst old new (car f))(subst old new (cdr f))))))
(define (atom? f)
(and (not (pair? f))))
;;λ式の判定 定義2.1.1(計算論)
(define (lambda-term? f)
(cond ((symbol? f) #t) ;x0,x1...
((number? f) #t) ;1,2,3..数もλ式ということにする。
((null? (cdr f)) #f) ;(M)
((and (eq? (car f) 'lambda)(symbol? (caadr f))(lambda-term? (caddr f))) #t);λx.M
((and (lambda-term? (car f))(lambda-term? (cadr f)))) ;(M N)
(else #f)))
344:デフォルトの名無しさん
08/01/29 06:47:41
;;α変換 λ式の定義にしたがってパース。
(define (alfa-conversion f)
(genvar 'reset)
(reset-var)
(alfa-conversion1 f))
(define (alfa-conversion1 f)
(cond ((and (symbol? f)(bound? f)) (bound? f))
((and (symbol? f)(not(bound? f)) f))
((number? f) f)
((null? (cdr f)) (alfa-conversion1 (car f)))
((and (eq? (car f) 'lambda)(symbol? (caadr f)))
(let ((new (genvar 'gen)) (l '()))
(bound (caadr f) new)
(set! l (list 'lambda (list new) (alfa-conversion1 (caddr f))))
(reset-var)
l))
(else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f))))))
;;変数リスト
;;((x . x1)(y . x2) ...)
(define var-assoc '())
(define (bound? v)
(let ((ans (assq v var-assoc)))
(if ans
(cdr ans)
#f)))
345:デフォルトの名無しさん
08/01/29 06:49:06
(define (bound old new)
(set! var-assoc (cons (cons old new) var-assoc)))
(define (reset-var)
(set! var-assoc '()))
;; 変数を生成する
(define genvar
(let ((x -1))
(lambda (msg)
(cond ((eq? msg 'gen)
(begin (set! x (+ x 1))
(string->symbol (string-append "x" (number->string x)))))
((eq? msg 'reset)(set! x -1))))))
;;β基の判定 (λx.M)N 計算論p66
(define (beta-redex? f)
(cond ((atom? f) #f)
((atom? (car f)) #f)
((and (eq? (caar f) 'lambda)
(symbol? (caadar f))
(lambda-term? (caddar f))
(lambda-term? (cadr f))) #t)
(else #f)))
346:デフォルトの名無しさん
08/01/29 06:49:59
;;β正規形 β-normal-form
(define (beta-normal-form? f)
(cond ((and (lambda-term? f)(symbol? f)) #t) ; x0
((and (lambda-term? f)(beta-redex? (cadr f))) #f) ;(x λx.M)
((and (lambda-term? f)(not (beta-redex? f))) #t)
(else #f)))
;;β変換
(define (beta-reduce l m)
(let ((arg (caadr l))
(body (cddr l)))
(subst arg m body)))
;; ((N M)) -> (N M)
;; (x0) -> x0
;; (N) -> N
(define (simpl f)
(cond ((lambda-term? f) f)
((and (lambda-term? (car f))(null? (cdr f))) (car f))
((and (lambda-term? (caar f))(lambda-term? (cadar f))) (car f))
(else f)))
(define (reduce form)
(reduce1 (alfa-conversion form)))
347:デフォルトの名無しさん
08/01/29 06:51:56
(define (reduce1 form)
(cond ((beta-normal-form? form) form)
((beta-redex? form)
(begin (display form)(newline)
(reduce1 (simpl (beta-reduce (car form) (cadr form))))))
((beta-redex? (cadr form))
(begin (display form)(newline)
(reduce1 (list (car form)
(simpl (beta-reduce (car (cadr form)) (cadr (cadr form))))))))))
> uoo
((lambda (x) (lambda (y) x)) y)
> (reduce uoo)
((lambda (x0) (lambda (x1) x0)) y)
(lambda (x1) y)
>
長々とスマンです。
348:デフォルトの名無しさん
08/01/29 07:10:53
GaucheのGCは保守GCだっけ?
しかもARM?バグバグの予感
349:デフォルトの名無しさん
08/01/29 07:15:28
λの本体はやっぱりカッコでくくらないといけなかった。
> bar
((lambda (y) (y ((lambda (z) (x z)) (lambda (z) z))))
(lambda (a) a))
> (reduce bar)
((lambda (x0) (x0 ((lambda (x1) (x x1)) (lambda (x2) x2)))) (lambda (x3) x3))
((lambda (x3) x3) ((lambda (x1) (x x1)) (lambda (x2) x2)))
((lambda (x1) (x x1)) (lambda (x2) x2))
(x (lambda (x2) x2))
>
350:デフォルトの名無しさん
08/01/29 12:58:28
>>342
BoehmってXScaleできちんとした実績あるのかなあ
351:デフォルトの名無しさん
08/01/29 15:24:15
>>349
余分な括弧を許してsimplを使うのがまわりくどい。
括弧の代わりにXMLみたいなタグをイメージしてみたら?
タグは<variable><application><abstraction>の3種類とする。
余分なタグをつけると意味が変わってしまうから、
余分なタグのない状態を保つことになり、simplなんていらなくなる。
それ以前にβ正規形の定義がおかしい。
β基は一番上とcadr以外の場所にもあるから全部探さないと
352:デフォルトの名無しさん
08/01/29 17:17:23
>>351
>β基は一番上とcadr以外の場所にもあるから全部探さないと
具体的にどういう場合なのか教えてくれないか。考えてみたいんで。
353:デフォルトの名無しさん
08/01/29 17:59:52
>>352
バックトラッキングみたいなことかな?
354:デフォルトの名無しさん
08/01/29 19:01:44
λx.λy.x((λz.z)y)とかかな?
355:デフォルトの名無しさん
08/01/29 19:05:57
>>352
最外簡約とかでググって。
>>307の本にも詳しく解説してある。
356:デフォルトの名無しさん
08/01/29 19:07:15
正規形もいれた方がいいかな。
357:デフォルトの名無しさん
08/01/29 19:39:46
>>351
言わんとすることがなんとなくわかってきた。
朝、早起きできたら書き直してみるよ。
358:デフォルトの名無しさん
08/01/29 23:06:50
インデックス・オートマトン
359:306
08/01/30 06:37:02
原因の一端が突き止められました
グローバル変数pre_cmdsがDATASTARTとDATAENDの間に位置してないから
スキャンの対象外になってたせいのようです
DATASTARTとDATAENDを正しく取得できるようにすればいいようです
360:デフォルトの名無しさん
08/01/30 07:25:09
Arc URLリンク(arclanguage.org) リリースされたぞ!
361:306
08/01/30 07:26:45
Boehm-GCは.bssセクションの末尾からメモリを走査していって
最初にsegvったところ(の1ワード手前)が.rodataセクションの開始点だと仮定してるようですが
arm-OpenBSDはセクションの間ごとにsegvるので
.bssセクションのみをスキャン対象にしてしまうようです
OpenBSD4.2のportsのパッチはそこらへんを工夫してうまくやってるようです
362:デフォルトの名無しさん
08/01/30 07:42:51
おつかれ~
363:デフォルトの名無しさん
08/01/30 09:46:18
>>306さんは凄いなぁ。
364:デフォルトの名無しさん
08/01/30 20:09:53
>>360 よくわからんがすばらしい!
365:306
08/01/30 20:50:26
C言語の範疇ではrodataセクションに
ヒープへのポインタは入り得ないので
dataセクションとbssセクションをスキャンするようにパッチを当て
test/system.scmのcond-expandのsigwait節にelse節を追加したら(pthreadを無効にしているため)
すべてのtestにpassしました
shiroさんのとこに報告しようと思います
C++とかだとコンストラクタの関係で
rodataセクションにもヒープへのポインタが入り得るのかな?
366:デフォルトの名無しさん
08/01/30 21:41:49
>>306
Arcに期待してもいのかなあ?(期待したいのだけど)
「MzScheme上で動く」って言われても、
それを望んでいたのかなあ?
ソースも何も読んでないけど(「なら何も言うな!」はご勘弁を)
Paul Graham の名前で出てくるのだから
単にLISP処理系の一つではなく
「LISPもSchemeもまとめて、S式はArcに集まれ!」
ぐらいものを期待していたんだけど。
Arcをよく知ってる人!
解説よろしく!
367:デフォルトの名無しさん
08/01/30 21:46:26
いまいち何が新しいのかよくわからんのよね>Arc
368:デフォルトの名無しさん
08/01/30 22:02:50
ifとか劣化したcondにしか見えない。
alrefは=(≒setf)のためだと思うが、
値を返してしまうので、成否がわからない。
この問題は多値/optional型がFAだと思うのだが…
369:デフォルトの名無しさん
08/01/30 22:06:22
Schemeでも今では大きい、もっと削ってシンプルに、という方向なのかな。
その割には(とりあえず)Schemeで実装されてるとこが本末転倒だけど。
370:デフォルトの名無しさん
08/01/30 22:13:41
シンプルに、っていうか
とにかく記述のコンパクトさにこだわってる感じ
スクリプト言語的な志向性というか
371:デフォルトの名無しさん
08/01/30 23:15:36
tut.txt読んだだけだと
「括弧が少なくて読みづらい」「識別子が短くて読みづらい」
だな
それとなぜかlogoが連想された
372:デフォルトの名無しさん
08/01/30 23:20:26
彼ほどの人物でも「俺様Lisp」の誘惑から逃れることは出来なかったってことか。
あくまで、今のところは、だけど。今後の大化けに期待。
373:デフォルトの名無しさん
08/01/30 23:29:42
もしかしたらSchemeにおける第1級の継続みたいな
画期的な武器があるのかも
374:デフォルトの名無しさん
08/01/30 23:31:50
>>351
余計なカッコがつくのはbeta-reduceで余計なカッコがついてしまうのが原因だった。
;;β変換
(define (beta-reduce l m)
(let ((arg (caadr l))
(body (cddr l))) ;x0 -> (x0), (x y) -> ((x y))
(car (subst arg m body)))) ;(x-) -> x0,((x y)) -> (x y)
α変換の付け替えが違っていた。
(define (alfa-conversion1 f)
(cond ((and (symbol? f)(bound? f)) (bound? f))
((and (symbol? f)(not(bound? f)) f))
((number? f) f)
((null? (cdr f)) (alfa-conversion1 (car f)))
((and (eq? (car f) 'lambda)(symbol? (caadr f)))
(let ((new (genvar 'gen)))
(bound (caadr f) new)
(list 'lambda (list new) (alfa-conversion1 (caddr f)))))
(else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f))))))
375:デフォルトの名無しさん
08/01/30 23:34:32
β正規形、とりあえず書き直してみたがアヤシイ。
;;β正規形 β-normal-form
(define (beta-normal-form? f)
(cond ((not (lambda-term? f)) #f)
((symbol? f) #t) ; x0,x1...
((number? f) #t) ; 1,2,3...
((and (list? f)(eq? (car f) 'lambda)
(beta-normal-form? (caddr f))) #t) ;λx.x
((and (list? f)
(symbol? (car f))
(beta-normal-form? (cadr f))) #t) ;(x λx.x)
((and (list? f)(symbol? (car f))(symbol? (cadr f))) #f) ;(x0 x1)
(else #f)))
376:デフォルトの名無しさん
08/01/30 23:35:20
結局ベターなLisp方言ってだけなの?>arc
速度的にあまり期待できないなぁ。
せめてCommonLispで実装してほしかったよ。
377:デフォルトの名無しさん
08/01/30 23:36:53
リダクション、書き直してみたけど、左側のネストが深くなるとアウト。
(define (reduce1 form)
(cond ((beta-normal-form? form) form) ;β-normal-form
((and (symbol? (car form))
(beta-redex? (cadr form))) ;(x0 M)
(begin (display form)(newline)
(reduce1 (list (car form) (reduce1 (cadr form))))))
((eq? (car form) 'lambda) ;λx.M
(begin (display form)(newline)
(reduce1 (list (car form)
(cadr form)
(reduce1 (caddr form))))))
((eq? (caar form) 'lambda)
(begin (display form)(newline)
(reduce1 (beta-reduce (car form) (cadr form))))) ;(λx.x)M
(else (error "Reduction error"))))
378:デフォルトの名無しさん
08/01/31 00:23:15
>>351
ヒントください。
α変換。(lambda (x) (lambda (y) (x ((lambda (z) z) y))))だとうまくいくけど
そうすると((lambda (x) (lambda (y) x)) y)がうまくいかない。
λx.λy.λz のように深くなっていくときには一番内側のλ式から変換していくと
思うのだけどxyzを順番に変換していくのがよくわからない。
379:デフォルトの名無しさん
08/01/31 00:26:35
>>378
スレリンク(tech板:485番)
イータ簡約って奴でしょ。
URLリンク(www.lambda-bound.com)
380:デフォルトの名無しさん
08/01/31 01:24:32
> Arc
よく見てないけど、グレアムのことだからマクロは使えるんだろうな。
381:デフォルトの名無しさん
08/01/31 02:50:21
Arcって車輪の再発明じゃないの。ただのSchemeもどきでしょ。
何か新しいことあるの?
382:デフォルトの名無しさん
08/01/31 05:56:09
>>381
知らなきゃ書けない1行目のあとに
知らない奴しか書かない2行目が続くのはどうかと。
383:378
08/01/31 07:20:54
α変換については束縛変数のリストをスタックに積めばいいだけだった。
(define (alfa-conversion1 f)
(cond ((and (symbol? f)(bound? f)) (bound? f))
((and (symbol? f)(not(bound? f)) f))
((number? f) f)
((null? (cdr f)) (alfa-conversion1 (car f)))
((and (eq? (car f) 'lambda)(symbol? (caadr f)))
(let ((new (genvar 'gen)) (l '()))
(push-var)
(bound (caadr f) new)
(set! l (list 'lambda (list new) (alfa-conversion1 (caddr f))))
(pop-var)
l))
(else (list (alfa-conversion1 (car f))(alfa-conversion1 (cadr f))))))
(define (push-var)
(set! stack (cons var-assoc stack)))
(define (pop-var)
(set! var-assoc (car stack))
(set! stack (cdr stack)))
384:378
08/01/31 07:24:23
多重抽象についてはβ変換を複数の項を扱えるように変更して最左戦略
すればいいみたいなので拡張する。
((lambda (x) (lambda (y) (x y))) a b)
((lambda (x y) (x y)) a b)
385:デフォルトの名無しさん
08/01/31 10:03:30
計算論 計算可能性とラムダ計算
URLリンク(www.amazon.co.jp)
この本を読んでおくとschemeに対する理解は
深まりますか?
386:デフォルトの名無しさん
08/01/31 11:50:23
>>385
理解が深まると思うよ。
Guy L. Steele, Jr.はScheme開発の初期にチャーチの論文を
読んでたらしいから。Lispはλから離れてしまったけど
Schemeはλに近いと思う。
387:デフォルトの名無しさん
08/01/31 11:55:58
>>386
ありがとう。ページ数も少ないし読みやすそうなので
読んで見ます。
388:デフォルトの名無しさん
08/01/31 12:15:01
正直、そういう質問が出るくらいだからまだ他に読む本があるはず。
プログラミング言語の新潮流
URLリンク(www.amazon.co.jp)
コンピュータサイエンス入門-論理とプログラム意味論
URLリンク(www.amazon.co.jp)
URLリンク(guppy.eng.kagawa-u.ac.jp)
「ラムダ計算 プログラミング言語の数学モデル」
URLリンク(www.kurims.kyoto-u.ac.jp)
>>387
> ページ数も少ないし読みやすそうなので
あれは純然たる数学の本の体裁だから、
プログラミング言語入門的な本に比べると、
十万ページくらいある感じですよ。
あのシリーズは余分な解説はほとんどなくて骨子のみだし。
389:デフォルトの名無しさん
08/01/31 12:38:46
>>388
>十万ページくらいある感じですよ。
そうだね。
故中西先生のLispの本も同じシリーズだったと思う。
とっつきは悪いけど時間が経てば理解が深まり名著だって
思うようになるんじゃないかな。最初に中西先生のLisp本
読んだときはさっぱりわからなかったもんなぁ。
390:デフォルトの名無しさん
08/01/31 12:42:49
>>388
>>389
そうですか。
もう少しscheme勉強してから読むことにします。
でも絶版になったら嫌なんで買っておきます。
391:デフォルトの名無しさん
08/01/31 12:53:47
証明の中でβ変換を並行処理してハァハァする本、という印象があるのだが
Schemeは並行計算や遅延評価に強いわけでもないだろうに
Haskellが「遠い」ように見えるのは型があってマクロがないのが原因だな
392:デフォルトの名無しさん
08/01/31 13:04:05
高橋さんの本を読んでSchemeに対する理解が深まるってのは詐欺に近いと思う。
393:デフォルトの名無しさん
08/01/31 18:30:37
URLリンク(journal.mycom.co.jp)
394:デフォルトの名無しさん
08/01/31 20:12:29
>>393
このスクリーンショットは...
URLリンク(journal.mycom.co.jp)
395:デフォルトの名無しさん
08/01/31 21:28:26
begin ってw
Pascal みたいやな
396:デフォルトの名無しさん
08/01/31 21:38:29
pascalていうより、そのまんまschemeでわ。
397:デフォルトの名無しさん
08/01/31 22:22:39
(prn "Hello, World!")
398:デフォルトの名無しさん
08/01/31 22:41:32
MzSchemeとどこがちがうんだ?
399:デフォルトの名無しさん
08/01/31 22:50:41
>>394
なにを思ってこの画面を載せたんだろーか
400:デフォルトの名無しさん
08/01/31 22:54:43
いやそもそも^Cでuser breakかけた後はMzSchemeでそ
401:デフォルトの名無しさん
08/01/31 23:07:11
>>394
arc関係なさすぎw
402:デフォルトの名無しさん
08/02/01 00:04:08
ほんとに「人気の言語を作るには」がそのまんま形になった感じなんだね > Arc
403:真人間になれ、忍
08/02/01 00:10:43
さらしとくw
04:07 PM shinobu@MBPro ~/Downloads/arc0
$ mzscheme -m -f as.scm
Use (quit) to quit, (tl) to return here after an interrupt.
arc> ^Cuser break
=== context ===
/Users/shinobu/Downloads/arc0/ac.scm:904:4
/Users/shinobu/Downloads/arc0/ac.scm:979:7
> (begin
(display "Hello, World!")
(newline))
Hello, World!
> ワラ
404:デフォルトの名無しさん
08/02/01 00:23:13
shinobu の OS X ハッキング! にはお世話になっている俺がいる。
405:デフォルトの名無しさん
08/02/01 00:43:11
arcつかえねーよっていう高度なdisだなw
406:デフォルトの名無しさん
08/02/01 01:01:55
使い方わからずに試行錯誤を繰り返して、^Cしてようやく使えた気になってるのかな?
とりあえず魚拓
URLリンク(s04.megalodon.jp)
URLリンク(s03.megalodon.jp)
407:デフォルトの名無しさん
08/02/01 02:04:53
なんかnewlispみたいw
408:デフォルトの名無しさん
08/02/01 07:40:31
Arc、あんまり飛躍がなくてずいぶん大人しいなあ。ちょっと期待外れ。
409:デフォルトの名無しさん
08/02/01 08:37:01
オブジェクトなマクロって何に使うの?>arc
410:デフォルトの名無しさん
08/02/01 11:00:14
構文がファーストクラスってことかな?
なら((fn (x) (x T 'foo 'bar)) if)みたいなことができたり
(apply if '(NIL foo bar))みたいなことができるのかな?
CLみたくマクロと特別式に分かれてるのかな?
Schemeみたく構文として(プリミティブと合成の違いはあるけど)一緒くたなのかな?
411:デフォルトの名無しさん
08/02/01 12:01:40
ラムダ式になっているだけに見えるが、
macro-expandとかしなくてもapply出来るわな、動的に。
412:デフォルトの名無しさん
08/02/01 12:09:06
arc> (let for (fn () (pr "blub ")) (repeat 3 (for)))
Error: "#<procedure>: expects at least 3 arguments, given 0"
こういう時に匿名マクロが欲しい
413:デフォルトの名無しさん
08/02/01 17:32:32
arc> (fn (for) (for))
Error: "#<procedure>: expects at least 3 arguments, given 0"
何か変だと思ったら束縛するより先にマクロ展開してる
マクロと同じ名前の局所変数がマクロを隠すことがない
逆にマクロが変数を隠す問題はfuncallに相当するものを使って回避できる
(リストの先頭に来なければマクロに間違われることもないから)
414:デフォルトの名無しさん
08/02/02 01:56:42
URLリンク(blog.livedoor.jp)
415:デフォルトの名無しさん
08/02/02 06:13:13
>>385
その本もってるが、定理と証明ばっかりでさっぱり判らん。
1章はともかく、2章辺りから終始論理式と、「~を仮定すると
~を満たす~があるとき~は~の~という」みたいな口調で
うんざりした。だから何、と。書き方が数学屋さん向け。
時代的に無理だろうけど「はじめに」でLISPの基礎理論だ
とか言うなら、それで書いてくれた方が良い。
プログラマの心理は、手段みたいなものは最初どうでもよくて、
結果や効果からの興味で中身がどうなってるか、と関心が
向いてくと思うんだけど、そういうのを期待できる本じゃない。
416:デフォルトの名無しさん
08/02/02 09:19:47
Lispの本質はマクロです
SICP読んだだけの人にはわからんのです
417:デフォルトの名無しさん
08/02/02 12:46:00
>>413
schemeのスコープで評価してないだけじゃないかと。
schemeだと
((lambda (list) (list)) (lambda () 'うんこ))
=>うんこ
ちゃんとうんこが出てきます。
418:デフォルトの名無しさん
08/02/02 15:31:12
URLリンク(d3.jpn.org)
419:デフォルトの名無しさん
08/02/02 17:16:18
未完成の俺様Lispでポールが爆釣
420:ポール@アークヒルズ
08/02/02 17:24:44
沢山釣れた(@wぷ
421:デフォルトの名無しさん
08/02/02 18:05:26
アークヒルズってどのポールだよ?
422:デフォルトの名無しさん
08/02/02 19:38:25
arc いいんじゃない。なんか、こう、こざっぱりした感じで。
へ~、イイ感じじゃん。
423:デフォルトの名無しさん
08/02/02 19:43:34
>>417
これで便秘解消ですね!
424:デフォルトの名無しさん
08/02/02 19:46:12
平方根があるのに三角関数がない?複素数はいいみたい。
arc> (sqrt 2)
1.4142135623730951
arc> (sin 3.14)
Error: "reference to undefined identifier: _sin"
arc> (acos -1)
Error: "reference to undefined identifier: _acos"
arc>
arc> (* 1+1i 1+1i)
0+2i
arc>
425:デフォルトの名無しさん
08/02/02 20:09:55
高階関数はSchemeと同じみたい。ファーストクラス、λと同じ。
(def sum (f n)
(if (is n 0)
0
(+ (f n) (sum f (- n 1)))))
arc> (sum sqrt 10)
22.4682781862041
arc>
426:デフォルトの名無しさん
08/02/02 20:38:53
スピードを比較するのは酷かもしれんけど...
arc> (def tak (x y z)
(if (> x y)
(tak (tak (- x 1) y z)
(tak (- y 1) z x)
(tak (- z 1) x y))
y))
#<procedure: tak>
arc> (tak 12 6 0)
12
arc> time
#3(tagged mac #<procedure>)
arc> (time (tak 12 6 0))
time: 18047 msec.
12
arc>
Schemeで書かれていることを考えれば悪くはない。
427:デフォルトの名無しさん
08/02/02 20:51:27
CommonLisp = ベンツ
Scheme = ポルシェ
Arc = アルファロメオ
428:デフォルトの名無しさん
08/02/02 21:10:43
なんだすぐ錆びるのか Arc
429:デフォルトの名無しさん
08/02/02 22:19:26
また遅れるみたいですね... orz
URLリンク(xach.livejournal.com)
430:デフォルトの名無しさん
08/02/03 00:56:48
きっと初心者がarcやったら混乱する
ポールは結局、前置記法に嫌気が差しただけに見える
pythonやMLみたいなのを設計した方が受けが良いと思う
頭に括弧がある限り、ただのLISP方言だよ
431:デフォルトの名無しさん
08/02/03 01:25:45
煽りでも荒らしでも喧嘩腰でもないレスに1行も同意できないのは珍しい。
432:デフォルトの名無しさん
08/02/03 02:04:24
Arcは予想通りというか、「Perlがこだわっているもの」を取り込んできた感じ(小飼氏の見方は半分くらい受け付けないけど)。
PaulにとってLispの価値は「美しいこと」より「現実的に強いこと」のほうにあって、
「スケッチ的に手を動かして、試行錯誤で形を作っていける力」「同じことを短く書く力」は
特に大きなウェイトを占めるから、かの言語にある程度近づくのは読めたことだろう。
ただしPerlと違うのは、Lispの構文(あるいは構文の無さ)の範疇でそれをやっているからこそ、
Perlの「しっかり覚えてもなお読みにくいという難しさ」は遠ざけることができているところかな。
「覚えなきゃ手が出せない替わりに、覚えれば物凄い速度で書き下ろせるし、混乱無く読めもする」
という所に着地するために、ArcはLispであることと、LispっぽくないことをPaul流に融合させてると思う。
>>430は「Lispである部分」を4行目、「Lispっぽくない部分」を1行目でネガティブに捉えているのだと思う。
でも、俺にはどちらも一つのヴィジョンのもとに選択され、良くまとまっているように思える・・・・・・のは多分、
俺がPaulの文章を読んでLispの世界に足を踏み入れた人間で、頭がまだちゃんと独り立ちしてないからかもしれないw
433:デフォルトの名無しさん
08/02/03 03:27:48
arcのfnは構造化代入が使える?のね。
srv.arcに
(with ((i o ip) (socket-accept s)) ~)
みたいな使われ方があって、withの機能かと思ったら、
with自体はarc.arcに
(mac with (parms . body)
`((fn ,(map1 car (pair parms))
,@body)
,@(map1 cadr (pair parms))))
とだけ書いてあった。つまり最初のを展開するとfnにたらい回しされる。
((fn ((i o ip)) ~) (socket-accept s))
socket-acceptは多値相当をリストで返すんかな?
こういうのは便利のような気もするけど、つい効率の方を気にしてしまう。
名前付き引数ってわけじゃないのか。
434:デフォルトの名無しさん
08/02/03 04:18:26
ac.scmに追加したら数学関数も動いた。
;;数学関数追加
(xdef 'sin sin)
(xdef 'cos cos)
(xdef 'tan tan)
(xdef 'asin asin)
(xdef 'acos acos)
(xdef 'atan atan)
arc> (cos 1)
0.5403023058681398
arc> (= pi (acos -1))
3.141592653589793
arc> pi
3.141592653589793
arc>
435:デフォルトの名無しさん
08/02/03 05:16:13
文字列の扱いが楽だね。
arc> (+ "abc" "def")
"abcdef"
そういうのアリ!
arc> ("abc" 2)
#\c
あ、いいかも。
lambdaが無いのは寂しいけど
arc> ((fn (x) (* x x x)) 3)
27
arc>
さっぱりして気持ちいいな。
よし、Arc 気に入った。
436:デフォルトの名無しさん
08/02/03 06:17:56
文字列を掛けるとどうなるん?
引き算すると??
437:デフォルトの名無しさん
08/02/03 06:19:04
(* "a" 5)
=>"aaaaa"
(- "abcde" "bcd")
=>"ae"
な、わけねーだろ
438:デフォルトの名無しさん
08/02/03 14:31:39
型推論によって
整数が期待されている所では
(+ "abc" "defgh" "ij") -> 10
文字列が期待されている所では
(+ "abc" "defgh" "ij") -> "abcdefghij"
リストが期待されている所では
(+ "abc" "defgh" "ij") -> ("abc" "defgh" "ij")
になるとか?
439:デフォルトの名無しさん
08/02/03 14:35:20
>>437
俺Lispはかなり初期からそれやってるw
440:デフォルトの名無しさん
08/02/03 16:42:47
Arcって文字列とリストを同じような感覚で操作できるみたいだ。
arc> (+ '(a b) '(c d))
(a b c d)
arc> (+ '(a b) '(c d))
(a b c d)
arc> (+ "ab" "cd")
"abcd"
arc> (rem 'b '(a b c d))
(a c d)
arc> (rem #\b "abcd")
"acd"
arc>
remはremoveかね。
441:デフォルトの名無しさん
08/02/03 16:45:05
マッカーシー博士がLispを開発した時の気分しだいではこうだったのかもしれない。
(def test (n)
(if (> n 90) 'AA
(> n 80) 'A
(> n 70) 'B
(> n 60) 'C
'D))
シンプルなcond節でifだけで用が足りるからいいかも
442:デフォルトの名無しさん
08/02/03 16:54:15
エディタの自動インデント規則もArc用をちゃんと作りたくなるな。
if とか with とか、2個単位でインデントしたくなる。
(if
c1
e1
c2
e2)
443:デフォルトの名無しさん
08/02/03 17:37:41
なんかキモ系のAAにしか見えねえw
444:デフォルトの名無しさん
08/02/03 17:40:58
ラムダ算法とかYコンピネータとかの概念を全く知らない
状態でLittle SchemerとかでSchemeを勉強しても
理解できますか?
445:デフォルトの名無しさん
08/02/03 17:43:17
知らないことを開き直るべきではないけど、
とりあえず「知らなきゃどこにも進めない」ってものではないよ。
446:デフォルトの名無しさん
08/02/03 17:51:47
>>>444
全く問題ないよ。
Schemerになりなさい。
447:デフォルトの名無しさん
08/02/03 17:57:42
>>444
読めるよ。全10章中、Yコンビネータが出てくるのは第9章だけ。
これを理解するのに "To Mock A Mockingbird" が巻末で推奨されている。
"Litle Schemer" は習うより慣れろの精神で書かれているので読みやすい。
448:デフォルトの名無しさん
08/02/03 18:02:35
Yコンビネータなんて見りゃどういう事か直感で判るだろ
449:デフォルトの名無しさん
08/02/03 18:03:57
Arcはハッシュが標準装備か。連想リストを使わないでこれもいいかも。
arc> (= var (table))
#hash()
arc> var
#hash()
arc> (= (var 'x) 'x1)
x1
arc> (= (var 'y) 'y1)
y1
arc> var
#hash((y . y1) (x . x1))
arc> (var 'x)
x1
arc>
450:デフォルトの名無しさん
08/02/03 18:11:41
この辺りはCommonLisp風なんだね。
arc> (cdr '())
nil
arc> (car '())
nil
arc> (is '() nil)
t
arc>
451:デフォルトの名無しさん
08/02/03 18:14:59
こんなのもあるんだ~。
arc> (type "a")
string
arc> (type 1)
int
arc> (type 0.1)
num
arc> (type 'a)
sym
arc> (type '(a))
cons
arc> (type 1+1i)
num
arc>
452:デフォルトの名無しさん
08/02/03 18:19:04
>>445
>>446
>>447
>>448
アドバイスありがとうございます。
C++ばかりやっていて数学的基礎もあまりなく
どうかと思ってたのですが、まずはSchemerシリーズ
3冊を一読してから考えます。
453:デフォルトの名無しさん
08/02/04 00:54:10
一言語を学び始めるのに入門書を3冊読む?気軽にやれよ
454:デフォルトの名無しさん
08/02/04 04:14:49
The Little ~
URLリンク(www.crockford.com)
455:デフォルトの名無しさん
08/02/04 12:54:21
Arcのリストと文字列って?
arc> (subst 'a '(b) '(a b c))
"aac"
arc> (subst "a" "b" "abc")
"aac"
arc>
456:デフォルトの名無しさん
08/02/04 13:26:47
【普通のやつらの】 Arc Language 0 【上を行け】
スレリンク(tech板)
ついカッとして立ててみた。悪気はなかった。たとえスレが寂れても
後悔するつもりはない。
457:デフォルトの名無しさん
08/02/05 15:07:50
正直サブタイトルは要らなかったと思う
458:デフォルトの名無しさん
08/02/05 15:15:24
荒し呼んでるようなもんだもんなw
459:デフォルトの名無しさん
08/02/05 16:24:01
ま、スレが盛り上がるのを期待してるよ。おれたちの期待の
斜め上を行ってくれ。w
460:デフォルトの名無しさん
08/02/05 18:29:14
アルファブロガー隔離スレだろ
461:デフォルトの名無しさん
08/02/05 18:55:28
たとえ荒氏でも廃れるよりはマシということかw
Arc自体、ちゃんとしたモノになるまでまだ何年かは時間が掛かるだろう。
462:デフォルトの名無しさん
08/02/05 19:06:57
現役処理系で動く3-Lispの系統の実装ってありますか?
3-Schemeとか、3-Arcでもいいです。
; Smithの元の実装はMacLISPでした。
463:デフォルトの名無しさん
08/02/05 19:12:07
HtDP (How to Design Programs) って読んだ人いる?
URLリンク(www.htdp.org)
これどんなもんなんかな?
464:デフォルトの名無しさん
08/02/05 21:45:46
>>463
お前が読めばいいだろ。
465:デフォルトの名無しさん
08/02/06 09:32:49
>>464
そんないじわるな事言わないで><
466:デフォルトの名無しさん
08/02/06 10:17:02
何かと思ったら全部オンラインで読めるじゃん
読むぐらい自分でしろよ
467:デフォルトの名無しさん
08/02/06 10:20:38
つーか読みもしないで損得勘定してるのが気に入らんな。
消え失せろ。
468:デフォルトの名無しさん
08/02/06 12:18:18
>>467
偉そうな事言わないで><
ネットで吠える事しかできない低能くん。
469:デフォルトの名無しさん
08/02/06 12:30:13
自爆かよ
470:デフォルトの名無しさん
08/02/06 15:22:53
>< ←これがきもい
471:デフォルトの名無しさん
08/02/06 15:34:42
468 デフォルトの名無しさん [sage] Date:2008/02/06(水) 12:18:18 ID: Be:
>>468
偉そうな事言わないで><
ネットで吠える事しかできない低能くん。
472:デフォルトの名無しさん
08/02/06 19:30:38
>>463
以前ざっと読んだよ。
いきあたりばったりでしかプログラム書いたことのない無能向け教科書。
473:デフォルトの名無しさん
08/02/06 20:25:59
>472
つまりごく当たり前の事しか書いてないと言いたいわけか。
474:デフォルトの名無しさん
08/02/06 21:07:29
>>473
思考の段取りもつけられないようなバカも
少なからず存在しているのが世の中なわけで。
プログラミング上の概念については何がとりあげられているかは
目次見ればわかる。あとはデザイン・レシピの部分を拾って
ざっと流せば自分にとって読む必要のあるなしは判断できるだろう。
475:デフォルトの名無しさん
08/02/06 22:03:52
>>474
> 思考の段取りもつけられないようなバカも
> 少なからず存在しているのが世の中なわけで。
ちゃいます!!!
"少なからず"ではなく, 彼らの方が多数なんです, 現場に行けば...
476:デフォルトの名無しさん
08/02/06 22:31:14
現場に恵まれていませんね
477:デフォルトの名無しさん
08/02/06 23:02:29
... まあええやん。次いこ。
478:デフォルトの名無しさん
08/02/07 00:23:25
>>474
絡む気は毛頭ないですが、
ざっと読むだけで必要、不必要が分かるってのは
言い過ぎな気がします
ざっと見た人が不必要だと思ったものでも、じっくり
読めばありな部分とかはないもんですかね?
基本的に安いものじゃないんで本はじっくり見る派です。
479:デフォルトの名無しさん
08/02/07 02:41:50
関数型言語マニアのための論文紹介3:FelleisenとSICPとHTDP
URLリンク(d.hatena.ne.jp)
SICP目次
URLリンク(d.hatena.ne.jp)
HtDP目次
URLリンク(d.hatena.ne.jp)
HtDPはSICPより易しいです。
でも「計算機プログラムの構造と解釈」を読み通す根性がないなら
英語アレルギーを乗り越えてHtDPを読むのはなおさら無理です。
素直に「計算機プログラムの構造と解釈」を買って熟読しましょう。
480:デフォルトの名無しさん
08/02/07 05:48:04
どこかのスレにあった紹介だと思うが、
よほどの超絶英語コンプレックスだったんだな、それ書いたやつ。
481:デフォルトの名無しさん
08/02/07 07:51:12
>>478
ママに読んでもらえバカ。
482:デフォルトの名無しさん
08/02/07 08:00:49
じゃあ僕はコンピューターおばあちゃんに読んでもらいます。
483:デフォルトの名無しさん
08/02/07 12:51:51
guileはutf-8で日本語は使えないのでしょうか?
484:デフォルトの名無しさん
08/02/07 20:44:33
>>483
> guileはutf-8で日本語は使えないのでしょうか?
guile> (let ((s "日本語表示テストです."))
(string? s))
#t
guile>
485:デフォルトの名無しさん
08/02/07 20:51:57
日本語が使えるが何を意味してるかによる
486:デフォルトの名無しさん
08/02/07 21:12:09
まあ、日本語なんてこっちじゃ乞食でも気違いでも使ってるからね
487:デフォルトの名無しさん
08/02/07 22:59:39
gosh> (define (日本語が使えますか?) #t)
日本語が使えますか?
gosh> (日本語が使えますか?)
#t
488:デフォルトの名無しさん
08/02/07 23:27:38
日本語schemeキタコレ
489:デフォルトの名無しさん
08/02/08 00:20:27
全角カッコのあつかいはどうなるのでしょうか
490:デフォルトの名無しさん
08/02/08 01:27:27
全角なんてありませんよw
491:デフォルトの名無しさん
08/02/08 01:34:32
lispとかschemeとかやってるとチョコレートもらえないって
先輩が言ったんですけど、ほんまですか?
492:デフォルトの名無しさん
08/02/08 01:36:14
あ、それは本当です。でも人に喋っちゃ駄目だよ。
493:デフォルトの名無しさん
08/02/08 01:38:25
いつもの倍でお得になります。
494:デフォルトの名無しさん
08/02/08 01:47:57
チョコレートもらえないからlispとかschemeとかやって
せつないきもちをまぎらわすんだよ
495:デフォルトの名無しさん
08/02/08 06:09:52
チョコレートなんてLispで書けばいいだろ。
496:デフォルトの名無しさん
08/02/08 08:51:30
((lambda (choco) (choco choco)) (lambda (choco) (choco choco)))
497:デフォルトの名無しさん
08/02/08 10:33:35
guileでUTF-8で
guile> (define hoge "ほげほげ")
guile> hoge
"?\x81??\x81\x92?\x81??\x81\x92"
guile> (string-length hoge)
12
となってしまうけど、4にはならないの?
498:デフォルトの名無しさん
08/02/08 15:26:02
>>497
guileではcharacterは8bitだったはず
(integer->char 256)はエラー
バイナリデータと文字が混在するファイルを扱う場合は
こっちのほうが割り切って使えるからいい
499:デフォルトの名無しさん
08/02/08 16:31:45
ちょうどいいからお前らにUTF-8の文字数を数える
プログラムでも書いてもらおうかな。
【問題】上のGuileのような文字列のバイト列を
UTF-8とみなし、その文字数を返す関数を書け。
500:デフォルトの名無しさん
08/02/08 16:44:49
宿題スレでLispの質問しちゃいけないわけじゃないでしょ?
501:デフォルトの名無しさん
08/02/08 17:15:55
(define (utf8len str)
__(begin (define (follow-char? c)
____________(char<=? #\200 c #\277)))
__(and (string? str)
_______(let ((strlen (string-length str)))
_________(let loop ((acc 0)
____________________(i 0))
___________(cond ((= i strlen) acc)
_________________((char<=? #\0
___________________________(string-ref str i)
___________________________#\177)
__________________(loop (+ acc 1) (+ i 1)))
_________________((and (< (+ i 1) strlen)
_______________________(char<=? #\300
________________________________(string-ref str i)
________________________________#\337)
_______________________(follow-char? (string-ref str (+ i 1))))
502:デフォルトの名無しさん
08/02/08 17:19:21
続きが書き込めない
503:デフォルトの名無しさん
08/02/08 17:52:54
;; SICP挫折中の見習いです
(define (utf8-string-length s)
(define (first-byte->length b)
(define byte (char->integer b))
(cond ((<= #x00 byte #xbf) 1)
((<= #xc0 byte #xdf) 2)
((<= #xe0 byte #xef) 3)
((<= #xf0 byte #xf7) 4)
((<= #xf8 byte #xfb) 5)
((<= #xfc byte #xfd) 6)))
(define strlen (string-length s))
(define (strlen-iter index len)
(if (<= strlen index) len
(strlen-iter (+ index (first-byte->length (string-ref s index)))
(+ len 1))))
(strlen-iter 0 0))
504:デフォルトの名無しさん
08/02/08 17:53:58
__(loop (+ acc 1) (+ i 2)))
_((and (< (+ i 2) strlen)
_______(char<=? #\340
________(string-ref str i)
________________#\357)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2))))
__(loop (+ acc 1) (+ i 3)))
_((and (< (+ i 3) strlen)
_______(char<=? #\360
________________(string-ref str i)
________________#\367)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2)))
_______(follow-char? (string-ref str (+ i 3))))
__(loop (+ acc 1) (+ i 4)))
_(else #f))))))
これならどうだ
505:デフォルトの名無しさん
08/02/09 21:41:09
Windows Vistaなんだけど、
SBCL1.0.13よりLarcenyのほうが圧倒的に速いんだけど
こんなものなの?
506:デフォルトの名無しさん
08/02/09 21:52:43
コンパイルした?
507:デフォルトの名無しさん
08/02/09 22:12:21
>>462
3-Schemeと言っていい、Brownと後継Bloodはみつからず、
その代わり米澤研のRScheme, Blackが見つかりました。
RSchemeは論文に全コードが、Blackは米澤研のWebサーバ:/pub/black
508:デフォルトの名無しさん
08/02/09 23:38:58
ウィンドウスxpで使えて最初から
hspみたいなライブラリがついてる実装って無い?
509:デフォルトの名無しさん
08/02/10 01:03:55
>>505
測定したプログラムや測定方法を書いてくれたら追試してくれる人が居るかもよ
510:デフォルトの名無しさん
08/02/10 01:06:52
Larcenyのほうが設計が10年以上新しいんだし、そんなもんじゃね。
>>508はPLT Schemeとかどうよ。
511:デフォルトの名無しさん
08/02/10 03:04:12
scsh という Scheme シェルを入れてみた。未だ起動もしてないけど。
URLリンク(www.scsh.net)
それだけ。
512:デフォルトの名無しさん
08/02/10 08:43:08
>>508
つ URLリンク(community.schemewiki.org)
つ URLリンク(community.schemewiki.org)
513:デフォルトの名無しさん
08/02/10 11:47:46
>>510
見てみます
ありがとうございました
514:デフォルトの名無しさん
08/02/10 22:14:31
>>505
Larceny めちゃくちゃ速いんで驚いたよ。
主要開発メンバーってLight Ship MacScheme 作ってた人でしょ。
この処理系、かなり期待。
515:デフォルトの名無しさん
08/02/10 22:31:00
いやだからコンパイラで比べてるのかインタプリタで比べてるのかくらい晒してくれよ
516:デフォルトの名無しさん
08/02/10 22:47:46
> (time (tak 12 6 0))
Words allocated: 0
Words reclaimed: 0
Elapsed time...: 156 ms (User: 156 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
12
compile-file にしてもしなくても同じ結果。読み込んだ時点で
コンパイル済みなんじゃないかな。
記憶違いかもしれないけどアセンブラがどうとかってHPにあったような。
かなり最適化をしているのかも。
517:デフォルトの名無しさん
08/02/10 23:00:19
現在のLisp処理系のコンパイラってどんな仕組みになってんの?
Lisp1.5の時代はLAPを使ってたけど、今はVMなんかね?
Arcのコード読みでああいう簡単なのはおおよそわかったけど、
本格的なのってどういう仕組みをとってるんだろう。
518:デフォルトの名無しさん
08/02/10 23:05:01
ネイティブ吐くのもいるし、
独自じゃなくて、JVMをターゲットにするのもある。
519:デフォルトの名無しさん
08/02/10 23:58:11
最近ではC言語のソースを吐くってのは流行らんのかね?
あれ、良いと思うんだけどな。
520:デフォルトの名無しさん
08/02/11 00:03:19
C言語のソースを吐かれても人間が可読でなければ意味がない。
521:デフォルトの名無しさん
08/02/11 00:04:18
yaccとかlexの立場がないな
522:デフォルトの名無しさん
08/02/11 00:04:51
いや、新しいCPUの最適化とかをC言語コンパイラに任す事ができるw。
523:デフォルトの名無しさん
08/02/11 00:30:25
SBCLのManualページを見たけどよくわからない
・・・俺が馬鹿なのは知ってるから。
SBCLのコンパイルから実行までの手順をご教授願いたい。
正直言って
初めてLISPをインストールして
「どんなのかなあ?使ってみようかなあ」と思っても
CやJAVAのように簡単に入口の手順が調べられないんですよ。
「そんな厨はLISP使うな!」は無しでお願いします。
524:デフォルトの名無しさん
08/02/11 00:44:41
「SBCLをコンパイルする」のか「SBCLでコンパイルする」のかで、話が変わると思うよ
525:デフォルトの名無しさん
08/02/11 00:47:36
>523
で、プラットフォームは何?
Mac,Linux,Windows?
初めてでWindows上ならxyzzy上のLispなんかの方が手近だと思うが。
Meadowだ、slimeだ、Emacsだとかは面倒くさいでしょ?
526:デフォルトの名無しさん
08/02/11 01:01:22
xyzzyは独自仕様だからお勧めしにくいな。俺のお薦めはCLISP。
527:デフォルトの名無しさん
08/02/11 01:08:39
1. LispWorks Personal Edition をダウンロードする
2. インストールする
3. New File でファイルを編集
4. コンパイルボタンを押す
5. REPL から呼び出す
528:デフォルトの名無しさん
08/02/11 01:09:31
って言うか、何のために「SBCLのコンパイルから実行」したいの?
それによっても答えが変わると思う
529:デフォルトの名無しさん
08/02/11 01:13:14
i386とpowerpc以外のCPU
LinuxとFreeBSDとMacOSX以外のUnixLikeOSで動かせて
Gauche並の軽さ&速さとは言わないけど
Pythonくらいの軽さ&速さはあるCL処理系ってありますか?
SchemeでもGaucheより速い処理系も軽い処理系もあるけど
速さと軽さのバランスが一番いいのはやはりGauche
コンパイルすればCLのがチョッ速だと思うけど重い処理系が多いように思えます
530:デフォルトの名無しさん
08/02/11 01:16:48
>CやJAVAのように簡単に入口の手順が調べられない
と書いてあるから、SBCL 自体のコンパイルをしたい訳ではないと予想。
cc や javac を使う様な感じで、コンパイル済みファイル(fasl?)を作成して
それをロード→実行する方法を聞いているんじゃないかしら。
すまんが俺は最近 SBCL を触っていないので、やり方が分からん。
531:デフォルトの名無しさん
08/02/11 01:18:32
>>529
CLISP
532:デフォルトの名無しさん
08/02/11 01:22:00
わざわざ答えて頂いたのに申し訳ないのですが
CLISPの最近のverはi386-OpenBSDでも動かないのです
(ビルドは出来るけどsaveinitmem:executable Tとか動かない)
それにちょっと遅すぎます
ECLのほうが速いくらいです
533:デフォルトの名無しさん
08/02/11 01:23:15
>524、525
すみません説明不足で
要するに先に出てた、SBCL VS Larceny を
Tak関数を使ってやりたいのです。
OS:Windows Vista
LISP:SBCL1.0.13
でTak関数がtak.clというファイル名であるとして
(compile-file "tak.cl")
とすれば、tak.fasl ファイルができるのですが・・・
ここから先が・・・orz
でもコンパイルしたとしても
実行時にSBCL起動して
(time (tak 12 6 0))
なんてすると意味の無いような気がするし、
"(time)"の部分も当初の tak.cl に入れて
コンパイルすればいいのでしょうが、
そこまで頭が回らないので助けていただこうかと。
534:デフォルトの名無しさん
08/02/11 01:23:53
そんな無理して CL 使わんでも…。
今度は CLISP より ○○ のほうが優れているように思えます!! とか言いそうだな…。
無理せず Gauche 使えばいいじゃん。
535:デフォルトの名無しさん
08/02/11 01:25:40
>>532
そういう事は先に書かないと駄目だよ
ECL はネイティブコンパイルするから CLISP よりも速くて当然なんじゃないの?
536:デフォルトの名無しさん
08/02/11 01:27:38
ECLは速さはまあ及第点なのですが
重すぎるのが難点
KCLファミリーでありながらCLtl2な所とか
長所もいろいろあるのですが
(*package*がCOMMON-LISP-USERだからCLtl2とみなしてもいいんですよね?)
537:デフォルトの名無しさん
08/02/11 01:29:18
Larceny が勝利!!よって Scheme >>> CL !!! とかやりだしそうだな…。
まぁ、10年以上後発なんだし結果は見えているような。
538:デフォルトの名無しさん
08/02/11 01:31:25
元気な奴だな。マニュアルも読まれずに評価されるCLコンパイラがちょっとだけ気の毒
539:529=532=536
08/02/11 01:43:40
普段はSchemerですが
CLにも敬意を表してちゃんと使えるようになりたいと考えております
多分に主観的ですが
エレガントさはSchemeに分が
それ以外の大部分はCLに分があると思っています
LuaみたいにAnsiCさえあれば動くぜ!みたいな処理系がCLにもSchemeにもほしいものです
540:デフォルトの名無しさん
08/02/11 02:09:14
>>539
GC等のことを考えると速度的なペナルティ無しに完全にANSI-Cの範囲で記述するのは難しい
んじゃないかな。遅い処理系なら作れると思うけど、速くするには何かズルしないと。w
541:デフォルトの名無しさん
08/02/11 02:09:25
(define (valentine choco)
(if (zero? choco)
(display "お前は既に死んでいる")
(display "カエルchokochoko3chokochoko/n合わせてchokochoko6chokochoko")))
542:デフォルトの名無しさん
08/02/11 02:11:41
>>533
(load "tak.fasl")
543:デフォルトの名無しさん
08/02/11 02:37:04
Gaucheの本ってまだぁ?チンチン
544:デフォルトの名無しさん
08/02/11 04:26:33
Common Lispに敬意を払いたいといいつつ
takを選んでしかも最適化宣言無し…意図が無いとしたら天才かもしれん。
haskell使えば?
545:デフォルトの名無しさん
08/02/11 04:46:57
tak の人とは別人じゃないかな?
俺も Schemer が余興でやるなら CL より Haskell が良いと思う
546:デフォルトの名無しさん
08/02/11 17:38:54
URLリンク(lispuser.net)
これを参考にしてSchemeでScheme処理系を書いている。
↑これはわかりやすくて短くていいわ。
それと「Schemeによる記号処理入門」森北出版
547:デフォルトの名無しさん
08/02/11 18:03:40
そこのサイトって誰が書いてるのかわからんし。
結局LISPユーザー向けじゃなくてACLユーザー向けのサイトじゃん。
読んでいて ム カ つ く んですよね。
548:デフォルトの名無しさん
08/02/11 18:06:07
そこはCで書いてくれ
549:デフォルトの名無しさん
08/02/11 18:06:35
またバストダンジョンか
550:546
08/02/11 19:40:01
>>547
そこってなんかヤバイんかい?
しっかりしたまともな内容だと思うけど...
551:デフォルトの名無しさん
08/02/11 19:47:46
>>550
ごめんかんちがいかも。
でもなんか気色悪いわ。
552:デフォルトの名無しさん
08/02/11 19:49:08
>>547 は別のサイトと勘違いしてるっぽい感じがするけど
553:デフォルトの名無しさん
08/02/11 19:52:38
>>547
俺には一部のACL向けの記事があるだけのように思うが。
ちゅうか中の人はCLISPの開発者なんだし、誤解のような気もするけど。
554:547
08/02/11 20:55:01
>>553
そうなんだ?完全に勘違いですね。ごめんなさい>>All
555:デフォルトの名無しさん
08/02/11 21:08:43
日本語で PLT Scheme を説明してるサイトってどっかにありませんかね?
556:デフォルトの名無しさん
08/02/11 21:46:32
>>>555
Shiroさんとこのwilikiにある↓をいつも参考にしてるよ。
URLリンク(practical-scheme.net)
557:デフォルトの名無しさん
08/02/11 21:48:00
あ、まちがえた。MzじゃなくてDRの方だよね。
558:デフォルトの名無しさん
08/02/11 23:00:04
Drに入ってる言語のオプションがよくわからないんです><
559:555
08/02/11 23:13:00
>>557
PLT Scheme で GUI を作りたいと考えています。
560:デフォルトの名無しさん
08/02/11 23:27:19
>>559
Drは使ったことがないのでよくわからないけど
MrEDと連携してグラフィクスなんかできたんじゃ
なかったっけ。
561:デフォルトの名無しさん
08/02/12 19:14:40
HaskellにはLispのような優秀なマクロがないので埋め込み言語を実装しにくいって本当かね?
562:デフォルトの名無しさん
08/02/12 19:45:30
マクロよりS式の方が大きいでしょ。
S式はDSLのプロトタイプに最適だもん。
Lisp1.5の時代から、俺eval、俺apply作れたんだから。
563:デフォルトの名無しさん
08/02/12 19:47:36
一方、しっかりした仕様のある言語なら、
pugsの例を見るまでもなくHaskellも結構いける。
宣言型のコード書きやすいから。
Prologはどっか行っちゃった。