トップページ⇒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
0175デフォルトの名無しさん2008/01/18(金) 12:49:33
いつか仕事(個人的なutilじゃなく)で使えればなーと思いつつ、スキルアップのため
0176デフォルトの名無しさん2008/01/18(金) 12:58:20
黒田さんとかshiroさんレベルになれれば、
「大丈夫俺に任せろ」で仕事にできちゃうんだろなぁ
0177デフォルトの名無しさん2008/01/18(金) 13:15:20
普段は普通の手続き型言語やね、でも強いて言えば
再帰が必要な処理だけは手続き型言語で書こうとすると悩むから
一旦Schemeで下書きしてから手続き型に直す
0178デフォルトの名無しさん2008/01/18(金) 13:17:57
>>173
むしろ、writeが再定義されてたらどうしよう、とか思い浮かべたほうがいい
0179デフォルトの名無しさん2008/01/18(金) 13:19:28
>>174
いろんな人がいると思うよ。画一的に考えるな。
俺は仕事で使ってるよ。Common Lispだけど。
0180デフォルトの名無しさん2008/01/18(金) 22:00:49
>>174
本職はハードの設計だが, できあいのツールで機能が足りないときは
Lisp で書いてるな. C とか C++ で数値計算する気にならん.
0181デフォルトの名無しさん2008/01/18(金) 22:12:59
SIAGの廃れっプリが凄いw
0182デフォルトの名無しさん2008/01/18(金) 22:40:51
無職の人はいるのか?
0183デフォルトの名無しさん2008/01/18(金) 22:55:04
Lispme使ってますがなにか?
0184デフォルトの名無しさん2008/01/19(土) 22:46:09
>>174
回路設計者(しかも、アナログ)だけど、趣味でschemeやってますよ。


0185デフォルトの名無しさん2008/01/19(土) 23:58:15
意外とハードウェア技術者が多いな。俺も昔、Lisp系でHDL(ハードウェア記述言語)を作ろうとか
考えたことがあるよ。
01861802008/01/20(日) 01:07:07
>>185 wwWwWW!おまえはなんて俺なんだ!!!
0187デフォルトの名無しさん2008/01/20(日) 01:07:34
Lisperなんだが、あまりにgaucheが素晴らしいのでschemerになろうと思う。
そこで質問なんだが、Lispだとnil==()なのにschemeだと#f != ()な理由ってあるの?
0188デフォルトの名無しさん2008/01/20(日) 01:11:05
>>187
おそらく宗教的な理由
0189デフォルトの名無しさん2008/01/20(日) 01:11:19
意味のない混同で、バグの温床となることがあるので、止めた。
0190デフォルトの名無しさん2008/01/20(日) 01:24:49
>>185-186
俺が多すぎ
0191デフォルトの名無しさん2008/01/20(日) 01:33:02
VHDLisp
0192デフォルトの名無しさん2008/01/20(日) 01:45:17
>>26-154
Little Schemer ⇒ ゾウさんの絵 ⇒ 繰り返しはどこまで続くのか? ⇒ Yコンビネータ ⇒ To Mock A Mockingbird ⇒ ゲーデルの定理
読み返してみたらホントにそう書いてあった。すげー。
0193デフォルトの名無しさん2008/01/20(日) 08:01:34
>>187
どんな所がいいですか?
0194デフォルトの名無しさん2008/01/20(日) 08:28:45
SICPにネットリスト記述処理系とかあるし
0195デフォルトの名無しさん2008/01/20(日) 09:12:55
おれの場合、elispと「リスト遊び」でリスト便利、って気付いて、
schemeを知ってやべぇ美しすぎる!とか思った。
でも今は仕事でCommonLisp(ACL)を少し使ってる。バカでかい仕様も、
今では信頼の元。CLは愛してるというより尊敬の対象。
0196デフォルトの名無しさん2008/01/20(日) 13:39:49
おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ

