1 名前:デフォルトの名無しさん mailto:sage [04/08/02 23:13] 過去スレ Part1: piza2.2ch.net/tech/kako/987/987169286.html Part2: pc.2ch.net/tech/kako/1002/10025/1002584344.html Part3: pc.2ch.net/tech/kako/1008/10082/1008220265.html Part4: pc.2ch.net/tech/kako/1016/10162/1016211619.html Part5: pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part6: pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part7: ruku.qp.tc/dat2ch/0311/20/1042167213.html Part8: pc2.2ch.net/tech/kako/1058/10582/1058263391.html Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/ 関連リンクは>>2-10 あたり
610 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:04:45] guileはGNU/LINUXならほぼ最初から入っているので、悪い選択じゃない。
611 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:08:11] >>610 貴様はguile使ったことあるのか? guile常用してるやついるの? 何に使うのか知らんが。
612 名前:デフォルトの名無しさん mailto:sage [04/10/04 02:27:24] scheme処理系一覧っぽいのが出てきたところでふと思い出したのですが、 リアルタイムで経緯をご存知の方がいたらYale Tがどんな末路を辿ったのか教えて いただきたく。全然話題にも上らないんでマイナーな本なんだろうと思うけど Slade先生のObject-Oriented Common LispでLisp使い始めたのでちと興味あり。
613 名前:デフォルトの名無しさん mailto:sage [04/10/04 07:46:46] >>581 > CLOSで引数を2つ取るメソッドを定義した場合、 > それ以降は引数の数が異なる同名のメソッドの定義(オーバーロード) > って不可能なのでしょうか? ラムダリスト(引数リスト)が合同(congruent)のメソッドは一つのGeneric function に共存できると規定されています。 required argumentの数が違う2つのラムダリストは合同とは言えません。 find-method, remove-method を駆使して、メソッドをgeneric functionからすべて削除 した後で、異なるラムダリストを持つgeneric functionを定義することは可能です。 (defmethod foo (a b &optional c)) としておくのはダメなの?
614 名前:デフォルトの名無しさん mailto:sage [04/10/04 08:30:22] 既に知ってるかもしれんが、T についての文書ってこれくらいしか知らんなあ。 Olin Shivers: History of T store.yahoo.com/paulgraham/thist.html
615 名前:デフォルトの名無しさん mailto:sage [04/10/04 23:28:40] >>307 UnCommon Web は継続渡しスタイルで書けてなかなかおもしろい。
616 名前:デフォルトの名無しさん [04/10/05 09:34:36] Schemeで次のようなリストを生成したいのですが、 どういう手続きになるのでしょうか。 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo l) (?)) => (list ("a" "b" "c" "c1")("a" "b" "c" "c2"))
617 名前:デフォルトの名無しさん mailto:sage [04/10/05 09:53:24] >>616 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo boo) `(list ,boo)) (foo l) => (list ("a" "b" ("c" "c1" "c2")))
618 名前:デフォルトの名無しさん mailto:sage [04/10/05 12:32:40] >>616 の質問も、>>617 の回答も、まったく意味がわからんのは俺だけ?
619 名前:デフォルトの名無しさん mailto:sage [04/10/05 13:07:29] 俺も分からん.
620 名前:デフォルトの名無しさん [04/10/05 13:39:12] >> 618,619 すいません。質問がまちがってました。やりたいことは、S式で表現 したディレクトリ構造から文字列を生成する、です。 (define l '("a" "b" ("c" "c1" "c2"))) (define (foo l) (?)) => ("a/" "a/b" "a/c/" "a/c/c1" "a/c/c2")
621 名前:デフォルトの名無しさん [04/10/05 13:43:39] >>620 リストはディレクトリ。そのリストの先頭がディレクトリ名。 リスト内の2番目以降がファイル名。としています。 (define l '("etc" "hosts" ("apache" "httpd.conf" "httpd.conf.bak")))
622 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 14:09:14] (define (foo l) (let loop ((dir "") (l l)) (if (list? l) (map (lambda (l) (loop (string-append dir (car l)) l)) (cdr l)) (string-append dir l)))) 今思いついたのはこんなの。
623 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 14:20:57] (define (foo l) (let loop ((dir "") (l l)) (if (list? l) (let ((dir (string-append dir (car l) "/"))) (cons dir (apply append (map (lambda (l) (loop dir l)) (cdr l))))) (list (string-append dir l)))))
624 名前:デフォルトの名無しさん mailto:sage [04/10/05 14:34:04] こんなもんか。(elisp) (defun foo (tree prefix) (cond ((null tree) nil) ((atom tree) (list (concat prefix tree))) (t (let ((new-prefix (concat prefix (car tree) "/"))) (apply #'append (list new-prefix) (mapcar #'(lambda (file) (foo file new-prefix)) (cdr tree))))))) と書いたところで、623 と被ってるじゃん。
625 名前:デフォルトの名無しさん [04/10/05 14:50:25] >> 622 623 Gaucheを使ってます。このコードは何で動くのでしょうか。 >> 624 elispで動きました。gaucheのコードではどうなるのでしょうか。
626 名前:デフォルトの名無しさん mailto:sage [04/10/05 15:14:42] >>625 やれやれ... それは君への宿題とするので来週までに解いてきたまえ。 それと、メール欄に sage と書きたまえ。
627 名前:デフォルトの名無しさん mailto:sage [04/10/05 15:20:19] なんとかできました。(なんでsageって必要なんですか?2chよく知らないんです) (define (foo tree prefix) (cond ((not(pair? tree)) (list (string-append prefix (x->string tree)))) (else (let ((new-prefix (string-append prefix (car tree) "/"))) (apply append (list new-prefix) (map (lambda (file) (foo file new-prefix)) (cdr tree)))))))
628 名前:(define (´∀`) 'マターリ) mailto:sage [04/10/05 16:52:09] (define (foo l) (define (f x) (string-append (car l) "/" x)) (define (g x) (if (list? x) (foo (cons (f (car x)) (cdr x))) (list (f x)))) (cons (f "") (apply append (map g (cdr l))))) >>625 全角スペースを取ればSCMで動いたよ。 622は失敗作。
629 名前:デフォルトの名無しさん mailto:sage [04/10/05 22:06:35] >>614 Tについてのドキュメントって異様に少ないですよね。普通に失敗したプロジェクトだったの でしょうか。 >>615 継続スタイルはUCWのウリみたいですが、フレームワークの他の部分はどんな感じですか? 副作用バリバリの手続きでHTML生成する設計になってたりしたらイヤかも。 beseのMLに開発者がポストしてましたが、パフォーマンスが気になるくらい遅いですか? もう少し詳細な使用感を語っていただけるとうれしいです。参考にするので。
630 名前:デフォルトの名無しさん mailto:sage [04/10/05 22:52:06] Tは失敗というか、誰もメンテしなかった・できなかった結果のような 386以降で書かれてたなら誰もが欲しかっただろうし
631 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:01:51] SICP を見ながら書いてみました。どうっすか? (define (foo l) (define (foo-iter result dir file) (if (eq? file '()) result (if (pair? (car file)) (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (append result (list next-dir)) next-dir (cdar file))) (foo-iter (append result (list (string-append dir (car file)))) dir (cdr file))))) (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
632 名前:631 mailto:sage [04/10/05 23:11:19] 間違ってた... かなり無理があるけど、これで当っているかな? (define (foo l) (define (foo-iter result dir file) (if (eq? file '()) result (if (pair? (car file)) (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (foo-iter (append result (list next-dir)) next-dir (cdar file)) dir (cdr file))) (foo-iter (append result (list (string-append dir (car file)))) dir (cdr file))))) (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
633 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:12:35] (let ((next-dir (string-append dir (caar file) "/"))) (foo-iter (append result (list next-dir)) next-dir (cdar file))) (car file)の処理はこれでいいんだろうけど(cdr file)の分の処理がない。
634 名前:デフォルトの名無しさん mailto:sage [04/10/05 23:17:32] (if (pair? (car file))の内側に(foo-iterがあるけど (foo-iterの内側に(if (pair? (car file))を持っていったほうが すっきりすると思う。
635 名前:631 mailto:sage [04/10/05 23:34:12] >> 633 まったく、おっしゃる通りでした。 >> 634 ...暫く考える... なるほど。なんとなくイメージできました。勉強になります。 他の人のと見比べるとやっぱり、map とかも勉強しないとだめですね。
636 名前:デフォルトの名無しさん mailto:sage [04/10/06 00:45:10] >>631 SICPの何ページですか。俺の勉強したいので。
637 名前:デフォルトの名無しさん mailto:sage [04/10/06 01:08:52] letrec fib=fn(n)return n<2?n:fib(n-1)+fib(n-2); fib(30); let fib2; fib2=fn(n)return n<2?n:fib2(n-1)+fib2(n-2); fib2(30); let fib3=fn(f,n)return n<2?n:f(f,n-1)+f(f,n-2); fib3(fib3,30);
638 名前:631 mailto:sage [04/10/06 01:26:58] >>636 そのものズバリ、というのはないのです。スマソ。 まだ LISP お勉強中なので教科書を見ながらでないと書けないと いうことでして。 全体の構造は P.19 の脚注にある factorial から fact-iter を 呼び出し、fact-iter の末尾再帰でループ、というのを真似ています。 foo の内部で関数 foo-iter を定義し、foo-iter の末尾再帰で 各ディレクトリエントリ毎に反復になっています。 fact-iter での product が foo-iter での result に対応します。 ややこしいのはディレクトリエントリ毎の処理(下の foo-entry)で、 エントリがファイルの場合はそのファイル名を result リストに加える だけなのですが、エントリがディレクトリの場合は result リストに 当該ディレクトリ以下の全てのファイル名を foo-iter で得て result リストに加える必要があります。 (define (foo l) (define (foo-entry result dir entry) (if (pair? entry) (let ((next-dir (string-append dir (car entry) "/"))) (foo-iter (list next-dir) next-dir (cdr entry))) (list (string-append dir entry)))) (define (foo-iter result dir files) (if (eq? files '()) result (foo-iter (append result (foo-entry result dir (car files))) dir (cdr files)))) ;; foo 本体 (let ((dir (string-append (car l) "/"))) (foo-iter (list dir) dir (cdr l))))
639 名前:デフォルトの名無しさん mailto:sage [04/10/06 01:59:12] foo-entryにresultはいらんな。
640 名前:デフォルトの名無しさん mailto:sage [04/10/06 02:05:50] foo 本体は(foo-entry 'hoge "" l)でいいな。
641 名前:デフォルトの名無しさん mailto:sage [04/10/06 14:10:36] >>638 結局 (append result (foo-entry result dir (car files))) で ディレクトリの深さ分スタック使うのだから 普通に再帰で書いたのに比べて何もメリットがなくない? -- (define (foo l) (if (string? l) (list l) (map (lambda (x) (string-append (car l) "/" x)) (cons "" (apply append (map foo (cdr l)))))))
642 名前:デフォルトの名無しさん mailto:sage [04/10/06 14:14:09] スペースの変換を忘れてたorz (define (foo l) (if (string? l) (list l) (map (lambda (x) (string-append (car l) "/" x)) (cons "" (apply append (map foo (cdr l)))))))
643 名前:631 mailto:sage [04/10/06 23:21:02] >>639 >>640 確かにそうですね。 >>641 メリットは特にないですね。 高階関数に馴染みがなくてあれ以外の実装を 思いつかなかったというのが真相だったりします。 やろうと思えば引数を増やして全て末尾再帰にできるかも しれませんが、やたら読みにくいソースになるでしょうね。
644 名前:デフォルトの名無しさん mailto:sage [04/10/07 23:52:58] 埋め込み言語の例というのが見てみたいんだけど, onlisp 以外にもなにかありませんか?
645 名前:デフォルトの名無しさん mailto:sage [04/10/08 00:21:31] >>644 これとか? ttp://www.shiro.dreamhost.com/scheme/vault/escm.html これはちょっと埋め込みとはちがうけど、S 式で HTML を書くというアプローチ ttp://cl-www.msi.co.jp/solutions/knowledge/ ttp://cl-www.msi.co.jp/solutions/knowledge/src
646 名前:645 mailto:sage [04/10/08 00:28:51] あ、ちがった、埋め込み言語ってそういう意味じゃないのね。 たとえば Lisp/Scheme で書かれた LR パーザジェネレータとか。 腐るほどありそうだな。今、さっと見つかったのはこんなの。 ttp://www.informatik.uni-freiburg.de/proglang/software/essence/doc/html/essence.html
647 名前:644 mailto:sage [04/10/08 01:00:10] >>646 ども. たしかに数はたくさんありそうなんですけど,うまく見つけられなくて. ここのリンク先のはソースもあるんで, schemeは使ったこと無いけど,本とにらめっこしながら読んでみます. 他にもいい例があればお願いします.
648 名前:デフォルトの名無しさん mailto:sage [04/10/08 01:13:04] LISPはちょっとかじった程度でよくわかってないのですが 質問させてください たとえば、Cでネットワークゲームを作るときに なんか処理したかったら、適当なデータ構造に 情報を埋め込んで送信して、受信側でデータを解釈→処理 とかなりますよね LISPのevalとかを使うと、プログラム本体がデータ構造もかねるから 動作させたい処理のS式をそのままリテラルとして送信して eval させて動作させてしまう、とか出来るんでしょうかね?
649 名前:デフォルトの名無しさん mailto:sage [04/10/08 01:54:37] Lisp に限らず、eval のある言語ならだいたいできるんじゃないのかな。
650 名前:デフォルトの名無しさん mailto:sage [04/10/08 02:08:45] eval is evil.
651 名前:デフォルトの名無しさん mailto:sage [04/10/08 07:33:19] でもそういう設計はよくないけどな。 ネットワーク越し(じゃなくても)で通信するときに相手から送られてくるものを 信用するというのは危険すぎる、ということを歴史は教えている。
652 名前:デフォルトの名無しさん mailto:sage [04/10/08 08:02:59] >>651 アプレットやSOAPと基本は同じでしょ? 用はセキュリティーの確保の仕方の問題だと思われ。
653 名前:デフォルトの名無しさん mailto:sage [04/10/08 09:32:56] >>648 evalも結局のところは、「受信側でデータを解釈→処理」してるだけ なんだけどね。「解釈→処理」の処理系が最初から用意されていると いうだけで。 汎用性が高い、本体と同じ言語で書ける、といった側面はそのまま メリットにもデメリットにもなるし。
654 名前:デフォルトの名無しさん mailto:sage [04/10/08 10:17:45] scheme の eval みたいに環境を指定できれば比較的手軽にセキュリティー確保できるね
655 名前:デフォルトの名無しさん mailto:sage [04/10/08 11:19:34] shiro さんの2004.10.07の文章で、 www.shiro.dreamhost.com/scheme/wiliki/wiliki2.cgi?Shiro 以前から Lisper としての適性に関係があるとして、時々話題になっている、 アスペルガー症候群・高機能自閉症の、簡易テストが紹介されている。 「平均は16.4ポイントで、 32ポイント以上のうち8割はautism related disorder だそうだ。私(shiroさん)は31ポイントだった」そうです。 www.wired.com/wired/archive/9.12/aqtest.html 自分でやってみたところ、慎重に回答したのに38ポイントだった。 しかし自分はヘタレ Schemer。ぜんぜんLisp能力に比例して無いじゃん…。
656 名前:デフォルトの名無しさん mailto:sage [04/10/08 12:14:36] このテスト、人間関係が苦手である、うまく行っていないという項目が多いな。 だから、 ・ Lisper として能力が高い →・他言語のプログラマとしても成功する →・周囲から尊敬を集める →・人間関係が良くなる →・このテストのスコアが下がる Lisper としての能力と、このテストのスコアには、こういう負の相関が 働いている気がするのだが。
657 名前:デフォルトの名無しさん mailto:sage [04/10/08 12:48:17] 心理テストに気休め以上の意味があるとは思わん。
658 名前:デフォルトの名無しさん mailto:sage [04/10/08 17:18:30] >>655 辞書引きながらやってみた。 24ポイント。 微妙に低くてチョトくやしい (w
659 名前:655 mailto:sage [04/10/08 18:40:48] 念のために言うけど、このテストはまったく当てにならないと思うよ。 『on Lisp』をいつまでも読み進められない私がそれは保証できる。 だけどなんとなく、ほかの人の点数も知りたいのう。 冷やかしでトライしてくれた人、他にもいたら書き込んでください。 おながいします。
660 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:26:09] 34。Lisp は好きだけど能力があるのかどうか……
661 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:27:47] emacs で動く scheme 実行環境はありますか?
662 名前:デフォルトの名無しさん mailto:sage [04/10/08 19:51:11] >>659 自閉症スペクトラムのテストとしてはそこそこいい出来だと思うが。 親戚男性自閉症率高の趣味の Schemer で、40点。非人間的なものへ のこだわりと認識能力で点数が出て、直接 Lisp と関係があるわけ じゃないから。 >>661 M-x run-scheme では不満?
663 名前:655 mailto:sage [04/10/08 20:08:14] >>662 自閉症スペクトラムについては、まあ同意です。 自閉症には私も興味を持って、いろいろ調べてみたことがあります。 「当てにならない」と書いたのは、Lisper としての能力と、このテストの関連。 >>661 思い切って guile-emacs を導入するのはどうだろう? 使ったことはないけれど。
664 名前:デフォルトの名無しさん mailto:sage [04/10/08 20:08:44] >>656 ・ Lisper として能力が高い →・でも別にプログラマとしては成功しない →・周囲からも尊敬は集めない →・人間関係も良くならない →・このテストのスコアが上がる Lisper としての能力と、このテストのスコアには、こういう正の相関が(以下略)
665 名前:デフォルトの名無しさん mailto:sage [04/10/08 20:41:18] 感O しないで AC になれなかったので, せめて lisp で AC に近づこうとしています. これが妥当な lisp の用途ということでよろしいでしょうか?
666 名前:655 mailto:sage [04/10/08 21:32:01] それにしても、当然のように「自閉症スペクトラム」という言葉を使う人も、 やはりこのスレにはいましたか。ポイントも私より上だし。 >>664 私はプログラマとして才能がなかったんで、Lisp を覚えて「普通の奴らに差をつけ」 ようとしたんだけど、Lisper としても才能がなかった。 しかも副作用として、それまでは面白かった Java がつまらなくなってしまった。 自分はダメだったけど、Lisperとして成功できる人なら、他の言語でも成功するのかと 思っていたのに、まさか逆だというのですか?! >>665 私は感電と Lisp の経験者だけど、現状は前述のとおり。 でもいいのだ。Lisp は面白いから。 きっと Lisp は、ただ面白いためにあるのだ。 才能はさておき、こういうことに興味を持つことには、自閉症傾向は関係が あるような気がしなくもない。
667 名前:デフォルトの名無しさん mailto:sage [04/10/08 21:59:47] ACよりもSEXPになりたい。
668 名前:デフォルトの名無しさん mailto:sage [04/10/08 22:13:30] この自閉症どもが
669 名前:デフォルトの名無しさん mailto:sage [04/10/08 23:13:31] >>667 sexp が t になるには 8 歳までに (ry
670 名前:デフォルトの名無しさん mailto:sage [04/10/08 23:36:39] ∩ ( ゚∀゚)彡 sexp!sexp! ⊂彡
671 名前:デフォルトの名無しさん mailto:sage [04/10/09 00:47:43] Lispの才能と体重は正比例の関係があるらしいよ
672 名前:デフォルトの名無しさん mailto:sage [04/10/09 00:51:02] >>671 デブヲタ発見。
673 名前:デフォルトの名無しさん mailto:sage [04/10/09 01:16:40] sexpと体重は正比例の関係があるらしいよ
674 名前:デフォルトの名無しさん [04/10/09 09:57:46] 「on Lisp」の日本語版があるって聞いたんだがその本の日本語名ってなに? 'on' も 'Lisp'も一般的すぎて検索してもよくわからない・・・ 本じゃなくてどこかのWebページなのか?
675 名前:デフォルトの名無しさん mailto:sage [04/10/09 10:00:05] >>674 >>544
676 名前:デフォルトの名無しさん mailto:sage [04/10/09 10:00:29] >>674 >>544
677 名前:674 mailto:sage [04/10/09 10:14:44] おお、サンクス!! スレの真ん中あたりにあったのか・・・ #こう書くべきかな? (thanx 675 676)
678 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:11:51] >>671 なんとなく,才能は体重の逆数にあるような. 0 Kgで発散しますが,CLHS には inf が無いのでちょっと分かりません.
679 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:55:07] Gauche(ver 0.8.1)でGauche-gtk(ver 0.4.1) やってるんですけど、 (gdk-font-load)が未定義の値って言われちゃいます。 なんで?
680 名前:デフォルトの名無しさん mailto:sage [04/10/09 11:55:38] まだ4kgもないうちの甥っ子は天性のlisperなのかしら
681 名前:デフォルトの名無しさん mailto:sage [04/10/09 13:47:02] 大人になると、才能は錆付くんだよ。
682 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:12:00] SRFI40: A Library of Streamsを読んでて違和感を感じたので、それを文に してみた。schemeのプロミスの話。感想きかせて。 members3.jcom.home.ne.jp/t-yam/promiseless.html
683 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:25:23] ブラクラ?
684 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:26:36] >>682 いいんじゃない? そもそもR5RSはdelayが特定の「プロミス型」を 返すことを要求していないから、そこで必要な時に必要なだけforceされる 処理系も許されてるんじゃないかな。(delayの返す値は「プロミスである」 とされているだけで、それが具体的に何なのかは未定義。さらに、 「プロミスとそれがforceされた値とを区別することは規格内ではできない」 とされているから、プロミスなんてユーザには見えない、っていう処理系 もありと。) 個人的にはimplicit forceしてくれた方がずっとプログラマに易しいと 思う。R5RSでそうなっていないのは、色々な遅延評価メカニズムを実装する ベースとしての処理系実装も許しているからなんじゃないかな。色々 試してみたいときにはforceされるタイミングを制御したいことも あるんじゃない?
685 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:31:52] 具体的なコードを挙げると説得力が増すぞ。
686 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:42:30] delay/forceが無駄な仕様にみえて仕方がない。 Schemeの思想と背反する様な。 実際使う事あるの?
687 名前:デフォルトの名無しさん mailto:sage [04/10/09 17:46:52] くまああああああ
688 名前:682 mailto:sage [04/10/09 17:47:40] レスありがとう。 >>684 R5RSの注意すべき点は、プロミス型があるかどうかではなくてプロミスが オブジェクトであること(R5RS 4.2.5)だと思う。それが根本的な問題かと。 > forceされるタイミングを制御したいことも ありそうだよね、これ。ただ、必要になったときに強制されるのだ、という 方が純粋なcall-by-needに近いようにも思う。 >>685 リンクたどればあるよ。
689 名前:デフォルトの名無しさん mailto:sage [04/10/09 18:13:49] >>674 "On Lisp"とかぐーぐるさまに教えると次の検索で少しは幸せになれるんではなかろうか。
690 名前:682 mailto:sage [04/10/09 18:25:58] 再レス。 >>684 > プロミスなんてユーザには見えない、っていう処理系もありと あなたの言ってることがわかったw R5RSのforceの解説の最後の方にそう書いてあるのね。完全に見落としてた。 thx
691 名前:デフォルトの名無しさん mailto:sage [04/10/09 19:11:42] forceはpromiseにしか適用できない(かもしれない)のに、 promiseであるかどうか判別する手段が無い(かもしれない)。 つまり完全に評価順序が分かっててpromiseと値を混在させないように プログラムが書けるときしか使えない。 でも遅延評価ではあらかじめ評価順序を知るのは一般にはとても難しい。 実用性が全然ないような。(>>616 をさえ遅延評価で書くのに挫折…)
692 名前:デフォルトの名無しさん mailto:sage [04/10/09 19:29:32] >>691 forceは何にでも適用できるよ。それは保証されてる。 promiseであるかどうか判別する手段はないかもしれない。
693 名前:デフォルトの名無しさん mailto:sage [04/10/09 20:04:18] >>692 どこに書いてある? 例えば MIT Scheme 1 ]=> (force 1) ;The object 1, passed as an argument to force, is not a promise. ;To continue, call RESTART with an option number: ; (RESTART 1) => Return to read-eval-print level 1. 2 error>
694 名前:692 mailto:sage [04/10/09 20:48:54] あ、わりい。漏れの勘違い。 'may' だから、適用できるかどうかわからんのね。 なんだ、ますます使い勝手が悪いなあ。
695 名前:デフォルトの名無しさん mailto:sage [04/10/10 02:59:20] >>691 関数的なもの、つまり副作用が無いものであれば評価順序に意味は無いはず。 そういうものと組み合わせてこそ promise の真価は発揮される。 一度評価したら二度目以降の force は必ず同じ値になるというのもそう。 とはいいつつも delay/force を使ったことないや。
696 名前:デフォルトの名無しさん mailto:sage [04/10/10 17:26:47] >>695 > 関数的なもの、つまり副作用が無いものであれば評価順序に意味は無いはず。 間違い。それなら遅延評価なんて要らない。 そもそも副作用の話はしていない。>>691 で言っているのは、 「評価順序が完全にわかってない場合、一度forceしてしまったものに もう一度forceしてしまうことがあり、それがエラーになる(実装依存で)」 ということ。
697 名前:デフォルトの名無しさん mailto:sage [04/10/10 17:46:22] 何度 force しようが promise は promise のままでは? force した結果の値を他で保持しておく必要無いんだし
698 名前:デフォルトの名無しさん mailto:sage [04/10/10 18:25:57] 691は「渡された値がpromiseかどうかわからないから念のためforceしとけ」 ってことができない、って言いたかったんじゃない? >>695 正規順序と適用順序について調べるとよろし。
699 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:19:31] >>697 forceした結果を他の関数に渡さないと計算は進まないし、 delayし忘れると計算してしまう。 なにか自分でプログラミングしたら難しさがわかると思うけど。 自分が遅延評価のプログラムだと思うものをgoshで組んだ後 MIT Schemeにかけてそのまま動いたら、結構すごいことだと思うよ。
700 名前:デフォルトの名無しさん mailto:sage [04/10/10 20:42:36] >>698 そうです。 全部promiseにしてしまえばいいのだろうけれど、 それには一から遅延評価の処理系を作るか、 それなりのライブラリを作った上で注意深くforce/delayを 利用しつつ目的のプログラムを作るか、 ということになって、どっちもかなりのオーバーヘッド。 すぐには計算して欲しくない所にだけ適当にdelayいれておいて後で なんとかするというわけにはいかない。
701 名前:デフォルトの名無しさん [04/10/10 21:07:36] >>655 微妙に訳が違ってないか? Eighty percent of those diagnosed with autism or a related disorder scored 32 or higher. 元訳:32ポイント以上のうち8割はautism related disorder 試訳: 自閉症やその関連の診断を受けた人の8割は、32ポイント以上だった。 つまりこれは、このテストが8割の診断者をカバーすると言ってはいるが、 普通の人がテストを受けて、スコアが高ければ自閉症だ、とは言っていないんじゃないか?
702 名前:デフォルトの名無しさん mailto:sage [04/10/10 21:17:48] 自閉症は黙ってろ
703 名前:デフォルトの名無しさん mailto:sage [04/10/10 21:27:16] ACになろうとして 感電死
704 名前:デフォルトの名無しさん mailto:sage [04/10/10 22:46:04] >>701 そのとおり。 つまり、テスト問題を 1 + 1 = 2 は正しいか? にすれば、 Ninety nine percent of those diagnosed with autism or a related disorder scored fully.
705 名前:ミミ mailto:sage [04/10/11 16:57:33] Unicode (UTF-16) ベースの Scheme 処理系を作る場合、 R5RS の read-char 手続きは、ポートから 2 バイトを読み取って Unicode 文字を返すのが 自然ですよね?1バイト読み取りのためには read-byte のような拡張手続きを用意して。 既存コードとの互換性がなくなると思いますけど。。。
706 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:18:08] read-charとかの関数の他に読み込む文字種を指定できるといいんじゃないかな (set-input-char-set 'ネコミミモード) (with-input-char-set 'ネコミミモード (read) ) =>ネコミミモードでーす とか
707 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:53:02] read-char は「文字」を返すだけで、それがどんなエンコードだとかどんなサイズであるかなどは R5RS では規定されていない
708 名前:デフォルトの名無しさん mailto:sage [04/10/11 17:53:35] CMUCL は,C++ の .so を呼べないのでしょうか? //////////////////// a.cc int foo (int a, int *b) { int c; c = *b - 10; *b = a * 10; return c; } //////////////////// # g++-3.4 -shared -o a.so a.cc ;;;;;;;;;;;;;;;;;;;; a.lisp (use-package "ALIEN") (use-package "C-CALL") (load-foreign "./a.so") (def-alien-routine "foo" int (a int) (b int :in-out)) (foo 13 3) ;;;;;;;;;;;;;;;;;;;; # lisp -load a.lisp -eval '(quit)' とやると,(長いので分割)
709 名前:708 mailto:sage [04/10/11 17:56:00] ; Loading #p"/xxxxx/a.lisp". ;;; Opening shared library ./a.so ... ;;; Done. Undefined foreign symbol: "foo" [Condition of type KERNEL:SIMPLE-PROGRAM-ERROR] Restarts: 0: [CONTINUE] Return NIL from load of "a.lisp". 1: [ABORT ] Skip remaining initializations. Debug (type H for help) (KERNEL:UNDEFINED-FOREIGN-SYMBOL-ERROR-HANDLER "<error finding name>" #.(SYSTEM:INT-SAP #x3FFFC7E8) #<Alien (* #) at #x3FFFC480> (14)) Source: Error finding source: Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists: target:code/interr.lisp. 0] (quit)
710 名前:デフォルトの名無しさん mailto:sage [04/10/11 18:58:09] a.soのシンボルをリストアップしてみりゃわかるよ