配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
0197デフォルトの名無しさん2008/01/20(日) 13:42:24
そういう発想は無かったな。
使い分けるのが馬鹿らしかったら使い分けなきゃいいんじゃないか?w
0198デフォルトの名無しさん2008/01/20(日) 13:47:21
>>196
> おまえらループと再帰を使い分けるのは馬鹿らしいと思ってるだろ
うん!

> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい
あんまおもわねぇなぁ
assoc と hash …
0199デフォルトの名無しさん2008/01/20(日) 14:08:27
>>198
前スレでassocの書き方を色々とやってたな。4つぐらいあった希ガス。
でも使い分けるという感じではなかった。
0200デフォルトの名無しさん2008/01/20(日) 15:09:18
> 配列と構造体とハッシュを使い分けるのも馬鹿らしいと思うことはないかい

JavaScriptなんかはそこらへんルーズなんで楽ちんではある
0201デフォルトの名無しさん2008/01/20(日) 15:15:18
Lispでも「俺はハッシュしか使わん」というのは勝手なんだが
問題はキーを比較するときに多態性がないと不便ってことかな
0202デフォルトの名無しさん2008/01/20(日) 16:06:12
>>196
Arcってそゆんじゃなかったっけ? alistとhashを抽象化したdbって。

>>200
久しぶりに書くと配列をiterateするのにfor(var in ary)で書いてしまって??となる
02031872008/01/20(日) 17:38:21
>>193
まずschemeで((if #t + -) 1 2)がでできることに感動
まだほとんど触ってないけどgaucheは
・速い(と聞いている)
・バインディングが書きやすい(ように見える)
・スレッドが使える
・dotimes, whileとかあるし、ライブラリが使いやすそう
defunとかmapcarなくて戸惑ってるけど、これから勉強します
0204デフォルトの名無しさん2008/01/20(日) 18:44:45
>203
define
map
0205デフォルトの名無しさん2008/01/20(日) 19:07:12
hash と assoc は計算量がちがうよね。
用途に合わせて使い分けるもんじゃないの?
0206デフォルトの名無しさん2008/01/20(日) 19:18:13
まだconsのところだけど、Little Schemer面白くなってきた。
再帰は苦手だけど、この本の再帰の妥当性チェックの仕方の
説明が良かった。コツを掴めそう。
0207デフォルトの名無しさん2008/01/20(日) 19:27:45
>>205
> 用途に合わせて使い分けるもんじゃないの?
どの辺で切り分けるかでいつも迷う.
0208デフォルトの名無しさん2008/01/20(日) 19:32:14
大きいときはハッシュテーブル。
後で追加したものを優先したくて、一発である時点へ戻したいという場合は連想リスト。
どちらでもなければ、どちらでもいい。w
0209デフォルトの名無しさん2008/01/20(日) 19:33:08
http://www.amazon.com/gp/product/0262541483/

The Scheme Programming Language, 3rd Edition

米国では評価高いみたいですが読んだ人どうですか?
0210デフォルトの名無しさん2008/01/20(日) 19:54:09
>>208
> どちらでもなければ、どちらでもいい。w
ここだろ? >>207 が頭抱え込んでるのは…
0211デフォルトの名無しさん2008/01/20(日) 19:57:08
小さいなら連想リストでいいべ
0212デフォルトの名無しさん2008/01/20(日) 20:04:36
CやC++なんか知らねえ。
おれはscheme一筋って人いますか?
0213デフォルトの名無しさん2008/01/20(日) 20:16:13
>>212
さすがに高級アセンブラであるところの C を知らねぇって奴はいないんじゃねぇの?
C++ とはあまりお近づきになりたくないのは確だけど。W
0214デフォルトの名無しさん2008/01/20(日) 20:27:52
C知らないことはないけど、大規模なのは作ったことないorz
0215デフォルトの名無しさん2008/01/20(日) 20:51:28
>>209
巻末の仕様書。
0216デフォルトの名無しさん2008/01/20(日) 21:20:23
Scheme処理系を今時オールアセンブラで書こうっつう漢はいねぇべ
0217デフォルトの名無しさん2008/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だと怒られてしまいます。
0218デフォルトの名無しさん2008/01/20(日) 22:00:18
>>216
ツウジテナイw
0219デフォルトの名無しさん2008/01/20(日) 23:03:13
>>216
8008の頃からマイクロプロセッサさわってると衝動的にその罠に落ちる。

#でもarm7とかだと今でも有効なキガス
0220デフォルトの名無しさん2008/01/20(日) 23:21:24
話の流れが見えない
>>213 は (equal? C 高級アセンブラ) => #t
>>216 のは (equal? C アセンブラ) の評価結果はどうなるんだ?
0221デフォルトの名無しさん2008/01/20(日) 23:28:24
>>220 天使のオペレータ
amb!
amb!
0222デフォルトの名無しさん2008/01/20(日) 23:45:42
>>220
そうだと思う。>>216,>>219は妙だw
0223デフォルトの名無しさん2008/01/21(月) 00:30:54
>>217
どこから突っ込めばいいのか……
とりあえず val-list の引用符いらない
0224デフォルトの名無しさん2008/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しないと関数は呼び出せないよ。
0225デフォルトの名無しさん2008/01/21(月) 00:49:15
あ、list-aにクォート付いてたw
(my-foreach #'(lambda (x) (print x)) list-a)
0226デフォルトの名無しさん2008/01/21(月) 01:54:50
>>224
なるほど、勉強になりました。どうもです。
0227デフォルトの名無しさん2008/01/21(月) 02:57:56
>>209
全文公開されてるから読め。
0228デフォルトの名無しさん2008/01/21(月) 12:51:48
Schemeの「継続」ってのをわかりやすく教えてくれないか。

自分的にはドラえもんの「人生やり直し機」みたいなイメージをもっているんだが。
0229デフォルトの名無しさん2008/01/21(月) 13:33:40
なんでも継続 でググ(略
0230デフォルトの名無しさん2008/01/21(月) 14:16:46
>>228
的確なイメージですね
0231デフォルトの名無しさん2008/01/21(月) 15:16:38
まずは人生やり直し機の実装について語ろうか
0232デフォルトの名無しさん2008/01/21(月) 17:03:49
ファーストクラスの継続は、やり直せる。
ファーストクラスの人生は、やり直す必要がない。
0233デフォルトの名無しさん2008/01/21(月) 22:11:06
>>232
で、ファーストクラス未満の人生は、やり直しが効かないと…
0234デフォルトの名無しさん2008/01/21(月) 22:44:04
人生は不可逆だからやり直しはできないだろうけど、
出直しならできるんじゃない。本人は変われないが環境を変えることはできる。

Schemeだと昔の環境を保存しておいて復元した環境に飛び込んでいくんでないの。
0235デフォルトの名無しさん2008/01/21(月) 23:38:56
>>234
人生に関しては逆だよ、変わるのは環境じゃなく自分。
乱暴に言えば自分しか変われる要素は無い。
0236デフォルトの名無しさん2008/01/21(月) 23:40:27
人生の話はスレ違いですよ
0237デフォルトの名無しさん2008/01/22(火) 01:22:28
lispは人生
0238デフォルトの名無しさん2008/01/22(火) 11:29:02
Schemeは哲学
0239デフォルトの名無しさん2008/01/22(火) 21:09:16
C#は成功
0240デフォルトの名無しさん2008/01/22(火) 21:26:31
Cは仕事
0241デフォルトの名無しさん2008/01/22(火) 21:41:12
国歌がないぞ
0242デフォルトの名無しさん2008/01/22(火) 21:50:38
国家はコッカだけに、
「静かな湖畔の...」と対になる曲が必要だな。
0243デフォルトの名無しさん2008/01/23(水) 08:33:14
>>176
>黒田さんとかshiroさんレベルになれれば、

shiroさんはコードとか読んでも本当に凄いと思うんだけど、
黒田さんって凄いの? どっかで氏が書いたコード読めますか?
どんだけ凄いのか是非読んでみたい。
話だけ聞いてると名物*ANSI* CL厨親父にしか思えない人が多い気がする。
0244デフォルトの名無しさん2008/01/23(水) 08:34:53
gauche で cons, list に nil 渡すとエラーになる。
これは gauche の仕様っていう認識で OK?
0245デフォルトの名無しさん2008/01/23(水) 08:40:36
schemeにnilなんてあったっけ?
0246デフォルトの名無しさん2008/01/23(水) 09:49:23
>>245
そもそもないのね。
SICP に書いてあったから、あるのかと思った。
0247デフォルトの名無しさん2008/01/23(水) 12:01:03
(define nil '())
0248デフォルトの名無しさん2008/01/23(水) 14:03:19
'()や#'(lambda ...)のクオートは省略できる?
というか何故クオートつけるのか分からない…
0249デフォルトの名無しさん2008/01/23(水) 15:10:53
前者については
Schemeの場合は()は自己評価的でないからクォートしなければならないとR5RSに明記されている
空リストはアトムだから自己評価的だという考え方もできるけど
リストだからクォートしなければならないとも考えられる。
個人的には自己評価的のほうが自然だと思えるけど。
CLなら自己評価的だからクォートしなくてもいい。

後者については
CLの場合はクォートしない(lambda ...)はlambdaマクロとして評価されて
#'(lambda ...)に展開される。(らしい。CLはよく知らない)

#(...)もCLだと自己評価的、Schemeだとクォートしなければならないけど
自己評価的でいいのに。
0250デフォルトの名無しさん2008/01/23(水) 16:39:52
なるほどありがとう

色々弄ってたら酷い例を見つけてしまった
(flet ((function (x) x)) #'(lambda (x) x))
0251デフォルトの名無しさん2008/01/23(水) 16:43:34
>>249
をいをい。#(...) は配列だぞ。#' でひとかたまり。
0252デフォルトの名無しさん2008/01/23(水) 18:57:53
>>251
違う話だからパラグラフを分けたのに><
0253デフォルトの名無しさん2008/01/23(水) 20:07:52
適当な接続詞も入れればよかったね
0254デフォルトの名無しさん2008/01/23(水) 20:25:28
ちなみにとか
0255デフォルトの名無しさん2008/01/23(水) 20:40:14
いや普通わかるだろw
0256デフォルトの名無しさん2008/01/23(水) 21:40:53
いまさらだけど”空リストはアトムだから自己評価的”って
シンボルの例があるから妙な主張でしたね

Schemeの場合#'が(syntax ...)に展開される処理系もあるってことも最初書いてたんだけど
さすがにこの話ではないと思って削って
ついでに#(...)の段落を足したんでした

どこかでCLにおける#()は(vector ...)に展開される入力マクロだからクォートしないって見たような気がするけど
違いますよね?
0257デフォルトの名無しさん2008/01/23(水) 21:46:40
CLにおける#()は入力マクロだけど、そういう話とは別に配列というもの
自体が自己評価的。つまり、何度 eval しても変わらない。
0258デフォルトの名無しさん2008/01/24(木) 00:44:50
>>243
トークショーでの黒田さんのツッコミ能力はすごいぞ。その点期待はずれなのが小飼弾だ。
0259デフォルトの名無しさん2008/01/24(木) 00:46:52
それって的確な突っ込みがビシバシ来る感じ?
0260デフォルトの名無しさん2008/01/24(木) 00:57:37
>>243最初の記事が煽りっぽかったからな。おれも最初は define-syntax しらねーのかよ、とか思ってたクチだが、俺がアホなだけだった…。
まぁ WiLiKi の Scheme:マクロ:CommonLispとの比較:意味論 で Shiro さんが「黒田さんに指摘されてはたと膝を打った次第です。」と書くくらいだからね。
「名物*ANSI* CL厨親父」ってのは初耳な単語だが、まずもうちょっと謙虚に相手の言う事を考える事も必要だと思うよ。
0261デフォルトの名無しさん2008/01/24(木) 01:05:38
そういや昔のスレでも感情むきだしな奴がいたな。Scheme派としては気持はわかなくもないけど
0262デフォルトの名無しさん2008/01/24(木) 01:33:28
WiLiKiを読んで思ったが
<expression>が<datum>であるべきだと仮定すると、
()がreadされた時点で自己評価的なオブジェクトになってるわけだから
やっぱり(quote ())というのは冗長だよなぁ
0263デフォルトの名無しさん2008/01/24(木) 01:40:22
今更な気もするけど、>>2の慶応SFCの
授業ページ(記号処理プログラミング)のリンク切れてるね。

とりあえず2007年度のもの。
http://web.sfc.keio.ac.jp/~t03596hh/lisp/wiki.cgi
0264デフォルトの名無しさん2008/01/24(木) 16:55:36
「入門CommonLisp 関数型4つの特徴とλ計算」(新納浩幸著)

この本、いいなぁ。8章からラムダ計算のこと、Lispによって具体的に説明している。
高橋正子先生の教えを受けたんだ。茨城に住んでいたらぜひとも聴講に行きたいところだ。
0265デフォルトの名無しさん2008/01/24(木) 17:11:47
>>264
そいつのブログ見てみろよ。ひどいぜ。
愚痴ばっかだし、自分の研究室の学生をバカにするようなことまでブログに書くんだぜ。
とても大学の教員とは思えない幼稚な記事ばかり。
0266デフォルトの名無しさん2008/01/24(木) 17:27:52
>>264

8章は良いですね。

http://book.mycom.co.jp/book/4-8399-2081-8/4-8399-2081-8.shtml
わかっていて買う人は良いですけど。
タイトル買いをしてCommon Lispの入門に使えないのは残念だと思います。

プログラムをCommon Lispで動くかどうかも試してないみたいですし。
02672642008/01/24(木) 17:42:27
>>265
>>266

なるほど〜、そうなんだ。

FXはちょっとだな...プロにかもられなきゃいいけど。
02682642008/01/24(木) 22:03:16
でも、本はなかなか良いと思う。
黄金比の固有値、固有ベクトルなんかにも触れていたり。
数学へのモチベーションも上がるし高校生なんかにはいいんじゃないかね。
0269デフォルトの名無しさん2008/01/24(木) 22:20:40
本人自演乙
0270デフォルトの名無しさん2008/01/24(木) 23:28:11
>>268
> 黄金比の固有値、固有ベクトルなんかにも触れていたり。
で, どのあたりが
> 数学へのモチベーション
につながるのかな?
0271デフォルトの名無しさん2008/01/25(金) 01:15:13
入門の入門には悪くないと思う
自分はλ計算についてこの本で知った
そしてすぐに高橋正子の計算論、グレアムのAnsi Common Lisp、ディヴィグのプログラミング言語Schemeを買ってどっぷりはまったクチ
でも「代入文は使わない」のところで(Cの)初期化と代入を混同してるような文章がある等
あちこち気になる点があるのも事実
それに高校生の「数学への」モチベーションにはならないと思う

だけどLispやλ計算を知るきっかけになってくれたことには感謝してる
(λ記法は知ってたけどλ算法は知らなかった)
0272デフォルトの名無しさん2008/01/25(金) 01:16:53
入計算λ門

ぱっと見わからないなw
ごめんなさい
0273デフォルトの名無しさん2008/01/25(金) 01:28:58
数学もプログラミングもほとんど素地なくても(←念のため俺のこと)
あの入門本から計算論ていけるもんですか?
0274デフォルトの名無しさん2008/01/25(金) 01:33:24
君の素地次第だからなんとも言えない
■ このスレッドは過去ログ倉庫に格納されています