Lisp Scheme Part23

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2008/07/13(日) 00:10:32
□参考リンク□

日本Lispユーザ会 (日本語)
ttp://jp.franz.com/jlug/index.html
ここにかなりの情報があります。削るとAllegro Common Lispのページへ。

プログラミング言語Scheme (日本語)
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。

Schemeへの道 (日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
Schemeの入門サイト。

Practical Scheme (日本語)
ttp://practical-scheme.net/index-j.html
Scheme処理系「Gauche」の作者である川合史朗氏のサイト。
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。

LispUser.net (日本語)
ttp://lispuser.net/
Lisp関連の有用な情報がまとめられています。Common Lispの話題が中心。
3デフォルトの名無しさん:2008/07/13(日) 00:11:14
□仕様関係□

CLtL2: Common Lisp the Language 2nd edition (英語)
ttp://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html

CLHS: Common Lisp Hyper Spec (英語)
ttp://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/FrontMatter/Chapter-Index.html

R5RS: Revised(5) Report on the Algorithmic Language Scheme (英語)
ttp://swiss.csail.mit.edu/~jaffer/r5rs_toc.html

R5RS: Revised(5) Report on the Algorithmic Language Scheme (日本語)
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html

ERR5RS: A proposal for an Extended R5RS Scheme (英語)
ttp://scheme-punks.cyber-rush.org/wiki/index.php?title=ERR5RS:Charter

R6RS: Revised(6) Report on the Algorithmic Language Scheme (英語)
ttp://www.r6rs.org/final/html/r6rs/r6rs.html
4デフォルトの名無しさん:2008/07/13(日) 00:11:57
5デフォルトの名無しさん:2008/07/13(日) 00:13:39
□書籍関連(1)□

Structure and Interpretation of Computer Programs (英語)
ttp://mitpress.mit.edu/sicp/
通称「SICP」として知られる『計算機プログラムの構造と解釈』の原書です。
全文がオンラインで読めます。

SICP Web Site for the Japanese Edition (日本語)
ttp://sicp.ipl.t.u-tokyo.ac.jp/
SICP日本語版のサポートサイトです。正誤表等。

How to Design Programs (英語)
ttp://www.htdp.org/2003-09-26/Book/
Schemeを使った優れたプログラミング入門書。全文がオンラインで読めます。

The Little Schemer (英語)
ttp://www.ccs.neu.edu/home/matthias/BTLS/
The Seasoned Schemer (英語)
ttp://www.ccs.neu.edu/home/matthias/BTSS/
Schemeの教科書として定評のある「Schemerシリーズ」のサポートページです。

The Scheme Programming Language (英語)
ttp://www.scheme.com/tspl3/
Scheme入門書。全文がダウンロードできます。
6デフォルトの名無しさん:2008/07/13(日) 00:14:36
『プログラミングGauche』 (日本語)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-87311-348-7
ttp://karetta.jp/book/gauche-hacks (立ち読み版)
ttp://karetta.jp/book-cover/programming-gauche (サポートページ)
Scheme処理系言語Gaucheの初の解説書!

『入門Scheme』 (日本語)
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
幻となったScheme入門書。全文がダウンロードできます。

Practical Common Lisp (英語)
ttp://www.gigamonkeys.com/book/
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06721-1
S式の羅列で現実的な問題をどう解くのか、そのギャップに悩まされてる人に。
全文がオンラインで読めます。日本語版が『実践Common Lisp』として出版予定。

『On Lisp』 (日本語)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06637-5
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/ (日本語訳HTML版)
ttp://www.paulgraham.com/onlisp.html (英語原文がダウンロード可)
LispハッカーPaul Grahamが、Lispの力の源泉であるマクロプログラミングを解説。
7デフォルトの名無しさん:2008/07/13(日) 00:15:50
□その他(1)□

John McCarthy's Home Page (英語): Lispの生みの親、ジョン・マッカーシーのサイトです。
ttp://www-formal.stanford.edu/jmc/

Association of Lisp Users (英語): 米国のLispユーザ会です。
ttp://www.alu.org/alu/home

CLiki (英語): Common Lisp関連のリソースが集積されています。
ttp://www.cliki.net/index

CMU Common Lisp Repository (英語): 新旧様々なプログラムが置いてあります。
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html

The Common Lisp Cookbook (英語): いわゆるCookbookです。
ttp://cl-cookbook.sourceforge.net/

The EncyCMUCLopedia (英語): CMUCL関連文書。CMUCLユーザーでなくとも有益なはず。
ttp://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/

Common-Lisp.net (英語): 多くのプロジェクトがホスティングされています。
ttp://common-lisp.net/

よろずや (日本語): Lisp関連の実用的な情報が色々。
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/

どう転んでもLisp (日本語): 竹内郁雄氏による発表のスライドです。
ttp://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Takeuchi.files/v3_document.htm

Lispとは何か (日本語): 中村正三郎氏による発表のスライドです。
ttp://www.asahi-net.or.jp/%7Eki4s-nkmr/lisp20061121/lisp.html
8デフォルトの名無しさん:2008/07/13(日) 00:17:10
□その他(2)□

独習Scheme三週間 (日本語): Schemeの教科書。
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html

Bibliography of Scheme-related Research (英語): Scheme関連の論文リンク集。
ttp://library.readscheme.org/

Scheme Hash (英語): S式でXMLを使えるようにするSXML等。
ttp://okmij.org/ftp/Scheme/index.html

Scheme-users.jp (日本語): Schemeユーザのためのハブサイトです。
ttp://scheme-users.jp/

(Scheme) (Lisp) (日本語): 各種Scheme処理系をCygwin上でビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/

SLIB (英語): Scheme用のライブラリとして有名なSLIBのサイトです。
ttp://swiss.csail.mit.edu/~jaffer/SLIB

Scheme Requests for Implementation (英語): いわゆる「SRFI」のサイトです。
ttp://srfi.schemers.org/

Meadow memo: 2ちゃんねるログ: dat落ちした過去スレの一部が見られます。
ttp://www.bookshelf.jp/2ch/index.html
9デフォルトの名無しさん:2008/07/13(日) 00:18:24
□その他(3)□

初心者が集うIRC(布教してくれる先生も大募集です)。
irc.scenecritique.com
port 6667
チャンネル #Lisp_Scheme

Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/
コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。
10デフォルトの名無しさん:2008/07/13(日) 00:20:11
□実装(1)□

awklisp: Awkで書かれたわずか500行のLispインタプリタ。
ttp://www.accesscom.com/~darius/

CAMPUS LIsP Lemon version: Cでわずか1000行。
ttp://www-masu.ist.osaka-u.ac.jp/~kakugawa/hacks/clisp/

SECDR-Scheme: SECD machine modelに基づく実装。
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu

LispMe: Palm上で動くScheme処理系。これもSECD virtual machine。
ttp://www.lispme.de/lispme/

Minischeme: 1ファイルに凝縮されたScheme処理系。
ttp://tinyscheme.sourceforge.net/minischeme.tar.gz

TinyScheme: Minischemeを色々弄ったもの。
ttp://tinyscheme.sourceforge.net/

Schemix: Linuxのkernelへのパッチで/dev/として扱えるTinyScheme。
ttp://www.abstractnonsense.com/schemix/

Bit: Minischemeよりも小さい(?)バイトコード変換系。
ttp://www.iro.umontreal.ca/~dube/

KI-Scheme, AM-Scheme, etc...
ttp://www.nifty.com/download/dos/prog/lisp/
11デフォルトの名無しさん:2008/07/13(日) 00:21:28
□実装(2)□

Gauche: マルチバイト文字に対応したR5RS準拠のScheme処理系。川合史朗氏作。
ttp://practical-scheme.net/gauche/index-j.html

PLT Scheme: DrScheme、MzSchemeなどのR5RS準拠および独自拡張のScheme処理系。
ttp://www.plt-scheme.org/

Scheme48: R5RS準拠のSchemeバイトコードインタプリタ。
ttp://www.s48.org/

Gambit-C: R5RS準拠のScheme処理系。
ttp://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page

Chicken: R5RS準拠のScheme処理系。スタンドアロン実行ファイルが簡単に作成可能。
ttp://www.call-with-current-continuation.org/

Stalin: 激烈な最適化を施すScheme処理系。人間の書くCコードより速いという噂。
ttp://cobweb.ecn.purdue.edu/~qobi/software.html

Bigloo: CLR用のコードを吐けるようになったらしい。
ttp://www-sop.inria.fr/mimosa/fp/Bigloo/

guile: R5RS準拠のGNU公式拡張用言語。もちろんSLIBも使えます。
ttp://www.gnu.org/software/guile/guile.html

Chez Scheme: R6RS準拠の商用Scheme処理系。インタプリタはフリー。
ttp://www.scheme.com/

Ypsilon Scheme System: R6RS準拠のScheme処理系。
ttp://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon_Scheme_System
12デフォルトの名無しさん:2008/07/13(日) 00:26:26
□実装(3)□

Steel Bank Common Lisp: 代表的なCommon Lisp処理系。
ttp://www.sbcl.org/

CMUCL: Common Lisp処理系。
ttp://www.cons.org/cmucl/

GNU CLISP: Common Lisp処理系。
ttp://www.clisp.org/

Embeddable Common Lisp: Common Lisp処理系。
ttp://ecls.sourceforge.net/

Allegro Common Lisp: 代表的な商用Common Lisp処理系。
ttp://www.franz.com/

LispWorks: 商用Common Lisp処理系。
ttp://www.lispworks.com/

Corman Common Lisp: 商用Common Lisp処理系。
ttp://www.cormanlisp.com/

Arc: ポール・グレアム氏が開発中の新しいLisp。
ttp://arclanguage.org/
13デフォルトの名無しさん:2008/07/13(日) 00:28:10
□イベント関連□

GaucheNight (2008-03-08)
ttp://practical-scheme.net/wiliki/wiliki.cgi?gauche.night
「SchemeとGaucheとλとS式を愛するすべての人に贈るマクロな一夜」
出演:川合史朗、伊藤篤、山下伸夫、笹田耕一、ひげぽん、zick、
   黒田寿男、えんどうやすゆき、ほか

GaucheNight (2007-05-09)
ttp://practical-scheme.net/wiliki/wiliki.cgi?GaucheNight%3a2007
出演:川合史朗、黒田寿男、まつもとゆきひろ(Skype中継)、小飼弾、
   伊東勝利、久井亨、小黒直樹、ほか

黒田寿男氏関係 (黒板の人)
ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/901-909
ttp://www.bookshelf.jp/2ch/tech/1151025773.html#901

Schemeのマクロに関する黒田氏の所感
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme

それに対する川合史朗氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83

それに対する黒田氏の再反論
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night

それに対する川合氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83%3a%e6%84%8f%e5%91%b3%e8%ab%96

その他、黒田氏によるLisp関連のエッセイがこちらで読めます。
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/
14デフォルトの名無しさん:2008/07/13(日) 00:30:15
□2ch上にあるLISP関係のスレ□

(make-thread :name common-lisp :part 5)
http://pc11.2ch.net/test/read.cgi/tech/1215834213/

【CGI】実用比較Lisp vs C/C++【GUI】
ttp://pc11.2ch.net/test/read.cgi/tech/1150501484/

【魔法】リリカル☆Lisp【言語】
ttp://pc11.2ch.net/test/read.cgi/tech/1183396621/

Emacs Lisp 3
ttp://pc11.2ch.net/test/read.cgi/tech/1191875993/

【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
ttp://pc11.2ch.net/test/read.cgi/tech/1140006937/

【SICP】計算機プログラムの構造と解釈 Part2
ttp://pc11.2ch.net/test/read.cgi/tech/1203096230/

【普通のやつらの】 Arc Language 0 【上を行け】
ttp://pc11.2ch.net/test/read.cgi/tech/1202098949/

Lisp@UNIX版
ttp://pc11.2ch.net/test/read.cgi/unix/1019926525/

Lisperこそ真のプログラマーよ!!
http://pc11.2ch.net/test/read.cgi/prog/1175791979/

LISPってさ〜
http://science6.2ch.net/test/read.cgi/sim/1015169050/
15デフォルトの名無しさん:2008/07/13(日) 00:39:16
テンプレ終り?乙〜
16デフォルトの名無しさん:2008/07/13(日) 01:44:29
981 :デフォルトの名無しさん :sage :2008/07/12(土) 18:26:53
  (p)http://wiki.fdiary.net/lisp/ にこのスレのテンプレをまとめておきました。
  このスレの最初のものをコピーしたばかりなので、最新版にアップデート
  しなきゃいけない所の訂正をお願いします。
  (たとえば、テンプレには話題のイプシロンについてはかかれていない。)

  また、ID:guest PASSWORD:cl です。インストールログなどの公開場所
  としてもご利用ください。
17デフォルトの名無しさん:2008/07/13(日) 10:59:22
>>1 押忍・・じゃなくて・・乙!
18デフォルトの名無しさん:2008/07/13(日) 15:22:14
>>1
テンプレすごいなー
19デフォルトの名無しさん:2008/07/13(日) 21:38:49
>>1
Scheme実装に追加でMosh。
ttp://code.google.com/p/mosh-scheme/

あとShiroさんが面白かったって書いてた奴
ttp://clojure.org/
20デフォルトの名無しさん:2008/07/14(月) 02:58:30
>>19
http://wiki.fdiary.net/lisp/?%A5%C6%A5%F3%A5%D7%A5%EC+%28Lisp+Scheme%A5%B9%A5%EC%29

テンプレ改訂しました。実装のところは言語ごとに分けてみた。
21デフォルトの名無しさん:2008/07/15(火) 19:36:43
(乙 (>> 1))
22デフォルトの名無しさん:2008/07/17(木) 04:49:06
□その他(4)□

Somewhere Over the Rainbow
http://jp.youtube.com/watch?v=2A2Jt4WOxN8
23デフォルトの名無しさん:2008/07/17(木) 23:48:48
r6rs日本語訳のpdf版ってねーの?
24デフォルトの名無しさん:2008/07/17(木) 23:55:03
>>23
お前が作ればあるぞ
25デフォルトの名無しさん:2008/07/18(金) 00:28:04
まだ半分もできてないけど現状報告。
http://kissho.xii.jp/1/src/1jyou41912.pdf.html
WiLiKiにあがってたのをベースに組版中。
TeXに明るくないので原文のマークアップをそのまま適用する方向でやってる。

WiLiKiにあがってる訳ってたしかleque氏がやってたんだよね?
ほとんどコピペの組版作業でもけっこうめんどいのに、訳とかすごすぎるとオモタ。
26デフォルトの名無しさん:2008/07/18(金) 15:05:48
翻訳版を作るのは理解するより難しいからね。
理解したことを日本語の文章で書く必要があるから。
27デフォルトの名無しさん:2008/07/19(土) 09:13:51
しばらくSchemeから離れてたんだけど
Ypsilon という処理系が公開されてたんだね。
試してみたらかなり高速。
> (import (time))

> (time (tak 12 6 0))


;; 1.279202 real 1.279208 user 0.0 sys
12
>
Gaucheと並ぶ優良国産処理系の予感。
28デフォルトの名無しさん:2008/07/19(土) 10:01:58
GC が脱 Boehm なんだっけ?
29デフォルトの名無しさん:2008/07/19(土) 10:19:15
テンプレwikiからのお知らせ(common lispスレと同じ
文章になってます。FAQは共通でいいでしょ?)

よくありそうな質問をwikiでまとめておこうと思うので
よくありそうな質問と(回答ができそうな人は回答を)
書いてくれませんか?質問と回答のフォーマットは
一応決めてあります。

http://wiki.fdiary.net/lisp/?FAQ (id:guest pass:cl)
30デフォルトの名無しさん:2008/07/19(土) 10:37:43
Schemeプログラミングはdomain specificな性能をもつコンパイラを書くところから始まる・・・
31デフォルトの名無しさん:2008/07/19(土) 10:55:29
>>28

詳しいことはわからないけどGCはそういう方針
なんだって。

ピンボールゲーム用ってのには驚いた。
ビル・バッジ、わ〜、懐かしい名前。月刊アスキー
で読んだっけ。処理系を作った人はずっとこれを
追いかけているらしい。夢のある人だね。羨ましい。
32デフォルトの名無しさん:2008/07/19(土) 11:02:15
>>31
OpenGLだってDSL持ってんじゃん。(そこをLLVM by Apple)
グラフィック系はちょっと凝ったことしたくなって、そこがメインだったりするから、
お仕着せのAPIだけじゃ困るわけ。
33デフォルトの名無しさん:2008/07/19(土) 11:14:02
GCとかネイティブスレッドとかはライブラリのラッパを書くより大変なのだ
34デフォルトの名無しさん:2008/07/19(土) 14:47:25
common lispスレなくなった?
ここと統合?
35デフォルトの名無しさん:2008/07/19(土) 14:55:18
5つ下に何かあるようだが
36デフォルトの名無しさん:2008/07/19(土) 18:08:50
>>34
へんな名前にしたらしい
アンチのしわざ?
http://pc11.2ch.net/test/read.cgi/tech/1215834213/
37デフォルトの名無しさん:2008/07/20(日) 06:42:57
Schemeにcartesian-product-for-eachというものはないでしょうか?

(cartesian-product '((a b c) (0 1)))
⇒ ((a 0) (a 1) (b 0) (b 1) (c 0) (c 1))
http://practical-scheme.net/gauche/man/gauche-refj_158.html#IDX3119

メモリ上にこのリストを作らずに、各要素に対してprocを適用するものがほしいのですが。
38デフォルトの名無しさん:2008/07/20(日) 08:11:09
gaucheにあるじゃん。
そのまんまの名前で。
3937:2008/07/20(日) 09:19:08
>>28
ドキュメント化されてないけど、あったんですね。
自分で書いてしまいました。
cartesian-productよりも簡単でした。

(define (cartesian-product-for-each proc los)
(let loop ((r '())
(los los))
(if (null? los)
(proc r)
(for-each (lambda(x)(loop (cons x r) (cdr los))) (car los))
)))
40デフォルトの名無しさん:2008/07/22(火) 18:34:44
ど素人ですまないんだけど
timeを行うとreference to undefined identifier: time
となるんだけど
どうすれば使えますか?
41デフォルトの名無しさん:2008/07/22(火) 18:42:37
ど素人は判ったから、まず自分の境遇について語ってくれないか?
42デフォルトの名無しさん:2008/07/22(火) 18:48:38
version209でLanguage: Standard (R5RS).です。
43デフォルトの名無しさん:2008/07/22(火) 18:49:57
plt schemeです
44デフォルトの名無しさん:2008/07/22(火) 19:25:06
42,43ですけど言語の選択のところのPLTのところを選択すると
使えました
なぜですか?
45デフォルトの名無しさん:2008/07/22(火) 19:58:36
timeは標準(RSR5)にはないからです。
46デフォルトの名無しさん:2008/07/22(火) 20:37:41
version209って古いの使ってるね。Planetで使えないの多いのに。バージョンアップしたほうが幸せになれるとおもうよ。
47デフォルトの名無しさん:2008/07/22(火) 22:05:54
新しくしてもR5RSにtimeはないですけどね、念のため。
48デフォルトの名無しさん:2008/07/23(水) 05:27:08
>>47
せめてR6RSについて書けよw
49デフォルトの名無しさん:2008/07/23(水) 08:36:11
Lispっぽいawkってないのかな?さくっと正規表現をワンライナーで書けるやつ知ってたら教えて。
50デフォルトの名無しさん:2008/07/23(水) 22:54:19
>>49
Gaucheで正規表現書いたことないのか?
51デフォルトの名無しさん:2008/07/24(木) 19:54:19
Lispっぽいシェルを作ればワンライナーいらないっぽいな
52デフォルトの名無しさん:2008/07/24(木) 21:37:25
scshってのがあるから使えば?
53デフォルトの名無しさん:2008/07/24(木) 22:13:55
Eshellでいいじゃん
54デフォルトの名無しさん:2008/07/24(木) 22:23:00
どのScheme処理系でもDSLを作れるはずなのに、おかしいな
55デフォルトの名無しさん:2008/07/26(土) 16:21:43
r6rsの日本語訳を読んでたら、
「bodyの中に挿入される」ってフレーズに遭遇した。
なんかやらしい。(><)
56デフォルトの名無しさん:2008/07/26(土) 16:24:16
つ S式
57デフォルトの名無しさん:2008/07/26(土) 16:44:48
コミュニケーション
58デフォルトの名無しさん:2008/07/26(土) 19:40:27
つ M式
59デフォルトの名無しさん:2008/07/26(土) 19:53:59
つ ネジ式
60デフォルトの名無しさん:2008/07/26(土) 20:10:01
つ 相武紗季の始球式
61デフォルトの名無しさん:2008/07/26(土) 21:19:36
つ 正岡子規
62デフォルトの名無しさん:2008/07/26(土) 22:24:48
つ 両儀式
63デフォルトの名無しさん:2008/07/26(土) 22:50:53
なにこの流れ
64デフォルトの名無しさん:2008/07/26(土) 22:55:36
よくわからんが「やらしいもの」の列挙であろう。
65デフォルトの名無しさん:2008/07/26(土) 23:49:16
>>56 S式もやらしいぞ
>>57 S式コミュニケーションというラノベがあるのだ
>>58 S式がやらしいと言うのならM式も忘れちゃいけねぇ
>>59-62 以降は単なる「しき」繋がり
>>63 ようやく突っ込みが入る
>>64 ちょっとピントのズレた解説
>>65 解説(解答編)
66デフォルトの名無しさん:2008/07/27(日) 02:28:27
全レスしてる奴久々に見た。きもい・・・
67デフォルトの名無しさん:2008/07/27(日) 02:42:56
いろんな芸風の人が来ますね
68デフォルトの名無しさん:2008/07/27(日) 10:30:21
どうでもいいが「ねじ式」(ひらがな)だ
69デフォルトの名無しさん:2008/07/27(日) 11:10:51
どうでもいいことは書かなくていいよ。
70デフォルトの名無しさん:2008/07/27(日) 11:20:36
部外者の愚問ですが、Webプログラミングをする場合、Gaucheは、Ruby、Pythonなんかに比べてどんなメリットがありますか?
71デフォルトの名無しさん:2008/07/27(日) 11:23:52
>>70
別に無いよ。
72デフォルトの名無しさん:2008/07/27(日) 11:57:35
>>70
KahuaはGaucheを使ったフレームワークだけれど、継続を積極的に使っているところがおもしろい。
だけどメリットとして説明するのは難しいな。
ちゃんと理解すれば記述は簡潔になるんだけど、そもそも理解しにくいってのもあるからどっちもどっちって気もする。
まぁ、結局は好みとかもあるから使ってみなきゃ判断出来ねぇよ。
73デフォルトの名無しさん:2008/07/27(日) 12:41:03
ロジックを記述するときに関数型は(比較的に)記述量が少なくて済むことぐらい。
あと、思い入れを満たしてくれるところw
74デフォルトの名無しさん:2008/07/27(日) 12:49:05
納品用はPython, 自分用はGauche ... ああ、夢のない話をしてしまった orz
75デフォルトの名無しさん:2008/07/27(日) 13:22:25
(A)BNF(投資家じゃない方の)からS式にマップは原理上可能ですが
そのS式とコードを食わせると構文木を作ってくれる
ような関数もschemeでは楽に書けるんでしょうか?
これができたらコンパイラのフロントエンド部分を作り放題なんですが
76デフォルトの名無しさん:2008/07/27(日) 13:24:30
それが(いわゆる)コンパイラコンパイラって奴ですな
77デフォルトの名無しさん:2008/07/27(日) 13:30:07
>>75
SLLGEN
7870:2008/07/27(日) 13:39:52
>>71-74
Schemeに元々慣れていれば、って感じですね。
レスありがとうございました。
79デフォルトの名無しさん:2008/07/27(日) 14:07:44
>>76
コンパイラコンパイラとかでぐぐったら凄い数の実例がありました
すごいですね

>>75
こんなライブラリもあるんですか
また読ませていただきます
80デフォルトの名無しさん:2008/07/27(日) 16:35:39
>>75
Gauche の SVN Trunk に入ってる parser.peg モジュールが使えるんでね?
81デフォルトの名無しさん:2008/07/28(月) 00:16:27
>>80
ドキュメントが無いよ…
82デフォルトの名無しさん:2008/07/28(月) 23:45:00
分子構造をリストで表せないでしょうか?
例えば、C2H6Oだとエタノール、ジメチルエーテル。
炭素原子から手が4つ出ているのをリストで表現するには
どうしたらいいのかと...
83デフォルトの名無しさん:2008/07/28(月) 23:54:30
>>82
CMLで書いてssax:xml->sxmlするんだ。
84デフォルトの名無しさん:2008/07/29(火) 00:30:12
>>82
隣接リストでいいんじゃね?
>>83
CMLって使ってる人見たことないんだけど
85デフォルトの名無しさん:2008/07/29(火) 04:38:19
>>84
ありがとうございました。隣接リストで考えてみます。

あわせて行列による分子の表現、行列演算による化学反応の表現が
できたら面白いと思いました。やってみます。
86デフォルトの名無しさん:2008/07/29(火) 05:10:52
87デフォルトの名無しさん:2008/07/31(木) 06:00:41
Gaucheでzlibを使うにはどうしたらいいんでしょう?
http://practical-scheme.net/wiliki/wiliki2.cgi?Gauche%3AZlib
にある
Gauche-zlib-0.1.2.tgz
はリンク切れで入手できません
うーん
88デフォルトの名無しさん:2008/07/31(木) 06:32:07
(^A^)ガウチョ
89デフォルトの名無しさん:2008/07/31(木) 06:42:59
srfiにzipうんたらって関数なかったっけ?
それで
90デフォルトの名無しさん:2008/07/31(木) 07:39:52
>>85
ずっと昔は化合物を扱うLispで書かれたシステムもあったらしい。
今だとPythonの方が主流?かな。
でもがんばれ。

>>86
それLaTeXだし方向性が違うと思うぞ
91デフォルトの名無しさん:2008/07/31(木) 11:49:34
>>90
TeXだからASCII文字シリアライズwith構造の参考になるでしょ。
しかも変換できるようにしておけば、
XymTeXで分子構造図画像も作れるし。
92デフォルトの名無しさん:2008/07/31(木) 15:34:35
schemeについての質問です。
二分木を作成、描写せよという問題で作成まではできたのですが、描写とはどうすればいいのでしょう?
初心者な質問ですいません。
93デフォルトの名無しさん:2008/07/31(木) 18:36:34
設問した奴に聞けよw
94デフォルトの名無しさん:2008/07/31(木) 22:05:44
>>87
あぷろだにUpっといてやったぞ。
http://www.toel.sytes.net/~toel/cgi-bin/upload/stored/up3794.xxx
95デフォルトの名無しさん:2008/07/31(木) 22:12:03
>>87
Windows 版でよければ Gauchebox に入ってるぞ
96デフォルトの名無しさん:2008/08/02(土) 03:52:27
>>94
>>95
ありがとうございます
win, linux両方で使用するのでどちらも利用します。
97デフォルトの名無しさん:2008/08/03(日) 00:48:03
http://wiki.fdiary.net/lisp/ ですが、一応情報を集めるサイトにしてあります。
どんどんページを追加してやってください。
comp.lang.lisp,comp.lang.schemeまで含めようとしたけど、matzlispのhikiの
プラグインがatomに対応していないためにやめました。これらはmiscに
入れておきました。
98デフォルトの名無しさん:2008/08/03(日) 12:15:51
gauche-firebird がリンク切れかサイト死亡で見れないんですが、
firebird 用のDBDどこかにありませんか?
99デフォルトの名無しさん:2008/08/03(日) 15:02:46
40過ぎのわしでも子供の頃(高校生くらい)に Lisp に憧れたんだから、
今の子ならそんなの普通だと思ってたが・・・
100デフォルトの名無しさん:2008/08/03(日) 15:07:34
おっちゃん誤爆してるで
101デフォルトの名無しさん:2008/08/03(日) 15:39:56
まあ少年がLisp触ってるぐらいでオヤジども喜びすぎと
雑誌の記事がLispかBasicだけという時代に若者だった俺は思う
102デフォルトの名無しさん:2008/08/03(日) 18:43:30
90過ぎのワシも高校のころにLispに憧れたぞ。
103デフォルトの名無しさん:2008/08/03(日) 19:39:04
>>102
ジジイ、いくつのとき高校行ったんだよ?
104デフォルトの名無しさん:2008/08/03(日) 21:04:39
>>102
McCarthyより年上じゃねえかw
105デフォルトの名無しさん:2008/08/03(日) 22:54:11
>>103
ここまでの年齢だと逆に、
中学までしか出てなくて、定年してから学業やりたくて高校行くみたいなエピソードが
想像しやすいかもしれんw
106デフォルトの名無しさん:2008/08/03(日) 23:07:17
ラムダ計算論ができたころに高校生だったんですね、わかります。
107デフォルトの名無しさん:2008/08/04(月) 07:18:31
日本では戦前にLispが発見されたという噂を聞いて駆けつけました。
108デフォルトの名無しさん:2008/08/04(月) 19:08:03
lispの起源は韓国ニダ
109デフォルトの名無しさん:2008/08/05(火) 02:13:02
日本で最初のLisperって誰?
HLISPの後藤英一先生?
110デフォルトの名無しさん:2008/08/05(火) 02:25:12
そのあたりだろうな。あと故・中西正和先生とか。
111デフォルトの名無しさん:2008/08/05(火) 09:39:55
竹内先生は意外と遅い組?
112デフォルトの名無しさん:2008/08/05(火) 11:59:42
和田先生も忘れちゃいけないよね。
113デフォルトの名無しさん:2008/08/05(火) 12:45:20
あと、その世代だと井田先生かな。
114デフォルトの名無しさん:2008/08/05(火) 13:33:13
思えばその世代のLisperはどれも役立たずだったな
115デフォルトの名無しさん:2008/08/05(火) 15:47:43
つまんない煽り乙
116デフォルトの名無しさん:2008/08/05(火) 16:05:25
今の世代のLisperはどれも>>114よりは役に立ってるかな。
117デフォルトの名無しさん:2008/08/06(水) 05:47:20
注目ワード“高階プログラミング”って何だ?
ttp://ascii.jp/elem/000/000/157/157495/
118デフォルトの名無しさん:2008/08/06(水) 06:26:53
萩谷先生の関数プログラミングっていう本は
高卒レベル数学力(偏差値60切る位)でプログラミング初心者では読めませんか?
Yコンビネータなどの高度な話題にもふれてますか?
119デフォルトの名無しさん:2008/08/06(水) 07:45:12
>>118
良い本です。だいじょうぶですよ。

途中、フィボナッチ数列の行列表現、固有値
とかでてきますけど本筋とは関係ないので
とりあえず無視してOKです。
Yコンビネーターはとりあげてないですね。

序文で萩谷先生は高校生に読んでもらいたい
と書いてます。

120デフォルトの名無しさん:2008/08/06(水) 10:07:30
Yコンビネーターについて触れてる、高校生にも読める本って
そういえば無いような気がする。あったっけ?
121デフォルトの名無しさん:2008/08/06(水) 11:55:39
プログラミング初心者が読んで何かを作れるようになりたいんだったら向いてないかも。
122デフォルトの名無しさん:2008/08/06(水) 11:56:13
>>120
Little Schemer
123デフォルトの名無しさん:2008/08/06(水) 12:00:27
あれYコンビネータまで行くのか
124デフォルトの名無しさん:2008/08/06(水) 13:26:10
Yコンビネータって本を読むほどの物でもない気がするけど
λ記法でわかりにくければS式で書き下せばいい
125デフォルトの名無しさん:2008/08/06(水) 14:15:05
なんでYコンビネータだけが特別扱いされてるんだろ?
126デフォルトの名無しさん:2008/08/06(水) 14:17:50
再帰系のコンビネータの中でってこと?
そりゃ一番シンプルだし。
127デフォルトの名無しさん:2008/08/06(水) 14:36:46
>>126
つか、やたら Y が目につくようになったのはいつ頃から?
128デフォルトの名無しさん:2008/08/06(水) 14:39:56
今朝くらいから
129デフォルトの名無しさん:2008/08/06(水) 17:45:17
>>128
それはテトラポッドやろ。
130デフォルトの名無しさん:2008/08/06(水) 18:32:43
>>119
ありがとうございます。
> 途中、フィボナッチ数列の行列表現、固有値
程度なら理解できると思います。
131lischemep ◆/uyHCgG7qA :2008/08/10(日) 23:28:50
都内で初心者向け勉強会を模索しようとしております。

以下想定です。
こうしたらいいとかありましたらどんどん提示して頂けたら幸いです。

・大学生のLisper/Schemerを先生として呼ぶ
・上記のため会費をとります。
・場所は以下を想定。(1h:1400〜2300円くらい+各自1ドリンク)
ttp://www.ginza-renoir.co.jp/miyama/
・スキルがバラバラになるため基本的に自習を想定
(同スキルの人と課題本を決めてチーム学習する等は自由です)
・参加条件としてキーボードがサクサク打てる程度。処理系を入れるノートパソコン等。
・開発環境構築から指導の予定


参加者希望予定者がいらっしゃいましたら、
lischemep at gmail.com
まで下記を記入して送ってください。

使用希望の
・希望日(参加頻度:必ず参加、月1希望、仕事のため不定等)
・希望参加費
・OSとバージョン
・エディタ
・処理系
(↑処理系は希望なければおまかせと書いてください)

また先生やってみたいという方は、下記を記入して送ってください。
・希望日(開催頻度も)
・希望報酬額(時給換算、月XX円等)
・対応できるOS・処理系・エディタ
132デフォルトの名無しさん:2008/08/11(月) 00:27:37
先生のレベルを決めないで、
希望参加費を申告制にすると、
収集つかないんじゃないかな。
133lischemep ◆/uyHCgG7qA :2008/08/11(月) 00:47:39
>>132

なるほど。
勇み足過ぎたかもしれません。

まず、参加希望者から
・自分のレベル
・どんな課題がしたいか

を送ってもらうように訂正します。
lischemep at gmail.com
134デフォルトの名無しさん:2008/08/11(月) 07:41:42
最初の課題は開発環境構築じゃなくて処理系を選ぶこと。
135デフォルトの名無しさん:2008/08/11(月) 08:09:45
>>131
お、面白そうだな。
確認だけど◆/uyHCgG7qAは先生じゃなくまとめ役ってこと?
「先生」の技量に全てが依存している気がする。
大学生でLisperを名乗れる奴ってどのくらいいるんだろう。
136デフォルトの名無しさん:2008/08/11(月) 09:07:42
131です
135さん

私は先生はとても無理です。

先生は学生でなくてもいいのですが
そうすると高額なセミナーになってしまう気がして。

社会人のSchemer/Lisperなら薄謝もらってもおそらく割に合わないでしょうし。
137デフォルトの名無しさん:2008/08/11(月) 09:55:28
>>136
スキモノならボランティアでやってくれるんじゃないの?
もっと安くあげる方法はあると思う。
http://www.javaopen.org/jfriends/howto/
138デフォルトの名無しさん:2008/08/11(月) 09:58:28
自習じゃ駄目な理由は?
139デフォルトの名無しさん:2008/08/11(月) 10:11:35
ここで聞けば良いのでは?
http://www.lingr.com/room/bpYrj7DtJnN
140デフォルトの名無しさん:2008/08/11(月) 12:21:10
Lisp/Schemeは人気が低いわりに実装がやたら複雑だから人手が足りない。
移植したりライブラリを増やしたりできない。
勉強会やるとしたら言語仕様だけでなく実装についてやるべきだけど、
複雑な実装が乱立しているから難しい。

もちろん単純なScheme処理系もあるが、それは人気がなさすぎる。
たとえ言語が人気でも処理系が不人気なら意味がない。
複雑さの許容度は人気に比例するのだと思う。

複雑なものもいずれ必要にはなる。
でも今は必要ないんだよ。今一番必要なのは、人気と釣り合いのとれた単純な実装。
そのためならマクロを犠牲にしてもいい。
それに気づいた人はS式から離れていく。嫌いになった訳ではないがな。
141デフォルトの名無しさん:2008/08/11(月) 13:11:44
>>140
で?っていう
142デフォルトの名無しさん:2008/08/11(月) 16:49:10
>>140
自分の低能ぶりを直視できない人間だということを婉曲に表現した自己紹介ですね
143デフォルトの名無しさん:2008/08/11(月) 18:28:33
>>140
言い訳をいろいろ考える才能はありそうですねw
144デフォルトの名無しさん:2008/08/11(月) 21:36:40
地元の大学でSchemeの授業があれば聴講したいの
だけど、残念ながら無し。
東京近辺に住んでいたら東工大の講義を聴講したい。
145デフォルトの名無しさん:2008/08/11(月) 22:01:37
>>144
むかしなら、大学の授業の潜り込みは簡単だったんだけどね。
今は、わからない。
東工大もセキュリティは厳しくなってるからね。
146デフォルトの名無しさん:2008/08/11(月) 22:53:18
>>140
釣られるけど、マクロの無いLispなんてLispじゃないだろ
そもそもCommonLispもSchemeもちゃんと仕様のある「まとも」な言語なんだけど。
147デフォルトの名無しさん:2008/08/11(月) 22:58:56
Lisp 1.5 は Lisp じゃないなw
148デフォルトの名無しさん:2008/08/11(月) 23:46:28
処理系のソースコードを気軽にいじれるならマクロなしでもいけるかも
Lisp1.5はそうだったかも
149デフォルトの名無しさん:2008/08/12(火) 00:57:31
>>145
国立大は社会人受入れに寛容
なようなので正規に聴講生の
手続きをとって試験も受けて
単位もとりたいです。
でも、地方の大学でSchemeを
使った講義があるところは
限られてるみたいです。
150デフォルトの名無しさん:2008/08/12(火) 01:02:10
マッカーシー博士の最初の論文
にあったLispで記述されたLisp
で仕組みがよくわかりましたよ。
故中西先生もこの論文だったか
ユーザーマニュアルだけを手がかりに
最初のLisp処理系を書いたと読んだけど。
151デフォルトの名無しさん:2008/08/12(火) 01:05:10
マクロは無いくせにw、コンパイラは含んでいるというのは凄いと思う>LISP 1.5
152デフォルトの名無しさん:2008/08/12(火) 01:10:57
他言語処理系に対するアドバンテージは
マクロだけだもんね
153デフォルトの名無しさん:2008/08/12(火) 01:12:19
>>149
どうしてもね。その傾向はあるかもね。人工知能の分野もlispよりC++のほうが勢いがあったり
するらしいから、教える人が少なくなるんだろうね。筑波、東工ふくめて旧帝大あたりだったら
一つくらい授業がありそうだけど。それ以外の地方は確かに期待できないかもしれないね。

プログラムの筋はschemeをやる方が断然よくなるんだけどな。これは抽象化がうまくなるから
だろうと思う。高階関数を扱える言語をしっかりやってるかやってないかでセンスはずいぶん変
わるね。
154デフォルトの名無しさん:2008/08/12(火) 01:12:58
>>152
んなこたあないw
155デフォルトの名無しさん:2008/08/12(火) 01:33:56
Lispのアドヴァンテージはいくつか
考えられますが、一番はS式のもつ
プログラムとデータの同一性だと
思います。強力はマクロもその
特性のひとつでは?
156lischemep ◆/uyHCgG7qA :2008/08/12(火) 01:37:13
>>137
いいリンク紹介ありがとうございます。
やっぱり安く上げる方法考えた方がいいんですかね。
私自身はお金は無頓着なので。場所ももう少し探してみます。
課題本はあったほうがいいんでしょうか。
「この本やりたい」とかありましたら教えてください。


>>138
>>139
自習だとつまらないことでつまづいて長い時間考えることがあるからです。
ネット上で聞くということも出来ますが、
その場合状況説明のやりとりに時間がかかります。
私はもう結構な年なので、お金を払ってでも学習速度を上げたいと思ってます。
157デフォルトの名無しさん:2008/08/12(火) 01:51:10
(意地悪い言い方で申し訳ないけど)自分の家庭教師が欲しい、ってことなのかな?
もしそうなら「自分と同じレベル募集」とか、はっきり言っちゃったほうが良いかも。w

俺も先生は大学生とか限らないほうが良いと思う。
158デフォルトの名無しさん:2008/08/12(火) 01:55:18
> その場合状況説明のやりとりに時間がかかります。

これを要領よくやる訓練も必要かと
159デフォルトの名無しさん:2008/08/12(火) 02:12:45
>>151
マクロ機能は自分で好みのを書けってことだったんじゃないかな?
当時のマクロの実装は簡単だったしね。

160デフォルトの名無しさん:2008/08/12(火) 02:42:42
>>149
私立だって簡単に聴講生になれるぞ。
金がかかるだけで。
161デフォルトの名無しさん:2008/08/12(火) 02:47:46
>>159
最初の頃はFSUBR + EVALで一々手で書いた。
パターンが出来上がったのでdefmacroになった。

>>156
> 自習だとつまらないことでつまづいて長い時間考えることがあるからです。

本当はそれが大切なんだけどね。
より深く理解するし、それが出来る人が継続もできる。
壁に負ける人はいつも負け続ける。
162デフォルトの名無しさん:2008/08/12(火) 02:56:09
それが大切だとしても若いうちだけだろ。
年取ってるなら金払ってでも学習速度を上げたいって言うのはわかる。
163デフォルトの名無しさん:2008/08/12(火) 02:59:04
生涯学習だな。カルチャー教室でやらないかな?w
164lischemep ◆/uyHCgG7qA :2008/08/12(火) 06:13:10
>>157
家庭教師。つまるところそうなのかもしれません。
Lisp/Schemeにとっつきにくさがあると思ってて
同じ状況の人がいるだろうと思ってたのですがあまりいないみたいですし。。。

状況としてはThe Little Schemerの半ばで頓挫している状況です。
他にもプログラミングGaucheやANSI Common Lispなどをつまみ食いしてますが
途中で分からなくなってます。

色々当たっているうちに少しずつ分かったりしますが
時間がかかりすぎている気がしています。
このままだと数年かけて一冊片付くペースになってしまいそうです。


>>162
三十代になるとさすがに焦ります。
165デフォルトの名無しさん:2008/08/12(火) 08:01:59
> 三十代になるとさすがに焦ります。
俺は164がなんでLisp/Schemeをやってみようと思ったのかが気になるな。
知的興味が理由なら年齢で焦ることはないだろうし。
近い将来に仕事で使う必要があるのなら焦る気持ちもわかる。
学習する動機によっておすすめの方法も違ってくると思うんだが。どう?
166デフォルトの名無しさん:2008/08/12(火) 09:03:44
書いてあるじゃん
挫折しそうだから
くじけそうだから
もう後がなさそうだから
167デフォルトの名無しさん:2008/08/12(火) 09:45:28
俺なんて、40近くになってScheme始めたぞ。
独学でSICPをしこしこ解いてるよ。

同時に数学の勉強も始めたんだが、こっちがきつい。
数学基礎論のやさしい教科書はないかな。
168デフォルトの名無しさん:2008/08/12(火) 10:56:25
目的がいまいちはっきりしない質問者はやがて身の上話を始める法則

>>167
> 同時に数学の勉強も始めたんだが、こっちがきつい。
> 数学基礎論のやさしい教科書はないかな。

数学基礎論の質問スレッド その4
http://science6.2ch.net/test/read.cgi/math/1207899938/

おおかた数理論理学か集合論の教科書を薦められると思うが
計算機科学との関連で何かもくろみがあるならこっちへ
http://science6.2ch.net/informatics/
169デフォルトの名無しさん:2008/08/12(火) 12:54:29
「数学」が何を指してるか知らんが、
基礎論は数学を勉強する支えにはならないぞ普通は。

集合論とか論理とかを学ぶなら基礎論には手を出していない
普通の教科書のほうが良い。
170デフォルトの名無しさん:2008/08/12(火) 13:28:48
>>168
ありがとうございます。覗いてみます。

>>169
そうなんですか?
集合論とか論理学から、計算機科学方面へ進めていきたいと思っていたのですが。
私の「基礎論」という言葉の使い方がおかしいのでしょうか?
集合論や論理学そのものを学んだほうが良いということでしょうか?
171デフォルトの名無しさん:2008/08/12(火) 18:36:29
>>146
仕様があればまともな言語なのぉ〜?
172デフォルトの名無しさん:2008/08/12(火) 18:40:24
「まともな言語」の集合を定義してください
173デフォルトの名無しさん:2008/08/12(火) 19:28:14
>>170
今、数学で「基礎論」といったら、逆数学とかあのへんのことを指すんじゃないかな。
少なくとも専門分野を「基礎論」と自己規定してる数学者は、だいたいそのあたりの
分野を研究してることが多い。(Harvey Friedman, Stephen Simpson, 田中一之氏, etc)
「基礎論」という分野が勃興してきた19世紀末と現在とでは、言葉のニュアンス
がかなり違ってきているので、注意が必要かと。

167氏はあるいはもっとルーズに、「基礎論」という言葉を「数理論理学」とほぼ同義で
使ってるのかもしれないが。

まあいずれにしろ、数理論理学は(少なくとも初歩の段階では)メインストリームの数学とは
直接関係しないことが多いね。幾何的モデル理論みたいに、数論への応用があったりする
分野もあることはあるけど、そういうのは非常に専門的な話題になってしまう。
(169氏が言ってる「数学を勉強する支えにはならない」というのはおそらくそういうニュアンスなのだろう。)

でも理論計算機科学に興味があるのなら、数理論理学は必須だから、(167氏言うところの)
「基礎論のやさしい教科書」を勉強するのは意味のあることだと思うよ。

とりあえずはこのあたりをご参考に。
ttp://www.kurims.kyoto-u.ac.jp/~hassei/reading_list.html#LOGIC
174デフォルトの名無しさん:2008/08/12(火) 20:05:34
計算機工学者のための計算機数学のとっかかりということなら、
島内さんの「数学の基礎」はどうかと思ったが、
http://www.amazon.co.jp/数学の基礎-島内-剛一/dp/4535601062
絶版で中古市場では高い!ヤフオクでも元より値が上がってる!
175デフォルトの名無しさん:2008/08/12(火) 20:22:59
竹内外史とかのは基礎論だよな?

と板違いか。
176lischemep ◆/uyHCgG7qA :2008/08/13(水) 06:23:48
>>165
はじめのきっかけは、「普通のやつらの上を行け」を学生時代に読んでです。

知的興味もありますが、将来的には仕事で使いたいと思っています。
また、なるべくLisp/Schemeを広めていきたいと思っています。
それで初学者向けの勉強会が出来ないかと思いました。

目標としては、AllegroServeを使えるようになること、
On Lispを理解できるようになることです。
177デフォルトの名無しさん:2008/08/13(水) 07:40:49
>>176
まだ、shemeやcommon lispに馴れていないならば、SICPよりもう少し簡単なもの
からお勧めするよ。
schemerなら、gauche本でもいいし、common lisperならAnsi Common Lispや岩波
の本でもいいし。
178デフォルトの名無しさん:2008/08/13(水) 11:16:10
>>176
ポールグレアムって結局SchemeにもCLにも否定的じゃないか?
179デフォルトの名無しさん:2008/08/13(水) 14:30:39
>>178
どちらかといえばSchemeにもCLにも肯定的だと思うよ。
(Lisp族以外の言語に比べれば)
180デフォルトの名無しさん:2008/08/13(水) 16:20:52
PG
javaには否定的というのははっきりしてるし、C系に苛立ちを持ってるような記述も
みかけたことはあるかな。
181デフォルトの名無しさん:2008/08/13(水) 16:46:20
CとPerlは人気の言語として色々条件を満たしているみたいな話があったような
182デフォルトの名無しさん:2008/08/13(水) 18:55:38
40年も前から存在するのに
lispが全く存在感無い事について
想像力を働かせてみた方がいいと思うね
183デフォルトの名無しさん:2008/08/13(水) 20:29:28
>>182
どれだけの世界を見て生きてきたか知らんが、
あなたのちっぽけな経験で感じた存在感なんて
なんだというのだ
ふしあなか?
184デフォルトの名無しさん:2008/08/13(水) 20:42:17
>>183
頑張ってそれか?
「viaweb以外のインストールベースの例を教えてください」
って聞かれたらどうするの?
はいやりなおし!
185デフォルトの名無しさん:2008/08/13(水) 20:44:57
「実用性なんて飾りです。偉い人にはそれがわからんのですよ。」
くらい言わないと。
186デフォルトの名無しさん:2008/08/13(水) 21:16:40
>「viaweb以外のインストールベースの例を教えてください」

なんか薄っぺらいなぁ。
187デフォルトの名無しさん:2008/08/13(水) 21:37:39
>>170
皆言ってるように「数学基礎論」そのものに首を突っ込む必要はない。
集合というのはただのモノで、ただのモノについての議論を深めていくと
濃度がどうとか数学基礎論の方へ行く。

そっちではなくて数学の基礎と言うか数学村の言葉使いに慣れておく必要がある。
つまり集合と言うただのモノに必要な性格付けをして数学的な実質のある体系を
作っていく手順を自分なりに一度は体験しておく必要がある。

入り易いのは数の構成で、島内氏のとか岩波新書に「数の体系」とかいろいろある。
そんなことは分かってるというのであれば不要だが、単に実数も複素数も知ってるというのではだめ。

次にやっておくべきは代数かな。計算機科学との相性も良いし、暗号等での応用もあって本もたくさんある。

あとは必要と興味に応じてやっていけば良い。ひとつ注目したいのは圏(カテゴリー)論。
ひと昔前はGAN(GENERAL ABSTRACT NONSENSE)とか揶揄されたが様変わりで、
Haskellで圏論と言う言葉を知る人も増えたらしい。
188デフォルトの名無しさん:2008/08/13(水) 22:43:56
昔の本だと「数学基礎論」となっていても
真偽関数から始めて命題論理・モデル理論・述語論理・帰納的関数・・・と続き
最後にちょこっと公理的集合論が出てくる、というような感じで
>>170のやりたそうなことに内容的にはちょうどよかったんじゃないかと思うが
今はもっと効率的にやる方法もあるだろう
189デフォルトの名無しさん:2008/08/14(木) 00:16:28
>> 173, 187, 188
ご教示、ありがとうございます。

そもそもの動機なのですが、ただいま「論理と計算のしくみ」を読んでいまして、
ちょっと展開が速すぎて着いていけないので、もうすこし詳しく、さらに言えば
演習もあるような書籍は無いかと思ったしだいです。
証明の仕方に慣れていないせいか、結論はともかく過程に納得ができなくて。

とりあえず、「論理学をつくる」を入手しましたので、これをみっちりやってみます。

圏論も視野には入っています。ちょっと遠そうですが。

一番初めの目的はプログラミングや設計に役立てるためだったのですが、
いつのまにか、数学を学ぶこと自体が楽しくなってきてしまいました。
脱線して、計算機科学と関係ない方向に行ってしまいそうです。
190デフォルトの名無しさん:2008/08/14(木) 00:18:15
>>184
はいさようなら!
191176:2008/08/14(木) 08:39:29
177さん

助言ありがとうございます。

やっぱりLispかSchemeどっちを学ぶか決めた方がいいのでしょうか。今は両方手をつけてます。

それと最近翻訳された実践Common Lispは初学者向けですか?
192デフォルトの名無しさん:2008/08/14(木) 09:00:16
>>191
そこは自分で考える部分だよ。

言語の取得って基本的に同時に複数をやるのはあまりよいとは思えないですね。
ゴールがなにか?を考えたら使用する言語は決まってくると思うけど。
LLな活動ならgauche で充分だけど、重い計算をさせるならcommon lispのほうが
当然向いてるし。
193デフォルトの名無しさん:2008/08/14(木) 10:15:16
>>192
同時にやるのが〜といったのは
(defun foo (arg1 arg2) ....)
(define (foo arg1 arg2) ....)
と微妙な違いの1例だけど、この違いがなれないうちは混乱に結びつくからだよ。
(defun foo (arg1 arg2)
....
(cond
[(= a b) ...]
....))

みたいになっちゃいけないし。
194デフォルトの名無しさん:2008/08/14(木) 10:18:31
>>193
それはcommon schemeだ。
195デフォルトの名無しさん:2008/08/14(木) 17:48:19
>>191
『プログラミングGauche』で「途中で分からなくなって」るんだったら、
『実践CL』も同じ結果になる可能性が高いんじゃないかと。

とりあえず「AllegroServeを使えるようになる」という目標があるのなら、
CL一本に絞って、もっと懇切丁寧な初学者向け教科書で勉強してみるのが
一番じゃないでしょうか。

Peter Norvigもたしか「まったくの初心者にはこれが一番いい」と言ってたと
思いますが、TouretzkyのGentle Introductionが非常に丁寧でいいと思います。
こちらから全文が無料でダウンロードできます。

ttp://www.cs.cmu.edu/~dst/LispBook/index.html
196デフォルトの名無しさん:2008/08/14(木) 20:27:19
「リスト遊び」とかどうだろう。Emacsが動けばすぐ試せるし。
197デフォルトの名無しさん:2008/08/14(木) 21:32:19
「プログラミングGauche」は全部理解する必要はないだろう。
特に第3部は必要な箇所だけ読めば良い。
198lischemep ◆/uyHCgG7qA :2008/08/14(木) 23:53:22
皆様、色々と助言ありがとうございます。

>>195さん、
よさそうですね。後で印刷して通勤の合間に読んでみます。

>>196
Emacs Lispの本も持ってます。そちらにも手を付けてみます。

>>197
それを聞いて少し安心しました。
199デフォルトの名無しさん:2008/08/15(金) 00:10:04
AllegroServeを使えるようになるにしろ、On Lispを読めるようになるにしろ、
実践Common Lispは良いテキストだと思うけどなあ。

漏れは、リスト遊びや、Elispの勉強は、上二つの目的には直接関係してこないと思う。
200デフォルトの名無しさん:2008/08/15(金) 07:36:30
>>199
禿同。実践本がマスターできたら、あとは自分で調べながら何でもやれるよ。
マクロもCLOSも書いてある本は他にないと思う。実践本のFOO言語の下りは
本当に素晴しい。

ちなみにAllegroServeは使うだけなら全然難しくないよ。
S式でややこしいListの構築の練習に良いかもね。
リスト遊びは名著だけど、泥臭くなさすぎる。
201デフォルトの名無しさん:2008/08/15(金) 21:17:10
教えてください.R5RSに記述されている手続き/シンタックスはすべて
syntax, library syntax, procedure, library procedure, optional procedureのいずれかに
分類されていますが,define, define-syntax, syntax-rulesに関しては上の分類別の記述がありません.
どのように考えれば良いでしょうか.すべて定義に必要なものですから基本的なものだとは思うのですが
単純にsyntaxの部類に属するとしてよいのでしょうか.
202デフォルトの名無しさん:2008/08/15(金) 22:01:12
define、define-syntaxは式ではないのでsyntaxではない
syntax-rulesは式ではないのでsyntaxではない

たぶん
203デフォルトの名無しさん:2008/08/15(金) 22:15:19
CLで言う所の特別式は値のある式だけど
R5RSではたとえば
(define x (define y 100))
などは許されない
204デフォルトの名無しさん:2008/08/15(金) 22:16:49
値のない式もあるから203の例は不適当だったか
205デフォルトの名無しさん:2008/08/15(金) 22:59:38
>>201
define, define-syntax, syntax-rulesは確かに書いてないねえ。
でも、こいつらはどう考えても手続きじゃないから分類するならsyntaxなんじゃないの?
206デフォルトの名無しさん:2008/08/15(金) 23:14:59
CLみたいに特別式、関数、マクロに単純に分類できないからねぇ
beginの扱いも微妙だし
207デフォルトの名無しさん:2008/08/21(木) 16:12:21
svnから引っ張ってきた最新版のgaucheをVCでコンパイルすると
実行時にしょっぱなのScm_Initでこけます。

どうもvminsn.cの SCM_VM_LOCAL_ENV_CALL ラベルに来たとき
vm->val0に値が設定されていないことが原因っぽいのですが、
これの解決策分かる方いませんか?

スレチなら、適切な場所に誘導してもらえると嬉しいです。
208デフォルトの名無しさん:2008/08/21(木) 16:17:07
>>207
> スレチなら、適切な場所に誘導してもらえると嬉しいです。
http://www.lingr.com/room/gauche
209デフォルトの名無しさん:2008/08/21(木) 16:21:22
>>201
自分はsyntaxだと理解してきました。

ちなみにR6RSではsyntaxと明記です。
210デフォルトの名無しさん:2008/08/21(木) 16:32:12
>>208
ありがとうございます。
211デフォルトの名無しさん:2008/08/22(金) 10:08:30
http://natu.txt-nifty.com/natsutan/2008/08/lisp_186c.html

センスのないネタやね。この手の奴にlispを語ってほしくないな。sicpを
やってた奴みたいだが。
212デフォルトの名無しさん:2008/08/22(金) 11:21:48
どうでもいいものを、ここに張る奴もどうかしてる。
213201:2008/08/23(土) 02:28:49
>>みなさま
いろいろお教えいただきましてありがとうございます
>>209 さんのご意見に従い
割り切ってsyntaxに入れてしまったのが簡単で良いかなと思っています
しかしこれらをあえてsyntaxから外してあるということは
R5RSはそれだけ厳密に定義されているということなんでしょうか
214デフォルトの名無しさん:2008/08/23(土) 14:07:51
R5RSは結構いい加減w
それ系のMLでも解釈について議論になってる。

もちろん仕様がないような言語とは比較になりませんが。

どういう言語でも↓こういうことがあるもんなんです。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html
そういうレベルの意味において「いい加減」
215デフォルトの名無しさん:2008/08/23(土) 14:32:15
静的型と仕様は頭の中にあればいいよ
216デフォルトの名無しさん:2008/08/24(日) 13:16:35
お前は頭の中で済むほど頭がいいのか?
217デフォルトの名無しさん:2008/08/24(日) 13:41:23
お前は頭の中で済むと思い込むほど頭がわるい人は多い。
218デフォルトの名無しさん:2008/08/24(日) 14:11:09
worse is betterを思い出した
頭のいい奴は複雑なものを作るから困る
219デフォルトの名無しさん:2008/08/24(日) 14:17:34
日本語は難しくてかなわん
S式で説明してくれ
220デフォルトの名無しさん:2008/08/24(日) 16:58:12
(define (難しい? 言語) (eq? 言語 '日本語))
(if (難しい? '日本語) 'S式でおk)
221デフォルトの名無しさん:2008/08/24(日) 18:06:39
>>220
コラコラw
222デフォルトの名無しさん:2008/08/24(日) 19:41:38
>>220
#<undef>
223デフォルトの名無しさん:2008/08/24(日) 21:16:28
ところでSchemeの仕様にむやみと未定義が多いのは何でなの?
なにかに決めりゃいいじゃん、nil でもいいからさぁ。
とりあえず決めた方が実用的になると思うんだけど。
224デフォルトの名無しさん:2008/08/24(日) 21:24:42
>>223
決めちゃったらもう変えれないだろ。
議論が尽くされてないところは決めるべきじゃないし、
実用のために不格好になるのは CommonLisp だけで十分。
225デフォルトの名無しさん:2008/08/24(日) 21:53:41
common lispが不恰好とな?
226デフォルトの名無しさん:2008/08/24(日) 22:26:38
少し認める
227デフォルトの名無しさん:2008/08/24(日) 22:44:55
>>223
決めちゃうことが(例えば性能的な)制約になる実装があり得るから
228デフォルトの名無しさん:2008/08/25(月) 00:15:13
rubyとか酷いよね
229デフォルトの名無しさん:2008/08/25(月) 00:26:43
gauche上の話なのですが、

(definc-syntax member
 (syntax-rules () ((_ name) (name :init-value 0))))

(define-class <test> ()
 (member X))

こうすると、どうも(member X)の展開が上手くいかないようなのです。
これを上手く展開させる方法はありますか?
230デフォルトの名無しさん:2008/08/25(月) 00:29:57
>>229
本質的にマクロをわかってない。
あくまでもそういう書き方で展開させたいなら結構めんどいことになるよ。
231デフォルトの名無しさん:2008/08/25(月) 00:31:15
評価される場所でないと、マクロは展開されない。
define-class ごと再定義するのが良いだろう。
232デフォルトの名無しさん:2008/08/25(月) 00:46:58
>>230-231
ありがとうございます。
他のやり方を考えてみます。
233デフォルトの名無しさん:2008/08/25(月) 13:14:13
writeとかdisplayが真値を返さない可能性があるので
and-let*とかで処理をつなぐ時にいちいち
(begin (write obj) #t)とか書くのは不恰好な気がする。
せめて#<undef>は#fにはなりえない、くらいの制約は欲しい

(とはいえ、未規定の値を返す手続きが#fを(返す|返しうる)処理系は見たことないけど)
234デフォルトの名無しさん:2008/08/25(月) 20:56:28
* が前置されていたら次の式は #t を返したものとして扱う、てな
自分用and-letを定義したらどうよ。
235デフォルトの名無しさん:2008/08/25(月) 21:23:18
意味的に and じゃないとこで andなんちゃら を使っているのだから仕方ない
236デフォルトの名無しさん:2008/08/25(月) 22:07:51
letをネストしたくないのと、いちいち継続を捕捉して脱出したくないだけだろ
戻り値が未定義だというのは問題の本質ではないな
237デフォルトの名無しさん:2008/08/25(月) 22:13:41
朝起きたらLISPになっていますように
238デフォルトの名無しさん:2008/08/25(月) 22:22:37
つまり括弧を書きたくないだけだね。
フロントエンドでも作れば?
239デフォルトの名無しさん:2008/08/25(月) 22:43:16
HaskellのMaybeモナドっぽく使いたいわけですよ
いろいろマクロを書いて試してます

>>238
括弧を書きたくないのではなくて
beginで値を捨てるのが好きじゃないんです

未規定値は#fかもしれないし真値かもしれないというのも気持ちが悪いです
もしかしたら(eq? (write obj1) (write obj2)) -> #fかもしれませんし
240デフォルトの名無しさん:2008/08/25(月) 23:00:06
個人的には、未規定値は使ったとたんにエラーになる処理系が好ましいな
241デフォルトの名無しさん:2008/08/25(月) 23:34:49
0個の多値を返せばいいじゃない
242デフォルトの名無しさん:2008/08/25(月) 23:54:07
and-let*の中で返り値が未規定な手続きを使ったり、
未規定値を比較する、といった発想が理解できない
243デフォルトの名無しさん:2008/08/25(月) 23:57:40
他コンピュータとの通信プログラムなどで
画面出力するというのが主ですね
クライアントプログラムなどでREPLの介入が出来ない場合
デバッグのための出力を埋め込んだりもします
244デフォルトの名無しさん:2008/08/25(月) 23:59:29
未規定値の比較は実際には行いませんよ
ただ真理値も同一性も規定されていないから
どうなるかはわからないといいたかっただけです
245デフォルトの名無しさん:2008/08/26(火) 00:46:26
なぬ? (begin (write "hoge") #t) が恰好悪いですと?
そんな時こそマクロ〜
246デフォルトの名無しさん:2008/08/26(火) 08:15:32
>>244
プログラミング向いてないのでは?
247デフォルトの名無しさん:2008/08/26(火) 19:11:39
(define (tree-count elem tree)
(let f ((rest tree) (count 0))
(cond
((null? rest) count)
((list? (car rest)) (f (append (car rest) (cdr rest)) count))
(else (if (eq? elem (car rest))
(f (cdr rest) (+ 1 count))
(f (cdr rest) count))))))
(= 6 (tree-count '<> '(A B C <> (A <> (X <>)) <> (<> <>))) ; => #t
こういうのでも末尾再帰になってるんでしょうか?
248デフォルトの名無しさん:2008/08/26(火) 20:17:38
fの呼出しは末尾呼出しになってますね
249デフォルトの名無しさん:2008/08/27(水) 09:03:03
>>239
ほんとにMaybeモナドみたいにしたいなら、そのように書くしか無いと思うよ
(有効な値は全部Justでくるむとか、逆に「有効な返り値と決してeq?にならない
値」を失敗を表すのに使うとか)。and-let*で#fを特別扱いしてるのは
「大抵の場合うまくいく」っていう一種の妥協で、>>239のアプリは
その「大抵の場合」から外れているってことだと思う。

250デフォルトの名無しさん:2008/09/01(月) 23:00:41
絶版になったと思ってたディヴィグ翻訳本
いつの間にかまた売られるようになってますね
3版ではなさそうですが
251デフォルトの名無しさん:2008/09/02(火) 19:44:54
little schemerの継続の所が凄くわかり辛い(関数名からして意味不)
今の段階ではこういうのもあるって知っておく程度で詳細は他の本でカバーしろって事かな?
252デフォルトの名無しさん:2008/09/02(火) 21:00:46
頑張れ、ここで派を食いしばれってこと。
ドリルみたいなもんだから、逃避したら身には付かない。
253デフォルトの名無しさん:2008/09/02(火) 21:07:49
何の発見もない精神論だな
254デフォルトの名無しさん:2008/09/02(火) 21:15:31
結局shiroさんの記事とwikipediaとprogramming language schemeを参考にしましたけどね
255デフォルトの名無しさん:2008/09/02(火) 21:15:31
ドリルでルンルンクルルンルン
256デフォルトの名無しさん:2008/09/04(木) 15:02:19
>>251
具体的にどのページのどれが分からないか書かないとまともなレスは来ないよ常考。
257デフォルトの名無しさん:2008/09/04(木) 23:09:46
継続渡しのネタはP.137-147ですね
あとP.160ー173のYコンビネータのネタもややこしいですね
初見では10章よりも難しく思えましたまる
258デフォルトの名無しさん:2008/09/05(金) 15:46:59
P.137の multirember&co の定義で2つコレクター出てくる。
ひとつは

(lambda (newlat seen)
(col newlat
(cons (car lat) seen)))

もうひとつは

(lambda (newlat seen)
(col (cons (car lat) newlat)
seen))

実は2つとも無名関数で再帰をしている。このコレクターが再帰のたびに別な関数になっていることをちゃんと理解できてるかな?
これが分かるならP.140までは理解できているはず。つまりTenth Commandmentはコレクターを作れってことだよね。実行してみるとこうなる。

http://codepad.org/efWZQKk8

8章のテーマは確かに継続渡しなんだけど、無名関数で再帰することを上手にやるのがコレクターってこと。
9章のネタではさらに再帰のさせ方を工夫してやるとYコンビネータを作れるというお話。

P.137からP.140が理解できればコレクターとYコンビネータを両方とも理解できます。頑張れ。
259デフォルトの名無しさん:2008/09/05(金) 16:08:06
Yコンビネータは memoization に役立つんだけど、それとコレクターは瓜二つで8章・9章のもとネタになっています。
260デフォルトの名無しさん:2008/09/05(金) 16:28:25
>再帰のたびに別な関数になっていることをちゃんと

無名関数で新しい関数が作れることをマクロ内でやれるようになると、プログラムの記述量を物凄く減らすことができる。
SchemeなどのLisp系言語の特徴はプログラムの記述量が少ないこと。これを支えているのが8章・9章の考え方。
ここを理解できると「Lisp脳」の人たちの考え方に近づくことが出来ます。
261デフォルトの名無しさん:2008/09/05(金) 16:45:03
Tenth Commandment・・・Lisp脳で問題を考え直せ
                      ↓
                 ・コレクターを使ってみる
                 ・Yコンビネータを使ってみる
                 ・マクロを使ってみる。

そういえばSchemerシリーズにはマクロの説明が無いね。Reasoned Schemerでは使ってるけど。
262デフォルトの名無しさん:2008/09/05(金) 16:45:52
再帰というか自己参照ね。
それが無限の入れ子になったのが再帰。
263デフォルトの名無しさん:2008/09/05(金) 17:00:17
>それが無限の入れ子になったのが再帰。

有限じゃないと処理が終了しない常考。
264デフォルトの名無しさん:2008/09/05(金) 17:28:36
弱参照も張らずにメモ化とな
265257:2008/09/05(金) 17:53:48
chapter8,9を理解できるのがいまのところの目標であることはわかりますた。
sicp読んでみたけど1.11の反復版の答え見て「なんだこれは」と実力不足は実感しましたし。

Yコンビネータのところは
http://www.ece.uc.edu/~franco/C511/html/Scheme/ycomb.htmlとか
http://dangermouse.brynmawr.edu/cs245/ycomb_jim.htmlみながら読み返してます

collectorについては
8章のmultirember&coは書き出したりしながら雰囲気は掴めたんだけど、最後のeven-only*&coの
一番ネストが浅いcondのelseのコレクターをどうするの?って言うところ(P.146の上から4段目)で
ボブロスばりに答えの(lambda (al ap as)...)ってのが出てくるのが、面喰らいました。

でこれはhttp://practical-scheme.net/docs/cont-j.htmlの末尾再帰と継続って項で説明されてるような考え方を使って
ようやく「なるほど」って思える程度の理解に辿りついた次第であります。

マクロはTeach yourself scheme in fixnum days、Programming Language Schemeのマクロの項
あとOn Lispとpractice schemeのpractical-scheme.netのScheme:OnLispの項を参考にしてます。

elispを一年ぐらい触ってて()に抵抗が無いぐらいは馴染んでるつもりですが、それでもここまで詰まるとは…
やっぱり生のLispってものは怒ろしいものですね。

あとmultirember&coの"&"の読み方がわかったのも収穫です、ありがとう皆
266デフォルトの名無しさん:2008/09/05(金) 17:59:08
弱参照(weak reference)の話を始めたらソフト参照もしなきゃならない。
ここではコレクターやYコンビネータの話をしてるのに。
メモ化(memoization)ですら話が遠くなるからあとにしてくれ。
267デフォルトの名無しさん:2008/09/05(金) 18:00:05
そんな我が儘言われても・・・
268デフォルトの名無しさん:2008/09/05(金) 18:22:31
multirember&co では lambda + collector は2つ使う。
multiinsertLR&co では lambda + collector は3つ使う。コレクターを1つ余計に使うだけ。

evens-only*&coでは lambda + collector は3つ使う。これは multiinsertLR&co と同じ。

multirember&co では a-friend の引数は2つ。
evens-only*&coでは the-last-friend の引数は3つ。コレクターの引数を1つ余計に使うだけ。

>一番ネストが浅いcondのelseのコレクターをどうするの?って言うところ(P.146の上から4段目)で
>ボブロスばりに答えの(lambda (al ap as)...)ってのが出てくるのが、面喰らいました。

そこで詰まるのはプログラミングの概念が原因じゃなくてP.145の3段目が頭に入ってなかっただけでしょ。
分かってるみたいだし気にしないで大丈夫。
269デフォルトの名無しさん:2008/09/05(金) 18:30:38
>>267
オマエ、弱参照が話したいだけだろ。ぼくちゃん知ってるよーみたく。ガキだねw
270デフォルトの名無しさん:2008/09/05(金) 18:34:21
ここはおまえが演説する場所ではない
271デフォルトの名無しさん:2008/09/05(金) 18:40:39
>>270
オマエが弱参照を教えてやれば?
他の香具師は優しく>>257に教えてるぞ。
なんでけんか腰になるかね?
272デフォルトの名無しさん:2008/09/05(金) 18:48:39
>>269 みたいなこと言ってるガキには喧嘩腰が適切
273デフォルトの名無しさん:2008/09/05(金) 18:50:56
>>266
「あとにしてくれ」とか書いてる時点で「おまえの演説」だろ。
ここは私物ではない。
274デフォルトの名無しさん:2008/09/05(金) 18:56:22
負け犬が暴れているようにしか見えないんだがw
275デフォルトの名無しさん:2008/09/05(金) 19:05:47
雑音気にしないで演説続けろ
276デフォルトの名無しさん:2008/09/05(金) 19:26:53
メモリリークの話はHaskellスレでもやってたね。メモ化じゃなくて遅延評価だけど。
277デフォルトの名無しさん:2008/09/05(金) 19:40:48
LLFuture 動画リスト
http://www.nicovideo.jp/mylist/8224180
278デフォルトの名無しさん:2008/09/05(金) 21:44:50
evens-only* (P.144)
http://codepad.org/Ys9BY5CQ

((9 1 2 8) 3 10 ((9 9) 7 6) 2)

((2 8) 10 (() 6) 2)


evens-only*&co (P.145-146)
http://codepad.org/9gVuGqhM

((9 1 2 8) 3 10 ((9 9) 7 6) 2)

(38 1920 (2 8) 10 (() 6) 2)

リストの中にリストがある場合の処理がちょっと面倒でした。
279デフォルトの名無しさん:2008/09/05(金) 23:11:56
>>276
SRFI-45で言及されている問題?
と思ったらHaskellは素朴なグラフ簡約と等価なはずだから違う話かな?
280デフォルトの名無しさん:2008/09/05(金) 23:53:24
multiinsertLR (P.141)
http://codepad.org/KCHE46Ro


multiinsertLR&co (P.141-144)
http://codepad.org/Gx9BpnQx

LとRの値を順番に辿ってみるとどのようになっているのか理解しやすいです。
この例は(col newlat 2 2)
281デフォルトの名無しさん:2008/09/06(土) 17:23:58
Little Schemer Ch.8 >>258, >>278, 280

multirember&co (P.137)
http://codepad.org/efWZQKk8

multiinsertLR (P.141)
http://codepad.org/KCHE46Ro

multiinsertLR&co (P.141-144)
http://codepad.org/Gx9BpnQx

evens-only* (P.144)
http://codepad.org/Ys9BY5CQ

evens-only*&co (P.145-146)
http://codepad.org/9gVuGqhM
282デフォルトの名無しさん:2008/09/06(土) 23:05:55
guile て日本語通る?
283デフォルトの名無しさん:2008/09/07(日) 00:08:34
guileは日本語コードはUTF-8を認識しないけど
Latin-1の範囲の文字をサポートしてるから
マルチバイト文字をユニバイトにばらしたものを使えば
大概は事足ります
文字コードは16進表記ではなく8進表記が使われます

guile> (string->list "こんにちは")
(#\343 #\201 #\223 #\343 #\202 #\223 #\343 #\201 #\253 #\343 #\201 #\241 #\343 #\201 #\257)
284デフォルトの名無しさん:2008/09/07(日) 00:13:20
@Part19
483 :デフォルトの名無しさん:2008/02/07(木) 12:51:51
    guileはutf-8で日本語は使えないのでしょうか?
484 :デフォルトの名無しさん:2008/02/07(木) 20:44:33
    >>483
    > guileはutf-8で日本語は使えないのでしょうか?
    guile> (let ((s "日本語表示テストです."))
    (string? s))
    #t
    guile>
485 :デフォルトの名無しさん:2008/02/07(木) 20:51:57
    日本語が使えるが何を意味してるかによる
486 :デフォルトの名無しさん:2008/02/07(木) 21:12:09
    まあ、日本語なんてこっちじゃ乞食でも気違いでも使ってるからね
487 :デフォルトの名無しさん:2008/02/07(木) 22:59:39
    gosh> (define (日本語が使えますか?) #t)
    日本語が使えますか?
    gosh> (日本語が使えますか?)
    #t
488 :デフォルトの名無しさん:2008/02/07(木) 23:27:38
    日本語schemeキタコレ
489 :デフォルトの名無しさん:2008/02/08(金) 00:20:27
    全角カッコのあつかいはどうなるのでしょうか
490 :デフォルトの名無しさん:2008/02/08(金) 01:27:27
    全角なんてありませんよw
285デフォルトの名無しさん:2008/09/07(日) 00:15:05
497 :デフォルトの名無しさん:2008/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 :デフォルトの名無しさん:2008/02/08(金) 15:26:02
    >>497
    guileではcharacterは8bitだったはず
    (integer->char 256)はエラー
    バイナリデータと文字が混在するファイルを扱う場合は
    こっちのほうが割り切って使えるからいい
499 :デフォルトの名無しさん:2008/02/08(金) 16:31:45
    ちょうどいいからお前らにUTF-8の文字数を数える
    プログラムでも書いてもらおうかな。
    【問題】上のGuileのような文字列のバイト列を
    UTF-8とみなし、その文字数を返す関数を書け。
286デフォルトの名無しさん:2008/09/07(日) 20:28:48
昔のイライザ、ドクターを思い出してしまったよ。
ttp://talk.oyasuminasite.com/

眠れぬ夜は話し相手に。
287デフォルトの名無しさん:2008/09/07(日) 23:32:53
Little Schemerの8章・9章はLispらしい考え方が出来ないと難しく感じる。
8章のテーマは自己参照と継続渡し(コレクター)
9章のテーマは再帰とYコンビネータ
他の言語(例えばRubyとかJavaみたいな手続き型言語)ではあまりお目にかからないから、
一読して直ぐに理解できない人の方が多い。
288デフォルトの名無しさん:2008/09/07(日) 23:43:43
まぁ上のアレを継続渡しといわれても例が悪すぎると思うが
289デフォルトの名無しさん:2008/09/08(月) 00:33:13
>>288
凄くお詳しそうなので継続渡しの素晴らしい例を教えてください。ちょうど悩んでました。
290デフォルトの名無しさん:2008/09/08(月) 00:54:53
>>289
素晴らしいかどうかじゃなくて、
一読して直ぐに理解できるかどうかの話だけど。

「継続」に2個以上の引数を渡すとか、わかりにくいかなと思っただけ。
既に多値を理解していることを前提にしているのかな?
291デフォルトの名無しさん:2008/09/08(月) 02:15:54
>既に多値を理解していることを前提にしているのかな?

してないでしょ常考。Little読んでる人達だから。

『多値』
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E5%A4%9A%E5%80%A4
292デフォルトの名無しさん:2008/09/08(月) 03:49:53
>>287
> Little Schemerの8章・9章はLispらしい考え方が出来ないと難しく感じる。
ではどうしたらLispらしい考え方が出来るようになりますか?
293デフォルトの名無しさん:2008/09/08(月) 04:24:37
>>292
写経
294デフォルトの名無しさん:2008/09/08(月) 12:37:58
>>292
Little Schemerを読む。
295デフォルトの名無しさん:2008/09/08(月) 12:58:12
何その循環依存
296デフォルトの名無しさん:2008/09/08(月) 13:44:53
>>295
(define (写経) (Read-Little-Schemer))
(define (Read-Little-Schemer) (写経))
297デフォルトの名無しさん:2008/09/08(月) 13:51:30
すごいや!Schemeならタダの無限ループだよ!><
298デフォルトの名無しさん:2008/09/08(月) 13:53:57
循環再帰を乗り越えてこそ、Lispらしい考え方が出来るようになれるということでは?w
299デフォルトの名無しさん:2008/09/08(月) 14:46:19
>>298
(define (写経 理解度)(if (= 100 理解度 ) '終了 (Read-Little-Schemer (+ 理解度 1))))
(define (Read-Little-Schemer 理解度) (写経 理解度))
(Read-Little-Schemer 0)
300デフォルトの名無しさん:2008/09/08(月) 16:35:07
(define (写経 理解度)
(if (= 100 理解度 ) '終了 (Read-Little-Schemer (+ 理解度 1))))

(define (Read-Little-Schemer 理解度)
(写経 理解度)
(display 理解度)
(newline))

(Read-Little-Schemer 0)

これを継続(コレクター)で書いてみてください。
301デフォルトの名無しさん:2008/09/08(月) 16:41:03
さすがおまいらw
302デフォルトの名無しさん:2008/09/08(月) 17:54:13
こんな感じでしょうか?

(define (写経 理解度)
(if (= 100 (car 理解度))
(display 理解度) 
(Read-Little-Schemer (cons (+ (car 理解度) 1) 理解度) 写経)))

(define (Read-Little-Schemer 理解度 col)
(col 理解度))

(Read-Little-Schemer '(0) 写経)
303デフォルトの名無しさん:2008/09/08(月) 22:26:09
復習
((lambda (f)
(lambda (g)
(f (lambda (x) ((g g) x))
(lambda (x) ((g g) x)))))
(lambda (写経)
(lambda (理解度)
(if (< 理解度 100)
(写経 (read-little-schemer 理解度))
'終了))))
304デフォルトの名無しさん:2008/09/08(月) 23:36:52
Yコンビネータを使うならこんな感じ。
read-little-schemerも括り出した方がイイけど。

(((lambda (f )
((lambda (x )
(f (lambda (y) ((x x) y))))
(lambda (x )
(f (lambda (y) ((x x) y))))))
(lambda (写経)
(lambda (read-little-schemer)
(lambda (理解度)
(if (< 理解度 100)
(写経 (read-little-schemer 理解度))
'終了)))))
0)
305デフォルトの名無しさん:2008/09/08(月) 23:39:22
まだやってんのかw
306デフォルトの名無しさん:2008/09/08(月) 23:43:51
>>303-304
両方とも
#<procedure>
が返ってくる。
307デフォルトの名無しさん:2008/09/09(火) 01:00:00
(loop
(read 'hyper-spec)
(disassemble (compile nil (write-great-code)))
(read 'ia32-instruction-set))
308デフォルトの名無しさん:2008/09/09(火) 04:04:38
>>302-304
こういうことをやりたかったのかな?

(((lambda (f)
((lambda (x)
(f (lambda (y) ((x x) y))))
(lambda (x )
(f (lambda (y) ((x x) y))))))
(lambda (!)
(lambda (n)
(if (= 100 (car n))
(begin
(display n)
(newline)
(display "終了"))
(! (cons (+ (car n) 1) n))))))
'(0))
309デフォルトの名無しさん:2008/09/09(火) 04:26:26
>>303-304
Yコンビネータを分離した書き方。

(define Y
(lambda (f)
((lambda (x)
(f (lambda (y) ((x x) y))))
(lambda (x )
(f (lambda (y) ((x x) y)))))))

(define (写経 Read-Little-Schemer)
(lambda (理解度)
(if (= 100 (car 理解度))
(begin (display 理解度) (newline) (display "終了"))
(Read-Little-Schemer (cons (+ (car n) 1) 理解度)))))

((Y 写経) '(0))
310デフォルトの名無しさん:2008/09/09(火) 04:36:19
>>281でコレクターをcolと書いてるのでそれに似せて書くなら、Yコンビネータは

(define Y
(lambda (col)
((lambda (x)
(col (lambda (y) ((x x) y))))
(lambda (x )
(col (lambda (y) ((x x) y)))))))

と書けます。
ちょうど>>301の写経というのがコレクター関数みたいになってると考えると分かり易いと思います。
311デフォルトの名無しさん:2008/09/09(火) 04:42:12
もうひとつ階乗計算。

(define Y
(lambda (col)
((lambda (x)
(col (lambda (y) ((x x) y))))
(lambda (x )
(col (lambda (y) ((x x) y)))))))

(define (Fact my-fact)
(lambda (n)
(if (= n 0)
1
(* n (my-fact (- n 1))))))

((Y Fact) 10)

>>310とあわせて考えるとLittle Schemerの9章も理解し易いでしょう。
312デフォルトの名無しさん:2008/09/09(火) 05:11:40
Little Schemerの9章はこんな関数です。

(define Y
(lambda (col)
((lambda (x)
(col (lambda (y) ((x x) y))))
(lambda (x )
(col (lambda (y) ((x x) y)))))))

(define (mk-length length)
(lambda (l)
(cond
((null? l) 0)
(else (+ 1 (length (cdr l)))))))

((Y mk-length) '(Little Schemer Seasoned Schemer Reasoned Schemer))

mk-lengthがコレクター関数みたいになっていて、Yコンビネータを括り出す説明を丁寧に行っています。
そして、コレクター関数というのがやりたいことの大事な部分を抽出したものになっているのも理解できるでしょう。
313デフォルトの名無しさん:2008/09/09(火) 08:38:44
最後に>>281の multirember&co を3引数のYコンビネータを使って書き直しておきます。
http://codepad.org/JS40NwIb

(define Y3
(lambda (M)
((lambda (future)
(M (lambda (arg1 arg2 arg3)
((future future) arg1 arg2 arg3))))
(lambda (future)
(M (lambda (arg1 arg2 arg3)
((future future) arg1 arg2 arg3)))))))

自分でやってみてください。うまく出来たでしょうか?
314デフォルトの名無しさん:2008/09/09(火) 09:40:52
Little Schemer Ch.8 >>281のYコンビネータ(Y〜Y5)

multirember&co (P.137) ・・・ Y3
http://codepad.org/JS40NwIb

multiinsertLR (P.141) ・・・ Y4
http://codepad.org/x4lUHXtg

multiinsertLR&co (P.141-144) ・・・ Y5
http://codepad.org/8vB4xkrZ

evens-only* (P.144) ・・・ Y
http://codepad.org/0uccVIHy

evens-only*&co (P.145-146) ・・・ Y2
http://codepad.org/KbHy4nk9

これを全部見ればYコンビネータに慣れてしまってもう難しく無いと思えるかもしれません。
315デフォルトの名無しさん:2008/09/11(木) 09:54:59
defineはトップレベルや本体の開始においてのみ有効らしいですが、何でですか。

(if #t
  (begin
   (define x 1)
   x))
こんな式を有効にすると何か文法的にまずくなるんですか。
316デフォルトの名無しさん:2008/09/11(木) 14:16:55
スコープが不明瞭になるのでは?
317デフォルトの名無しさん:2008/09/11(木) 14:34:10
そういうのはletを使って欲しいからじゃないか?
318デフォルトの名無しさん:2008/09/11(木) 17:09:32
>>315
コンパイルする処理系で効率落ちるからじゃね?
319デフォルトの名無しさん:2008/09/11(木) 20:36:41
>>315
beginがスコープを作らないのは、複数のdefineを生成するマクロを書くのにbeginを使うため。
たとえば、

(let (...)
 (multi-define-generating-macro)
 body ...)

これが

(let (...)
 (begin (define foo ...) (define bar ...) ...)
 body ...)

こんなふうに展開された時、beginの中だけでスコープが完結したら困る。
320デフォルトの名無しさん:2008/09/11(木) 21:29:48
beginはRnRSで明確に規定されていないし、実際に処理系に依存した解釈がされている。
このスレではGaucheと異なるDrSchemeの処理が異端扱いされたことがあった。
TOPレベルでのbeginの処理についてだったかな。
321デフォルトの名無しさん:2008/09/11(木) 21:53:25
begin中の継続の扱いについてでしたね
322デフォルトの名無しさん:2008/09/12(金) 00:31:38
>>315ですが、これはbeginの話なんですか?
(if #t (define x 1))
これをDrSchemeで評価すると、
define: not allowed in an expression context
となるのですが、なんでdefineがexpression contextで許されないかが知りたいのですが。
323デフォルトの名無しさん:2008/09/12(金) 00:34:48
スコープが不明瞭になるのでは?
324デフォルトの名無しさん:2008/09/12(金) 00:37:24
>>323
もうちょっと詳しくお願いします。
325デフォルトの名無しさん:2008/09/12(金) 00:39:22
defineした x はどの範囲で有効?
326デフォルトの名無しさん:2008/09/12(金) 00:41:27
トップレベルで有効、ということにすればいいと思うんですが。
327デフォルトの名無しさん:2008/09/12(金) 00:43:01
関数内では使えない、トップレベル専用の例外として導入したいということ?
328デフォルトの名無しさん:2008/09/12(金) 00:44:47
はい。
329デフォルトの名無しさん:2008/09/12(金) 00:48:10
静的スコープを旨とする Scheme では、動的にスコープが変わる(たとえトップレベルでも
宣言されているかどうか、という事実が変わる)のは好まれないのじゃないかなあ。
(define x デフォルト値)
(if なんちゃら (set! x ほげほげ))
みたいなんじゃ駄目?
330デフォルトの名無しさん:2008/09/12(金) 00:55:19
>>329
>動的にスコープが変わるのは好まれないのじゃないかなあ。
そうかもしれません。

> 〜みたいなんじゃ駄目?
普通はそうすると思うのですが、疑問に思ったので質問してみました。
331デフォルトの名無しさん:2008/09/12(金) 00:59:35
Gauche原理主義のヤラセでした。www
332デフォルトの名無しさん:2008/09/12(金) 01:11:04
                           _, ,_
                    w  ( ・ω・ )
                    (~)、 /   i  )
                     \ ` |_/ /|
                      `ー_( __ノ |
                       (  `(  、ノ
Gauche原理主義のヤラセでした。www_ノ`i__ノ
333デフォルトの名無しさん:2008/09/12(金) 01:18:46
「DrSchemeはR6RSに対応していました、なぜです?」
         「やむをえんだろう、TOPレベルで継続が出来ない処理系が、何になるか」
   「荒らすことはありませんでしたな、総帥・・・・。」
     ,!   レ'~`'ー-!!   〉-'" ,.r'"   ゙i,        ゙,:.:.:|  -t:r:.、――- 、..:::::::::::
.      ,!   `''ー、, ,! ゙i, / ゙i,-'"     ゙i,        ,r'゙`i,:.|    `"ー‐'''"~:.:.:::::::l:.:.:.
     ,!       ゙ヽ. ゙i /    __   ゙i,     i 'ヽ.i:.l  ,;;''" ̄ ̄:.:.::/:::::::|:.:.:.
    ,!    _,..,_   ヽレ'  ,,、r'_ ヽ.  ゙i,     | /ゝl:.l, ":.:.:.:.:.:.:.:.:.:.:::::::::::::|:.:.:.
     !   ,ri-、-‐、ッ_、ー-r'' <,"ゞ'ノ'' |.:.ヽ. ゙i,  ,r=,、i, i,ヽ,゙i'i :.:.:.:.:.:.:.:.:.:.:.:::::::::::::|:.:.:.
    ,!  ,r':.:|i,   ̄  _,r--、,  ゙̄` ,|:.:.:.:.|ヽ.〉''ゝ=ノ゙i, ヽ.)i,! .:.:.:.:.:.:.:.:..:.:.:.::::::::::|:.:.:.
   ,!  /:.:.:.:i ゙i、  ,r'" l    `ヽ、_/::l:.:.:.:.:|,:'   ,.:' .  ゙i,  λ .:.:.:.:.:.:.:.:.:.:.:.:.:.::::::!;:;:,、
   !. /;;l.:.:.:.:.i  `"     l       :::,!:.:.:.:./'t._,.:'l     `‐'|',  .:.:.:.:..:.:.:.:.:.:.:.:.:.:.:.::':':'
    !/;;;;;;l:.:.:.:.:゙i,      l      ::,!:.:.,:''t./;;;;|      | :':, .:.:.:.:.:.:.:.:,,_____
   〈;;;;;;;;;;゙:,:.:.:.:.:゙i,     ,!     .:/,.,:' ,:':;;;;;;;;;,!      | :.:.':、 .:.:.:.:.:.:.:.:.:. ̄ ̄ ̄
   ゙i,;;;;;;;;;;;;':,:.:.:.:.i'i,     t    ,/:'!,''-');;;;;;;;;;/    .   | :.:.:.ヽ. .:.:.:.:.:.:.:.:.:.:;;;;;;:.:.:
    ゙i,;;;;;;;;;;;;゙ヽイ ゙:,   ',   ,r',:'  ,:';;;;;;;;;ノ        .  | .:.:.:.:.:゙:、 .:.:..:..:.:.:.:.:.:.:.:.:.:
     ヽ、;;;;;;;;;;;|   ヽ、 _,,ノ,ri、、_,,:';;;;;;/         r.'!  .:.:.:.:.;;::゙:、:.:.:.:.:.:.:.:.:.:.:.:.
                            「ふっ・・・冗談はよせ」
    「兄上も意外とあまい様で・・・・。」
334デフォルトの名無しさん:2008/09/12(金) 04:26:31
codepadっていつまでみれるんでしたっけ。
しばらくPCでネット出来なくて、、
335デフォルトの名無しさん:2008/09/12(金) 06:34:30
>>334
心配やったら魚拓とっとけ
336デフォルトの名無しさん:2008/09/12(金) 09:56:18
>>315
自前の処理系では通るよ。
そのdefineはトップレベル束縛。
常識的に考えてbeginにスコープはない。(begin != (let () ...))
337デフォルトの名無しさん:2008/09/12(金) 11:23:04
R5RSに
beginはlambdaから導出されるよ
でも定義は書けないよ
しかもトップレベルのbeginは導出式じゃないよ
なんて書かないで
(CLで言う所の)特別式ってことにすればいいのに
338デフォルトの名無しさん:2008/09/12(金) 11:41:30
僕の肛門もbeginを導出しそうです><
339デフォルトの名無しさん:2008/09/12(金) 12:10:14
>>337
特殊形式を少なくするってのも、
Schemeの初期の設計方針の一つだったからねえ。
意外とトップレベルの意味はややこしくてR6RSへって流れじゃないですかね。
340デフォルトの名無しさん:2008/09/12(金) 12:26:20
実装の都合を無視してデザインの正しさを追求する
Lisperはいつだってそうだ
341デフォルトの名無しさん:2008/09/12(金) 12:32:30
>>340
え?
342デフォルトの名無しさん:2008/09/12(金) 12:40:10
car とか cdr とか
343デフォルトの名無しさん:2008/09/12(金) 13:29:24
>>339
導出できる物はマクロでもいいけど
定義込みのbeginはトップレベルでなくても導出できない
必須だけど導出できない物はプリミティヴで用意しなくてはいけない
beginは必須(マクロ展開後に必要だったりするから)
なのにR5RSまでではbeginがあまりに宙ぶらりん
R6RSはまだよく読んでないけど
344デフォルトの名無しさん:2008/09/12(金) 16:16:08
>>320-321
前スレでの話
http://pc11.2ch.net/test/read.cgi/tech/1211381920/327
>723 名前:デフォルトの名無しさん 投稿日:2008/06/18(水) 23:37:58
>Scheme初心者の俺が通りますよ
>質問なんだけど、トップレベルってなんか特別なの?

>(define cc #f)

>;A
>(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
>(display 'fuga)
>(cc 'moga)

>;B
>(begin
>(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
>(display 'fuga)
>(cc 'moga)
>)

>トップレベルでこーやったとき、Aが無限ループにならないのにBが無限ループになるのが理解できないの...

当時は「Lisperさん」が暴れてて話が途切れてしまったと思う。
345デフォルトの名無しさん:2008/09/12(金) 16:18:10
346デフォルトの名無しさん:2008/09/12(金) 17:37:51
>当時は「Lisperさん」が暴れてて話が途切れてしまったと思う。

Common Lispスレからわざわざ来て「SchemeはLispではない」という人いるね。
推薦図書スレで他の言語厨に同じことやって切れられたんだったね。
347デフォルトの名無しさん:2008/09/12(金) 18:02:36
>>341
たぶん、MITとUCBの考え方の違いを言いたいんだろう。
348デフォルトの名無しさん:2008/09/12(金) 18:18:16
>>336
素朴な実装の処理系なら普通は通ると思うけど、
少なくともR5RSを目指している処理系では本当は通っちゃだめなんじゃ?
349デフォルトの名無しさん:2008/09/12(金) 18:48:20
>>348
自分は336じゃないしRnRSでは通っちゃいけないと思うけど
(define x #f)
(define (foo) (set! x hoge) ...)
みたいなダサい書き方はどうにかならないか、とも思う
CLだと簡単な
(let ((x piyo))
  (defun foo () xにアクセスしたり変更したりするコード)
  (defun bar () xにアクセスしたり変更したりするコード))
みたいなことがどうしてできないのか、せっかくのレキシカルクロージャなのに、とも
350デフォルトの名無しさん:2008/09/12(金) 19:20:18
>>349
古いSchemeでは出来たんですよ。
351デフォルトの名無しさん:2008/09/12(金) 19:43:55
((lambda () (define x 1)))
を評価すると定義の後にexpressionがないといって怒られますが、
なぜ定義だけで終わったらだめなんでしょうか。
意味がないからでしょうか。
352デフォルトの名無しさん:2008/09/12(金) 20:31:58
>>347
理解した。
353デフォルトの名無しさん:2008/09/12(金) 20:46:13
(lambda () )
⇒lambda: bad syntax in: (lambda ())

((lambda () ))
⇒lambda: bad syntax in: (lambda ())

((lambda () (define x 1)))
⇒begin (possibly implicit): no expression after a sequence of internal definitions in: ((define x 1))

((lambda () (begin (define x 1))))
⇒begin (possibly implicit): no expression after a sequence of internal definitions in: ((define x 1))

((lambda () (begin (define x 1) x)))
⇒1

((lambda () (begin x)))
⇒reference to undefined identifier: x

((lambda () (begin 1)))
⇒1

((lambda () (begin )))
⇒begin (possibly implicit): bad syntax (empty form) in: (begin)
354デフォルトの名無しさん:2008/09/13(土) 02:55:51
>>347
>MITとUCB

R6RSを推進してる連中はもっと考え方が違うけどな。
355デフォルトの名無しさん:2008/09/13(土) 03:06:44
>>315, >>322, >>351
なんか質問しっぱなしだね。分かったのかまだ疑問が残ってるのか・・・
defineじゃなくトップレベルのbeginの話だってのはおk?
356デフォルトの名無しさん:2008/09/13(土) 04:21:52
beginを特別扱いするのやめろよ
区別するのはdefineの方だろ
357デフォルトの名無しさん:2008/09/13(土) 05:08:46
>>349
普通はxを外に出さずにこうするだろ?

(define foo nil)
(define bar nil)
(let ((x piyo))
  (set! foo (lambda () ...))
  (set! bar (lambda () ...)))

マクロでくるんで簡単そうに見せるのもなんとかなりそうな気はする。
358デフォルトの名無しさん:2008/09/13(土) 05:31:46
>>356
>beginを特別扱いするのやめろよ

理由は?
359デフォルトの名無しさん:2008/09/13(土) 05:36:02
(define foo)で値未定義だけど、
symbol/variableは存在することにしてくれたら、
意味のある値を設定する前に参照するバグを、
実行時に補足できるのにな。

>>356
トップレベルのbegin特別扱いがないと、
マクロ等でちょっと厄介。例えば>>357
360デフォルトの名無しさん:2008/09/13(土) 05:58:44
>>357
(define foo nil)
⇒reference to undefined identifier: nil

こんなん出ましたw
361デフォルトの名無しさん:2008/09/13(土) 06:23:05
(define-syntax display-line
(syntax-rules ()
((_ a)
(begin
(display a)
(newline)))))

(define-syntax foo!
(syntax-rules ()
((_ a) (set! a "foo"))))

(define-syntax bar!
(syntax-rules ()
((_ a) (set! a "bar"))))

(let ((x 'piyo2))
(display-line x)
(foo! x)
(display-line x)
(bar! x)
(display-line x))
362デフォルトの名無しさん:2008/09/13(土) 06:26:51
(let ((x 'piyo))
(define-syntax foo!
(syntax-rules ()
((_ a) (set! a "foo"))))

(define-syntax bar!
(syntax-rules ()
((_ a) (set! a "bar"))))
(display-line x)
(foo! x)
(display-line x)
(bar! x)
(display-line x))
363デフォルトの名無しさん:2008/09/13(土) 09:13:22
define-syntaxはトップレベルでしか使えない
364デフォルトの名無しさん:2008/09/13(土) 10:50:35
>>363
使えますが何か?
365デフォルトの名無しさん:2008/09/13(土) 10:52:09
366デフォルトの名無しさん:2008/09/13(土) 12:15:52
>>364
define-syntaxは*R5RS処理系では*トップレベルでしか使えない、でよろしいか?
367デフォルトの名無しさん:2008/09/13(土) 12:40:10
>>355
>>315,>>322>>330で一応納得しました。
>>351はこの2つとはまた別のことだと思うのですが?
368デフォルトの名無しさん:2008/09/14(日) 06:21:04
351はinternal-defineを変換するとletrecと等価だから、
bodyがないということで怒られるんだよ。
最近のやつって細かいことにうるさいけど、
肝心のプログラムは作ってるのか?
369デフォルトの名無しさん:2008/09/14(日) 07:25:20
とはいうものの
空理空論にとりつかれる奴はプログラム作ってるか作ってないかに関係ない
まあ共通点は理屈をしっかり勉強してない奴だな
370デフォルトの名無しさん:2008/09/14(日) 12:41:42
>>368
納得しました。
> 肝心のプログラムは作ってるのか?
インタプリタを書いているんです。
質問した式は、素朴に実装した処理系なら普通通ると思いますし、
通ってもそんなに問題にならない気がするのに、DrSchemeでは通らないので疑問に思って質問しました。
確かに細かいことかもしれませんが、だからこそ気になるものじゃないですか?
なぜこんなものまで検出するように実装してあるのかと。
371デフォルトの名無しさん:2008/09/14(日) 12:52:03
規格として許されていないものはちゃんとエラーになってくれたほうが良いという
考え方もあるのだ。
372デフォルトの名無しさん:2008/09/14(日) 14:52:13
黒板の人の不思議:

曰く、

「今日紹介する Allegro eli (Emacs Lisp Interface) はわたしに取って最も大きな理由の1つになります。」

Emacs LispってANSIスタンダードだっけ?

「implementation が言語の semantics を決めるような言語 (perl, ruby, python, etc) は、まじめな開発には使うべきではない。」

implementationが言語のsemanticsを決めているEmacs Lispで書かれた拡張はOK?
それともエディタ類はimplementation が言語の semantics を決めるような言語を使ってても良い?
良く分かんないや。

この論法からすると、Allegroで書かれたエディタ以外ではCLのプログラムさえ書いちゃいけない希ガス
373デフォルトの名無しさん:2008/09/14(日) 15:19:31
(CL -> Scheme) -> (C -> CL)
0が偽をあらわさない。
これは実用面から見ると相当マヌケな仕様でジョークのネタくらいにしかなりません。

> Scheme はその仕様に iteration を持ちません。
call/ccでループすればいいのでは?

> single name space に固執するのは、単に funcall を使いたくないだけ、というひどく 下世話な理由 のみによるのではないかとわたしには思えてなりません。
> そのわりには apply に拒否反応を示さないという自己矛盾に気がついている Schemer というのは少ないように見えます。
(foo x y z) = (funcall #'foo x y z)じゃなくて
(foo x y z) = (funcall foo x y z)ならfuncallがあってもいい。
Schemeのapplyは(foo x y z)を(apply #'foo '(x y z))なんて書かない。
374デフォルトの名無しさん:2008/09/14(日) 15:20:16
(apply #'foo '(x y z)) -> (apply #'foo (list x y z))
375デフォルトの名無しさん:2008/09/14(日) 15:30:43
>>372
ギャグのつもりで言った/書いたのに真面目にとられて大弱り
いまさらギャグでしたとも言えないし
376デフォルトの名無しさん:2008/09/14(日) 15:43:20
なにか懐しい光景だな…最近Schemeはじめた人?
377デフォルトの名無しさん:2008/09/14(日) 16:23:17
>> 372
プロダクトとして残るものを何で作るかとそれを作り上げるために使う道具との
区別もできないのか。一生バイナリエディタでマシンコード直接入力でもやってろ。
378デフォルトの名無しさん:2008/09/14(日) 16:35:12
なにこの今更マジレスの嵐w
379デフォルトの名無しさん:2008/09/14(日) 17:18:23
春だなぁ。
380デフォルトの名無しさん:2008/09/14(日) 19:06:51
冬だろ。
381デフォルトの名無しさん:2008/09/14(日) 21:21:12
やれやれ
382デフォルトの名無しさん:2008/09/14(日) 21:48:01
まあ黒板の人は言うだけ番長ってことで…
383デフォルトの名無しさん:2008/09/15(月) 03:02:51
_____________(
|                   \
|  //  / ̄ ̄ \ ズン    \乂八    へ
|//|  (([]匚●二])) ∧ ズン   | \  | |         \|||/
|ゝ| ̄ ̄|7 (((((曰)))))/  ヽ>     |   )  | |\     \ が   G /
| ____     |=_  )     丿 ι(  ||  |    ― き  a  ―
| |II II II II II|(〇 /◆く丿ヽ/     /     ) | |  |     ― た  u ―
|()⌒| ̄\/_/へ /        | ι   ( 丿   |      ― ぁ  c ―
|人(ξ厂1、巛《丿ー′         |  ι   (   //     ― !  h ―
|    L「 \      |        |      \/ イ     /    e \
|    /|| \◎   || ||\        |         丿人    /|||\
|  / || ||  | ̄|  || || |        \           )       
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \        ん
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\  / ____
                       / ̄ ̄ ̄ ̄ ̄ ̄
                      /
384デフォルトの名無しさん:2008/09/15(月) 03:03:46
__________ _________________________
―――――――――――――――――――― ―――――――――――――    
____    __    ぶちっ!!! _   _ \卩/―へ__ _______
 /||  ⌒ゝ―( )IIIIIIつミ  ̄ ̄ ̄ ̄ ̄――― \/| ▽▽   __ \――――――
 |/\]二( )IIIIIつミ  ̄ ̄ ̄ ̄ ̄ ̄――― ///\ []    |  \ 」―――――
_\  \    _____―――――  ///―― \    |_――U――   ――
  L\  \ \ーヽ  ______― / ̄し ――― ロ|v|ロ 〕――――――___
     \/ 〉/_◎く||          〜巛〈っ     / 凵  \
___ \/\  ^(  \_____   〜 __/  / \  \_________
 ̄ ̄   \_く||_  \_/>、  ̄ ̄――――― / ̄/◎___\  \ _______
_____ ξ◎(   L二二l_______  |/ 丿____ \ \_______
――――― (ξ  \_ ―――――____ / //______ \ \――――― -
______\_/\ヽ\__――――――  l二> ̄ ̄ ̄ ̄―――
            \ ̄ ノ           /二/ニ|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   ̄   ̄ ̄ ̄ ̄ _ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄
385デフォルトの名無しさん:2008/09/15(月) 03:06:13
            77    __
          =<##  / / ̄ ̄ ̄
      ___//_|_/__/
   _ヽ〓\ _/γ⌒ヽ   ____
//  //ヨコ.人_ ̄ノ _//∋.ヽ ̄ ̄ヽ
\\__\\ヨコ_/ ̄ ̄\\∋ノノ__ノ
  ̄     ̄           ̄ ̄ ̄ ̄
「高速で接近する機影があります」
「ザコか?」
「ありえません。通常のザコの3倍のスピードです。」
「ガ、ガウチェだ、、赤い彗星のガウチェだ、逃げろ!」
386デフォルトの名無しさん:2008/09/15(月) 03:07:11
  \  .     .                 /      /
ズ.  \                     . /     /
  ゴ  \                    /    /
    ォ  \         |        /   /
      ォ          |     
      _____、  / ̄‖ ̄\        ∧
...  /      // _(((′  ‖   ...)))__  / ∧
  /      //  ((( ||\__/|| )))   /⌒⌒⌒ \
 /____//   (((\\ ● //)))   し
|/――――     (((((((( ̄ ̄))))))))    し       )
||Γ  ‖ /___. .  \――/   ___し     ノ
|||  ‖l      l   [Е∃]/  l      |_ V ノ
|||_... l__    l .         l    __l  /
||  \  \..    \ ̄\  / ̄/    /  /
     
    /    /                ゴ \   
  /     /                   ォ \  
/      //                     ォ \

「見せてもらおうか、連邦のR6RSの性能とやらを」
387デフォルトの名無しさん:2008/09/15(月) 03:08:47
_________
| _______ | 「プログラミングしてる最中に、どうやってバグに
| |      .   ||        気を付けろって言うんですか?」
| |  / ノノ人..ヽ | |  『大丈夫、あなたなら出来るわ』
| |/  б б \| |
| |\... 人ー人 /| |  「・・・おだてないでください、、。」
| |__.______| |  『カタパルトへ!』
|______□□□|
388デフォルトの名無しさん:2008/09/15(月) 03:14:43
                  入
/ ̄ \            ∧)\
| : あ |           ノ | |  \        / ̄\
| :   |         /| |  | |  )人       | お  |             
| セ あ |       /  | |  |丿 ノ  )      | 高  |
| イ ん |      / 丿  丿     丿丿     |  く  |
| ラ た |    /ι  ̄ ̄\ ))  ∠二 丿      |  と  |
| と  : |  /|  :( ̄ ゚̄ ̄厂 「く ゚丿:       | ま  |
| か : |   |   入__ノ   | ー  l⌒I     |  り  |
| い   > |ι 〃∵      | ∵l⌒I |ヽ   |  や | 
| っ   | ̄ ̄ ̄λ ∵       |   | |||  <  が |
| た   |    / |        〜~  | |||  |  っ |
| よ   |   /  |    -―――′ /  / | |   |  て |
| な   |  /   |\       ´ /  /  /|  \_/
\___/  /丶   | 丶_     /   / / / 
      V   ヽ  |       l′   ′´  〉
             |      |       /
389デフォルトの名無しさん:2008/09/15(月) 05:55:20
おいたはいけませんよ?
390デフォルトの名無しさん:2008/09/15(月) 17:30:26
amd64環境だとmoshがsegvる
391デフォルトの名無しさん:2008/09/15(月) 21:16:23
       \..\./../
       ̄ ̄\|/ ̄ ̄
 | / ̄ ̄\  / ̄ ̄\ |
. |  \__/  \__/ .|
.|_____/\_____.|
| |        ゝ      | .|
|.  |     _____    |  |
|... 人      ⌒      ノ   |

「このタイミングでの継続は古今例がない。」
392デフォルトの名無しさん:2008/09/15(月) 21:17:11
///////////:。/ォ//////。、//*//θ/////////.////////////////
////////////ォ。//*/炎//.//.。//////τ///゜。//*/.//。,////*/
///////。:/ォ//   ヽ//σ/*///////ζ//゜///。、//.゜////////ォ/
/////.///ボ ∠=_  ヽ ))))//\摩擦\ /、。////,//・。、/ォ//
///炎___‖| ● |[] ))))/γ ⌒ ヽ \,////.:/.///////ォ////
///| | ̄ ̄ /[Εヨ]))))))__(     》≫、////.///:;/:///ォ/////
///| |/ // / ̄..  ..Γ  人___ノ\。/.・:/./://///ォ///*//
/.. |/ ̄/ /⌒| |⌒‖ ζ熱=_  \\/、。*//////ォ///.////
//// /.\\|| \/(((((ノ炎/ γ⌒ ◆ヽ///*///ゴ/////////
//⌒ ))//(((((( ̄ ̄((((((((ノ ///..( ○ ヽヽ////////)))////。
/ ○////ォ/|‖| |‖|\\\///\ //////爆\\)))//、//
三/////ォ/// |‖| |‖|\\\\ /////◆―◎ ))))) 。//
///////ォ/////|_‖L_L‖|\\\//////;/◆◆ ̄し))))//
//////ォ///////// \   \      \/./:)))///\      \/
/////ォ/////////////\   \____\))))//////\/ ̄/\_ゝ
////ゴ////////////////((\◆ ◎_/////////////. / ..// //

「少佐ぁ!トップレベルで継続できません!!!!助けてくださいぃ!!!
   shiro少佐ァァァァァッ!!shiroうわぁぁぁっぁぁっぁっぁぁっぁあーーーっ!」
393デフォルトの名無しさん:2008/09/15(月) 21:22:24
面白いと思ってやってるんだろうか
394デフォルトの名無しさん:2008/09/15(月) 21:25:09
   ‖        ‖
   ‖   _   ‖
   |│─ ̄| | ̄│ |_
   |│  │ |  | | \
   /|│_ | |_ | |   \
  | |   │ |   │   │
  | ──/  \─^     |
  |  < \  / ̄ ̄>  │
  | ─__∨__─ヽ  \      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  │| <二>  <二>\  ヽ    < 「すまないクラウン、、、、ザコにはトップレベルで
  // |___/ ̄ヽ__/|    \   |  継続をする能力は、、ない。だが、貴様の死はムダ
 / ヾヽ   └     /(‖    |   |  ではないぞ。R6RSを道ずれにしたのだからな。
 \__|\   ̄ ̄  /( |_─ ̄   \_______________________
      ヽ|\__/ |丿         
395デフォルトの名無しさん:2008/09/15(月) 21:29:49
(define (面白い? AA) (eq? AA 'ガンダム))
(if (面白い? 'ガンダム) '継続でおk)
396373=374:2008/09/15(月) 21:44:56
荒れてるなぁ
372さんの黒田さんネタに373-374でジョークネタで便乗したのがいけなかったんだろうか
だとしたらごめんなさい
397デフォルトの名無しさん:2008/09/15(月) 21:55:37
キチガイに謝る必要はなかろうw
398デフォルトの名無しさん:2008/09/15(月) 22:00:03
道ずれ
道づれ
道連れ
399デフォルトの名無しさん:2008/09/15(月) 22:11:44
R6RSを道ずれにした、というのは、つまり、R6RSがSchemeの進むべき道を逸れた『道からずれた』ものになった、と云うことだったんだよ!!!
400デフォルトの名無しさん:2008/09/15(月) 22:45:10
by 黒田 寿男、(株)数理システム
401デフォルトの名無しさん:2008/09/15(月) 23:03:31
>>397
そう思ってるなら刺激するなYO!
一般的に逝って、脈絡もなく出る罵倒(として使っている)単語は、
その人のコンプレックスを表している。
402デフォルトの名無しさん:2008/09/16(火) 07:58:00
>>401
忙しければ自然とスルーをするけど、時間が余ってれば持て余すからな。結局
そうゆうことだとおもうよ。

さてネタを振るか…。
common lispではslime@emacsがあるけど、schemeではなにをつかってるの?
みんな!
403デフォルトの名無しさん:2008/09/16(火) 08:14:56
>>402
slime使ってるけど何か?
404デフォルトの名無しさん:2008/09/16(火) 15:49:26
なんかグローバルなシンボルを探索して見つからないところでエラー出すコードのあたりで
無効なポインタ参照して落ちてる
$ cat foo.scm
$ mosh -l foo.scm
と空のファイルを食わしてもそうなる
どうなってるんだmosh…
amd64 linux環境なのがいけないのだろうけど、x86 linuxでコンパイルしたmoshは普通に使えるし、
gaucheやpltscheme、chicken、stalinは普通にコンパイル実行できるし
405デフォルトの名無しさん:2008/09/16(火) 16:16:24
ソース読まないことには何とも言えないだろ
分かることと言えばC++で書かれているとかその程度
406デフォルトの名無しさん:2008/09/17(水) 01:30:40
>>404
ポインタの扱いがまずい。
64bit CPUが存在しなかった時代のコードにそういうのがいっぱいある。

moshは…
407デフォルトの名無しさん:2008/09/17(水) 22:43:47
x86_64やG5でもintは32bitなんでしょうか?
64bit環境でプログラミングした事ないからよくわかりませんが
(128bit環境ならありますが)
408デフォルトの名無しさん:2008/09/17(水) 22:46:31
自分の使ってるコンパイラのマニュアル読め
409デフォルトの名無しさん:2008/09/17(水) 23:18:32
64bit環境持ってないもんで
410デフォルトの名無しさん:2008/09/17(水) 23:43:02
環境持ってなくてもマニュアルくらい読めるんじゃね?
411デフォルトの名無しさん:2008/09/17(水) 23:56:56
LP64とILP64で検索
412デフォルトの名無しさん:2008/09/18(木) 08:30:55
>>409
つエミュ
413デフォルトの名無しさん:2008/09/18(木) 20:38:11
414デフォルトの名無しさん:2008/09/18(木) 21:59:46
SECDマシンって面白いですね!
Forthの楽しさとS式の美しさを併せ持ったって感じで。
Schemeで実装するのは簡単なのでCでチャレンジしてます。
当面の目標はシンボルと空リストとペアだけで純Lispならぬ純Schemeです。
とりあえずコピーGCだけ形にしました。
最初はペア書換なし+参照カウントで行こうと思ったのですが
再帰の効率が悪いのと後々遅延評価を取り入れたいと考えたのでGCに変更しました。
415デフォルトの名無しさん:2008/09/18(木) 23:55:53
Schemeの実装って、Schemeだけしか考えないならいいけどCで書かれた
関数を呼べるようにしようとか思うと継続との絡みを考えないわけには
いかないよね。どう解決してるの?
416デフォルトの名無しさん:2008/09/18(木) 23:59:26
417デフォルトの名無しさん:2008/09/19(金) 00:25:36
難しく考えすぎ。
CのスタックとSchemeのスタックは全く別のものだと思えば簡単。
それで困ることはほとんどない。
418デフォルトの名無しさん:2008/09/19(金) 00:50:12
古い話だけどちょっと教えて。前スレで、

ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/588
>>265のambをlet-syntaxするマクロを書いたら、`...' が衝突した
http://codepad.org/FhFcRNhU
>こうですか?わかりません!
http://codepad.org/DOhmrD4x

ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/589
http://codepad.org/DsQGNTC2

ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/590
>PLTの拡張かと思ったがR6RSに書いてあった。

って話があった。
そのヒントに使ってケント.デヴィグ著「プログラミング言語Scheme」p.170を書き換えると
http://codepad.org/yvwb6wvY
こんな風にdoを書くことができた。
そんで思い出したが、Reasoned Schemerのパターンマッチの話でも... ...の置き換えがキモイって言ってたね。
で、調べてみたらココ
http://practical-scheme.net/wiliki/wiliki.cgi?sasagawa%3A%E6%95%B0%E5%BC%8F%E5%87%A6%E7%90%86
でも同じことやってた。でも"step"なんてやってる。
hygienic macroで(... ...)はこう使うのっておかしいのかな?
419デフォルトの名無しさん:2008/09/19(金) 01:03:45
>>417
SchemeとCを相互に呼べるようにしようと思うと
Schemeから呼んだCの中でScheme呼べるようにしたいし
その中で捕捉した継続が外側のSchemeから見えてしまう可能性あるじゃない。
420デフォルトの名無しさん:2008/09/19(金) 01:07:19
421デフォルトの名無しさん:2008/09/19(金) 01:19:25
>>418
Part.21の319-330でそんな話があった。
... ...の置き換えじゃなくて、...が0個でもマッチするとかいう話。
422デフォルトの名無しさん:2008/09/19(金) 04:35:27
423デフォルトの名無しさん:2008/09/19(金) 04:40:47
と思ったら、>>418の貼ってる
http://codepad.org/DsQGNTC2
にpush!とpop!があるのか。Gaucheにもあるし、解決。
424デフォルトの名無しさん:2008/09/19(金) 17:00:42
>>419
極端な話、SchemeからCを呼ぶときは別のスレッドを走らせることにすると
Cの関数を挟む形で継続を捕捉することがなくなる。
・古いスレッドは新しいスレッドが終了するまで待機
・新しいスレッドの継続に古いスレッドの情報は含まれない
・新しいスレッドで古いスレッドの継続を呼ぶと古いスレッドが2個あるような状態になる
という感じで自然に辻褄が合う。

スレッドを使わなくても、難しいこと何も考えないで実装すればこれと同じ振る舞いになるはず。
Cの関数はRnRSの範囲外だから、どんな振る舞いだろうと問題ないと思う。
425デフォルトの名無しさん:2008/09/19(金) 22:21:54
SECDマシンと云えば……

http://www.blue.sky.or.jp/grass/doc_ja.html
こんなのが。
426デフォルトの名無しさん:2008/09/20(土) 19:35:19
教えてください。このforは動くのに、
(define-syntax for
(syntax-rules ()
((_ (var start stop) body ...)
(do ((var start (add1 var)))
((> var stop))
body ...))))

こっちのforは動きません。
(define-syntax for
(syntax-rules ()
((_ (var start stop) body ...)
((do ((var start (add1 var))
(limit stop))
((> var limit))
body ...)))))

どうしてでしょうか?
これは動きます。
(do ((var 1 (add1 var))
(limit 10))
((> var limit))
(display var)
(newline))
427デフォルトの名無しさん:2008/09/20(土) 19:38:31
(for (i 1 5)
(display i))
428デフォルトの名無しさん:2008/09/20(土) 19:48:48
doの返り値をthunkとしてapplyしてるのは意図的?
429デフォルトの名無しさん:2008/09/20(土) 20:03:00
(define-syntax for
__(syntax-rules ()
_____((_ (var start stop) body ...)
______(do ((var start (add1 var))
____________(limit stop))
___________((> var limit))
________body ...))))
430デフォルトの名無しさん:2008/09/20(土) 20:11:13
>>428-429
あ、恥ずかしいw
もちろん非意図的です。
ありがとうございます。
431デフォルトの名無しさん:2008/09/20(土) 20:36:47
(define-syntax for
__(syntax-rules ()
____((_ (var start stop) body ...)
_____(let ((continue #f)
___________(var start)
___________(limit stop))
_______(call-with-current-continuation
________(lambda (x)
__________(set! continue x)))
_______(unless (> var limit)
_________body ...
_________(set! var (+ var 1))
_________(continue))))))

こんな風に書かないと黒田さんに怒られるかも
これならtail recursionじゃなくてiteration
(もちろんジョーク)
432デフォルトの名無しさん:2008/09/20(土) 20:42:04
gensym使った方がlimitに置き換えるより安全化?

(define-syntax for
(syntax-rules ()
((_ (var start stop) body ...)
(let ((gstop (gensym)))
(do ((var start (add1 var))
(gstop stop))
((> var gstop))
body ...)))))
433デフォルトの名無しさん:2008/09/20(土) 20:45:32
doはマクロだからそれだとgensymの返り値は束縛に使われないし
syntax-rulesではgensymを使わなくても変数キャプチャは起こらない
マクロテンプレートの展開より先に評価するトリックはない(はず)
あれば保健的じゃなくなるし
434デフォルトの名無しさん:2008/09/20(土) 20:49:55
syntax-caseの時にはgensym使うのかな?
syntax-caseでも心配ないの?
435デフォルトの名無しさん:2008/09/20(土) 20:52:13
syntax-caseでも心配ないです
436デフォルトの名無しさん:2008/09/20(土) 20:58:27
syntax-caseもそうなんだ。CLより安全だね。
stepに対応したバージョンを考えたw

(define-syntax for
(syntax-rules ()
((_ (var start stop) body ...)
(do ((var start (add1 var))
(limit stop))
((> var limit))
body ...))
((_ (var start stop step) body ...)
(do ((var start (+ step var))
(limit stop))
((> var limit))
body ...))))
437デフォルトの名無しさん:2008/09/20(土) 21:02:09
(for (i 2 10 2)
(display i)
(newline))
438デフォルトの名無しさん:2008/09/20(土) 21:04:29
>>435
リードマクロ
439デフォルトの名無しさん:2008/09/20(土) 21:10:45
(define-syntax for
__(syntax-rules (= to step)
____((_ var = start to stop step i body ...)
_____(do ((var start (+ var i))
___________(limit stop))
__________((> var limit))
_______body ...))
____((_ var = start to stop body ...)
_____(do ((var start (+ var 1))
___________(limit stop))
__________((> var limit))
_______body ...))))

(for i = 0 to 10 (print i))
(for i = 0 to 10 step 3 (print i))
440デフォルトの名無しさん:2008/09/20(土) 21:13:38
(define-syntax for
__(syntax-rules (= to step)
____((_ var = start to stop step i body ...)
_____(do ((var start (+ var i))
___________(limit stop))
__________((> var limit))
_______body ...))
____((_ var = start to stop body ...)
_____(for var = start to stop step 1 body ...))))
このほうがいいか
441デフォルトの名無しさん:2008/09/20(土) 21:16:12
注意
(let ((to #f))
(for i = 0 to 10 (print i)))
は動きません(マクロ使用内リテラル識別子toの束縛がマクロ定義中の束縛と違うから)
もちろんtoが=でもstepでも同じ事です
442デフォルトの名無しさん:2008/09/20(土) 21:33:35
>>440
それいいね。
443デフォルトの名無しさん:2008/09/21(日) 20:06:42
444デフォルトの名無しさん:2008/09/22(月) 06:17:30
なんかはてな人力検索でschemeネタまじえた質問が騒ぎになってるね
http://q.hatena.ne.jp/1221708568
445デフォルトの名無しさん:2008/09/22(月) 06:41:30
>>444
なんていうか、微妙にコミュニケーションスキルの足りない困った人の宴に
Schemeが巻き込まれて可哀相、みたいに思った。

でも、そんなに不正解者が多いのか、そのQ1・・・ちょっと驚き。
446デフォルトの名無しさん:2008/09/22(月) 07:30:42
>>445
これ正しい選択肢ないよね。Schemeに関数無いし。
447デフォルトの名無しさん:2008/09/22(月) 08:12:54
>>444
釣り針大き杉www
448デフォルトの名無しさん:2008/09/22(月) 08:14:03
>Schemeは多くのレンタルサーバに標準でインストールされている

これってプログラミング全然関係ないしwww
449デフォルトの名無しさん:2008/09/22(月) 08:44:49
痛すぎて笑えん
450デフォルトの名無しさん:2008/09/22(月) 10:14:01
>>445
驚くんじゃなくて、
はてなで答えたくてうずうずしている人たちのレベルが、
そういうものなんだという理解をすべき。

ってなんかそこのコメントみたいなレスになっちゃったw
451デフォルトの名無しさん:2008/09/22(月) 10:34:05
>>450
いや、まともな奴はQ1を読んで「馬鹿だコイツ」と判断してポイだろw
452デフォルトの名無しさん:2008/09/22(月) 10:43:59
http://q.hatena.ne.jp/1221584268
ここのQ1も選択肢が^^;
453デフォルトの名無しさん:2008/09/22(月) 10:48:15
>>444
nishioがschemerだと思われてしまってるところに、怖いです。pythonの人でしょう?
454デフォルトの名無しさん:2008/09/22(月) 11:08:43
他の質問も眺めてみたが…
話題にしない方がいいのでは。
逆上して荒されそうな。
455デフォルトの名無しさん:2008/09/22(月) 11:09:38
>>452
完全にギャグだな
456デフォルトの名無しさん:2008/09/22(月) 11:16:59
>>454
schemerへの風当たりを強くしてくれたからね。
457デフォルトの名無しさん:2008/09/22(月) 11:19:43
せめてお友だちや先生に聞けよなってことで
458デフォルトの名無しさん:2008/09/22(月) 14:30:54
質問内容はともかく、回答はボットかプログラミング自体知らないポイントゲッターが
適当に答えてるとしか思えないな。
参考→ ttp://d.hatena.ne.jp/tilfin/20080522/1211510834

履歴見たらshiroさん色んな所で回答しまくってるな。好きなのかな。
それにしてもピアノうますぎ吹いた
459デフォルトの名無しさん:2008/09/22(月) 17:13:46
講師が宿題丸投げしてどうするでFA
460デフォルトの名無しさん:2008/09/22(月) 17:54:46
はてななら職場に電凸する奴がでないから安心?
461デフォルトの名無しさん:2008/09/22(月) 18:03:47
practical-scheme.net落ちてますね
462デフォルトの名無しさん:2008/09/22(月) 18:26:10
これは本気じゃなくてソーカルみたいに狙ってやったんじゃないのか?
463デフォルトの名無しさん:2008/09/22(月) 18:27:41
理由は?
464デフォルトの名無しさん:2008/09/22(月) 18:41:18
はてなアンケートの回答者は本文すらロクに読んでない奴ばかりっていうことを示すためだろ。

http://d.hatena.ne.jp/nishiohirokazu/20080917/1221667941
http://d.hatena.ne.jp/nishiohirokazu/20080918/1221708888
釣られてる連中必死だなw
465デフォルトの名無しさん:2008/09/22(月) 19:53:16
仮に狙ってやったんだとしても
システム的にああなるのは明らかなことで
すでに他の人も指摘してる

つまらん遊びはSchemeと関係ないところでやってくれ
466デフォルトの名無しさん:2008/09/22(月) 20:05:55
(define (ネタ? はてな) (eq? はてな 'Scheme))
(if (ネタ? 'Scheme) 'その釣り針で吊れますか?)
467デフォルトの名無しさん:2008/09/22(月) 22:41:28
はてなにだけは関わらないほうがいいんだということがよくわかった
468デフォルトの名無しさん:2008/09/22(月) 22:54:14
srfi-98
469デフォルトの名無しさん:2008/09/22(月) 23:06:53
おめ
470デフォルトの名無しさん:2008/09/22(月) 23:37:24
>>467
はてな出身者がScheme処理系で売り出し中なわけだが。
471デフォルトの名無しさん:2008/09/22(月) 23:42:39
おまけに、shibuya.lispの母体だw
472デフォルトの名無しさん:2008/09/22(月) 23:50:28
ひげぽんをいぢめちゃだめだよ
473デフォルトの名無しさん:2008/09/23(火) 00:11:30
>>471
はてな村が母体なの?こりゃ駄目だな
474デフォルトの名無しさん:2008/09/23(火) 00:26:08
何が起こったのか理解できないんだが、一体何が起こったんだ?
結構、致命的?
475デフォルトの名無しさん:2008/09/23(火) 00:29:57
馬鹿が馬鹿にされて逆切れした。
476デフォルトの名無しさん:2008/09/23(火) 00:40:40
schemeももうおしまいなのかな。
477デフォルトの名無しさん:2008/09/23(火) 01:05:28
『はてなアンケートの回答者はロクに問題文読んでない』仮説

学生に教えるのに良い言語は?
Coq>Haskellとかいう有り得ない結果

追試だ!


『第一問に答えられない人は答えないで!』
→Scheme は多くのサーバに設置されてるらしい

仮説立証
→問題文読まない子逆ギレ
478デフォルトの名無しさん:2008/09/23(火) 01:14:43
shiroさんのフォローが涙を誘う
アラン・ケイと飯食ったって話はwilikiに詳しく書いてくれるかな。
ちょっと期待。
479デフォルトの名無しさん:2008/09/23(火) 02:02:48
shiroさんのまとめが力強すぎてあとのことはどうでもよくなった
480デフォルトの名無しさん:2008/09/23(火) 02:30:20
「初学者に勧めるのに一番適している言語」の候補と、
「実用規模のコードを書いたことがある言語」
がそもそもPythonとSchemeしかかぶっていない件について。

つまりまずは無駄な物を教えろという事ですかwww?
481デフォルトの名無しさん:2008/09/23(火) 03:02:48
教育用と実用つうのは相反するものです。

基礎をちゃんと固めておけば、どんな言語でもそれなりに対応出来るように
なると思うですよ。
482デフォルトの名無しさん:2008/09/23(火) 03:57:52
じゃあその基礎ってなんなの?
ていう話がもっとでればおもしろかったのにねえ
483デフォルトの名無しさん:2008/09/23(火) 04:03:58
まあBefungeとかはネタだと流石にわかるがCoqとかはネタかマジかの判別にちょっと困るなwww
484デフォルトの名無しさん:2008/09/23(火) 06:42:59
MITもscheme捨てたのか…。pythonでどうやって構文木いじるんだ?
pythonは書くのも読むのも好きなほうだけど、なんだか悲しいよ。
485デフォルトの名無しさん:2008/09/23(火) 08:20:37
今回、誰も得をしないな。ただただ悲しくなっただけだった。
486デフォルトの名無しさん:2008/09/23(火) 08:50:23
基礎はわからないけれど、本質と言うべきものの一面としては、
言語の進化・成長だろう。言語は時代とともに書き換えられて、
より現状に適した形態へと変化する、かね。カッコ良く言えば。

変化を拒んでいたら、取り残されるのは当然だよ。悲しいが。
いい加減転換の時期なんだ。
このままきれいなschemeに固執するのか、それともpythonの
生産性に匹敵するようなschemeにしてゆくのか。
487デフォルトの名無しさん:2008/09/23(火) 09:28:03
綺麗なままライブラリを蓄積していけるようにするんだよ。
488デフォルトの名無しさん:2008/09/23(火) 09:52:05
ライブラリの大部分はC/C++かJavaか.NETに丸投げするだけ。
綺麗なインターフェイスが先行し実装がそれに従うというのは大嘘だな。
489デフォルトの名無しさん:2008/09/23(火) 10:07:18
数学では無駄なものはとことん拒絶される。schemeってそんな感じだよな。
pythonみたいに「バッテリーも付いてて生産性高いよ!」なんてのは
Schemeじゃ無理だ。
490デフォルトの名無しさん:2008/09/23(火) 10:12:09
http://www.kahua.org/download/kahua/2008Fall/WayToGaucheOnRails.pdf
> 慣れればRubyより生産性が高い
だってよ。
491デフォルトの名無しさん:2008/09/23(火) 10:51:44
>>444
> これだからScheme使いは非常識だって言われるんだよ。Lispなんてマイナー言語使うやついるわけねぇだろ。
じっくり読むとじわじわ面白味がわかってくるな、この一行w
492デフォルトの名無しさん:2008/09/23(火) 11:11:24
うちの隣あたりに脳内がshiroさんみたいな美人女子大生が住んでたら楽しそうだな・・・。
493デフォルトの名無しさん:2008/09/23(火) 11:24:24
http://codepad.org/aPduLgln

ねぇねぇ、>>440あたりの見ながらマクロ練習してんだけど、
defineとdefine-syantaxってどう使い分けるのか教えて。
実行速度とか違うもの?どっちが早いの?
インライン展開みたいな使い方ならマクロのほうが速いよね?
処理系によって逆転する程度の速度差なら気にしなくて良い?
494デフォルトの名無しさん:2008/09/23(火) 11:28:47
そのレベルなら速度よりも
まず機能面を重視して学ぶべき。
495デフォルトの名無しさん:2008/09/23(火) 11:30:12
機能面って具体的にいうとどんなこと?
496デフォルトの名無しさん:2008/09/23(火) 11:53:20
>>494じゃないけど横レスするなら
「より汎用性の高いパターン」はマクロ化して、特殊用途なら関数にまとめるってこと。
汎用性の高いパターンあたりの話を機能面と言ってる希ガス。
外してる?
497デフォルトの名無しさん:2008/09/23(火) 11:59:54
>>493
関数であろうとマクロであろうとどのような実装になるかは処理系ごとに違う。
速度に関してはどちらを選ぶべきかは実測しないとわからん。

言語としての一般的な作法としては可能である限りは関数として、
つまり define で定義する方が良いとされてる。

評価のタイミングをコントロールしたいとかいった、
関数では出来ないことが必要になったらマクロを使うのが普通。
498デフォルトの名無しさん:2008/09/23(火) 12:36:13
『汎用性の高いパターンをdefine で定義していって、
どうしても関数で出来ないことが出てきたらdefine-syntaxする。』
という判断基準を決めたと仮定してみる。

例えば、forの例で出てくる「body ...」や「step」といった可変長なことを
パターンマッチするのはdefine-syntaxでOK。
aprintもdefine-syntaxでOK。

でも四捨五入やkeisanは関数で良い。『汎用性の高いパターン』だけど関数で出来ない訳じゃない。
という理解で良いんでしょうか?
499デフォルトの名無しさん:2008/09/23(火) 12:40:42
『汎用性の高いパターン』だけど関数で出来ない訳じゃない場合でも、
マクロ化してインライン展開みたいな使い方で高速化出来るならマクロ化する。

というのも判断基準に加えておけば良いのかな?
500デフォルトの名無しさん:2008/09/23(火) 13:05:01
>>498
「引数評価」のキーワードが出てこないから失格です。
501デフォルトの名無しさん:2008/09/23(火) 13:06:29
こうして誰かがてきとーに作り上げたLisp/Schemeのイメージが
バタフライ効果で大御所クラスの人間の脳まで汚染してゆく。

これがバブルか・・・
502デフォルトの名無しさん:2008/09/23(火) 13:10:02
カオスでしょ
503デフォルトの名無しさん:2008/09/23(火) 13:46:20
>>501-502
マクロ練習してる香具師が最初から完璧に理解できてたらオマエ等自殺するしかないもんなw
504デフォルトの名無しさん:2008/09/23(火) 13:47:20
>>498
関数とマクロは本質的に違うものだ。 汎用的であるかどうかは全然関係ない。
なんでそこで「汎用性」を持ち出すのかまず説明しないと何を知りたいのか曖昧だぞ。
505デフォルトの名無しさん:2008/09/23(火) 14:18:26
>>504
「汎用的」って言葉を使ったのは「繰り返し良く使う共通パターンを抽出したもの」って意味で使いました。
で、そのパターンが「引数評価」の順番によって影響されるか考えてみる。
>>500
「引数評価」の順番はコンパイル時だから、マクロはその前だった。
もし、評価された関数の結果を使うようになってたらマクロ化は出来ない。
そういうときはその結果を除いた別のパターンを見つける。
それで、>>498-499みたいなことを考えるけど、最後まで妙な高速化は考えない。
早い時点で変な最適化をするのは一般的には悪影響を与えることが多いから。
こんな順番で考えるのかな?
506デフォルトの名無しさん:2008/09/23(火) 14:26:25
引数評価の順序よりも、するかしないかが重要。
507デフォルトの名無しさん:2008/09/23(火) 14:35:27
ifをfunctionとして実装したときに起りうる問題は?(from sicp)
508デフォルトの名無しさん:2008/09/23(火) 14:38:32
てことは「defineとdefine-syantaxってどう使い分けるのか」という最初の質問の答えは、
>>506
「引数評価をするかしないか」で使い分けるということか。
>>494が言ってた
>まず機能面を重視して学ぶべき。
というのも「引数評価をするかしないか」という話?
509デフォルトの名無しさん:2008/09/23(火) 14:48:36
BASICもIFステートメントがあるから遅延評価の機能を持ってると言えるのだろうか……?

などという考察を大真面目にしているブログを見つけて吹いた
510デフォルトの名無しさん:2008/09/23(火) 14:50:39
>>507
lambdaさえあれば没問題
511デフォルトの名無しさん:2008/09/23(火) 14:51:12
>>509 まぁそうやって成長してゆくものだ
512デフォルトの名無しさん:2008/09/23(火) 14:56:30
>>507
Exercise 1.6.にAlyssaがnew-ifを使ってsquare-rootを計算したら何が起こるか説明せよとあった。
Special Formの話。

http://codepad.org/OHXrT4yy
やってみると無限ループ。
特殊形式でないと、then部、else部ともに評価を終えた
後で、分岐を評価しようとするので、自分を呼び出す再
帰が使われている場合、無限ループになってしまうから。

じゃあ、特殊形式が必要なときにdefine-syntaxが必要になる?
513デフォルトの名無しさん:2008/09/23(火) 15:10:10
condの引数(笑)を思い浮かべてみろ
評価するってレベルじゃねーぞ
514デフォルトの名無しさん:2008/09/23(火) 15:17:31
>>512のつづき
http://codepad.org/3KaPqn6k
最初の例ではthen部かelse部が必ず無限ループになったが、
define-syntaxを使うことで回避できる。
515デフォルトの名無しさん:2008/09/23(火) 16:03:14
停止しないのは作用的順序で評価を行っているから。
引数のsqrt-iterを次々と展開している。
関数の呼び出しは引数の評価が先に行われるが、
マクロの場合は先頭から展開されるため、このような形の再帰呼び出しはマクロではできない。
もっとも、new-if関数だって遅延評価で使えるようにできるが>>509が言うように、
IFステートメントがあるから遅延評価の機能を持ってると逆に考えてはいけない。
516デフォルトの名無しさん:2008/09/23(火) 16:11:41
評価順序は、MLやSchemeのような作用順序の言語と、
Haskellなどの正規順序で評価する言語では異なる。
new-if関数のような問題は作用順序の言語で起こる。
517デフォルトの名無しさん:2008/09/23(火) 16:13:58
condの引数(笑)は遅延したぐらいではどうしようもないぞ
518デフォルトの名無しさん:2008/09/23(火) 16:37:10
ifが特別式じゃなければいけない理由と
condがマクロじゃなければいけない理由は違うでしょ
519デフォルトの名無しさん:2008/09/23(火) 17:42:45
>>512のelse部が必ず無限ループになるのはこの式で
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
sqrt-iterが次々と開かれるためにおこる。condは関係ない。
だからnew-if関数が遅延評価であっても同じく次々と開かれるので無限ループ。
>>515の遅延評価の機能を持ってると考えてはいけないのはそういう意味。
new-if関数は遅延評価で使えるようにできるわけではない。
520デフォルトの名無しさん:2008/09/23(火) 17:59:40
これは、sqrt-iterをマクロにしても同じ。
http://codepad.org/yt4cs2s9

new-if関数が>>514の時に無限ループにならないのは「if and only if」の条件になっている。
my-ifの場合のシンボルは特殊形式と同じ働きになる。
>>494の言っていた機能面とはまさにこのこと。
521デフォルトの名無しさん:2008/09/23(火) 18:29:10
Scheme は括弧の中身を全て評価して括弧の外に値を返す関数と、それ以外の働きをする特殊形式 からなっています。
特殊形式には今見た if のほかに lambda, define, quote, set! などがあります。

関数では、先頭要素が手続きだからそれ以外の要素を先に評価し、それから先頭の手続きに引数を適用します。
平たく言えばSchemeでのマクロとは、特殊形式を定義することに他なりません。
マクロは呼び出し時の形式がsyntax-rulesの形にひっかかったとき、本体が適用される仕組みですから、
sqrt-iterが次々と開かれるためにおこる無限ループを避けることが出来ます。
Common Lispでは特殊形式とマクロという区別があります(した?)が Schemeでは両方構文として扱われます。
522デフォルトの名無しさん:2008/09/23(火) 18:54:48
関数適用では call by value に従ってあらかじめ全部の引数を評価するが、
そうしないで特殊な処理をするのがシンタックス形式である。
特殊手続きじゃないnew-ifは、trueの時の式もfalseの時の式も両方簡約して
から評価しようとするため、sqrt-iterを再帰的に処理して引数を評価ようとする。
そのため無限ループに落ちいってしまう。
my-ifマクロではこのような簡約は起こらず、マクロ展開が行われてお仕舞である。
523デフォルトの名無しさん:2008/09/23(火) 22:55:50
関数の評価順序についてはSICPのEX 1.5の問題から始まっている。
(define (p) (p))

(define (test x y)
(if (= x 0)
0
y))

(test 0 (p))

最後の式を実行した時どうなるか?

正規順序で評価する(Haskellなどの言語の)場合、非演算子の(p)を
必要になるまで「完全に展開し、簡約しよう」とはしない。その為に、
展開が行われないで無限ループにならないですむ。必要になったら述語を
最初に評価し、その結果if文の0だけ評価することを決める。(p)は無視される。

ところがこれをSchemeで実行すると、非演算子の0と(p)を「評価して作用させ」
ようとする。よってif文の(p)が次々と展開されで無限ループになる。
マクロを作成する時にはEx1.6とEx1.7のエラーには気をつけるべき。
524デフォルトの名無しさん:2008/09/23(火) 23:17:56
(define-syntax p
(syntax-rules ()
((p) p)))

今度のはマクロでこうは書けない。マクロに出来ない例?
525デフォルトの名無しさん:2008/09/23(火) 23:31:12
正規順序で評価する(Haskellなどの言語の)場合、チャーチ・ロッサーの定理により
「正規形が存在すれば必ず正規形(β簡約可能項を持たない項)に到達する」
という正規化戦略が保証されている。
従って、簡略戦略は,作用順序のSchemeでは停止性について責任を持たねばならぬが、
正規順序の言語では停止性が保証されているのである。
この話はこのスレでよく挙げられる "To Mock A Mockingbird" にも出てくる
ラムダ計算の話である。
526デフォルトの名無しさん:2008/09/24(水) 01:24:34
Schemeは作用順序の言語だから、関数であれマクロであれ停止性については
責任を持たねばならない。ただし、関数は完全展開するがマクロはマクロ展開
までしか展開しない違いがある。
「defineとdefine-syantaxってどう使い分けるのか」という最初の質問に対する
ひとつの答えは、この違いが決定的に重要ならマクロにするべきということ。
そうでない限りは関数のままでおいた方が良い。最適化が効くことが多いから。
他の理由は、アナフォリックマクロやマクロ生成マクロなどが挙げられる。
527デフォルトの名無しさん:2008/09/24(水) 22:18:40
>正規形(β簡約可能項を持たない項)に到達する
んでもって、その式が閉式でアリティ0だったら
その式はカノニカルな式、というわけですね?
528デフォルトの名無しさん:2008/09/24(水) 22:32:43
ていうか、ただ単に4章よくわかってないことに気づいたから、
ちゃんと読んで質問しようと思ってただけなんだけどね。
529デフォルトの名無しさん:2008/09/24(水) 23:21:02
それに、実のところ、回りが思っているほど大したことには
なっていないと思うよ。
530デフォルトの名無しさん:2008/09/25(木) 13:45:50
pythonと連携できるlispさがしてたら
http://www.call-with-current-continuation.org/
こんなのみつけた
これってマイナーな言語なの?
他で使ってたプログラムの流用はできない?
531530:2008/09/25(木) 13:47:36
テンプレにはいてったのか
すまそ
532デフォルトの名無しさん:2008/09/25(木) 13:50:38
common lispからschmeに乗り換えようと思った理由ってなんでしょうか?
533デフォルトの名無しさん:2008/09/25(木) 14:04:55
継続とtail jumpが楽しい。
534デフォルトの名無しさん:2008/09/25(木) 14:05:00
末尾呼出しの最適化、継続、単一名前空間といった言語特性も大きいけど
本当のところは「言語規格準拠で、様々なCPU、様々なOSで動くポータブルな処理系がCLになかった」から
もしかしたらLisperとしてよちよち歩きの頃にポータブルなCL処理系があったらSchemerになることもなかったかもしれない
Lisperとしての自我が芽生える前にCLにフられて(というか自爆)、目の前にいたSchemeに惚れて以来一筋
535534:2008/09/25(木) 14:06:42
あとCISCよりもRISCスキーだったから
よりシンプルな物が好きだったという傾向も影響してるかも
R3000が好きだし
536デフォルトの名無しさん:2008/09/25(木) 14:24:29
>>444を読んでScheme(LISP)に興味を持ちました。
まずは無料で手に入るSICPを読もうと思います。

普段はVBA、Java、趣味でRubyです。
537デフォルトの名無しさん:2008/09/25(木) 14:42:44
maximaに相当するものがschemeにあるなら乗り換えるのだけどなあ
538デフォルトの名無しさん:2008/09/25(木) 15:39:56
用途次第でどっちも使えばいいんじゃないの?
俺はそうしてるが。
539デフォルトの名無しさん:2008/09/25(木) 16:10:24
どうしてもCommon Lispでないとだめな用途って何だろう。
コンパイラかな?
540デフォルトの名無しさん:2008/09/25(木) 18:13:16
>>539
どうしてもSchemeでないとだめな用途って何だろう。
こくばんかな?
541デフォルトの名無しさん:2008/09/25(木) 20:50:55
>>537
作ってみない?
数学の勉強にもなるし。
といいつつ、わたしゃ途中で挫折している。
数式処理は簡単化がめんどい。
542デフォルトの名無しさん:2008/09/25(木) 22:08:26
543デフォルトの名無しさん:2008/09/25(木) 23:32:29
>>542
compact-number-listの逆関数キボンヌ
544デフォルトの名無しさん:2008/09/26(金) 00:48:29
マクロ生成マクロ
http://codepad.org/PYA73S1q
545デフォルトの名無しさん:2008/09/26(金) 01:09:01
>>543
色々いじっていたらこんなになった
(lambda (xs)
(define (foo x y z)
(if (= x y) (cons x z) (foo x (- y 1) (cons y z))))
(let fold
([f (lambda (x z) (if (pair? x) (foo (car x) (cdr x) z) (cons x z)))]
[z '()]
[xs (reverse xs)])
(if (null? xs) z (fold f (f (car xs) z) (cdr xs)))))
546デフォルトの名無しさん:2008/09/26(金) 01:22:04
アナフォリックマクロ
http://codepad.org/JcuniUhD
547デフォルトの名無しさん:2008/09/26(金) 01:36:21
>>545
d。このS式は便利かも。
http://codepad.org/Xye6JwUI
548デフォルトの名無しさん:2008/09/26(金) 02:10:17
>>537
数式処理ならJacalは? http://people.csail.mit.edu/jaffer/JACAL
549デフォルトの名無しさん:2008/09/26(金) 14:24:46
>>548
installしてみた
今年の3月に出たソフトなのか
wxmaximaみたいなGUIないのかな
maximaのto_lisp();
でlisps層に降りて作業できるけど、それに相当するのみつけられなかった
550デフォルトの名無しさん:2008/09/26(金) 16:18:00
>>549

自己レスです
maximaに相当する機能が一通りあるようです

maximaのto_lisp();
=
jacalのqed;

(to-maxima)
=
(math)
551デフォルトの名無しさん:2008/09/26(金) 18:45:33
>>549
いや、Jacal自体はMS-DOSでも走ってたくらい古いソフト (当時から全てSchemeで書かれてた)。
だからあんまり機能は豊富じゃないと思う。枯れてるとは思うけど。

552デフォルトの名無しさん:2008/09/26(金) 19:14:24
Jacalってscmですよね
scmはかなり軽いから常用したいんだけど
ビルド周りが泥臭くて
ちゃんとビルドできてるんだかどうだかわからなくて不安。
OSのパッケージ版でさえ不備があるくらい。
Bignum周りも微妙だし有理数もない。
Guileがscmくらい軽いといいんだけど。
553デフォルトの名無しさん:2008/09/26(金) 20:31:23
554デフォルトの名無しさん:2008/09/26(金) 21:25:50
common-lisp で .so か .dll 作って c から呼びたいんだけど、
商用の処理系じゃないと無理?
555デフォルトの名無しさん:2008/09/26(金) 21:43:12
556デフォルトの名無しさん:2008/09/27(土) 14:40:08
百年の言語がFFIでC++を呼んだりすると思うか?

って誰かが言ってたが、
新しい技術を恐れるなとか言いつつ
古いものを使い続けることに恐怖を感じているのだとしたら、間抜けだ
557デフォルトの名無しさん:2008/09/27(土) 14:44:07
誤爆乙
558デフォルトの名無しさん:2008/09/27(土) 15:46:59
>>556
百年で思い出したが、なんとか2056年まで生きたい。
Lisp生誕百年だ。どうなっているのか?
実装レベルで考えると今ちょうど50年だね。
559デフォルトの名無しさん:2008/09/27(土) 16:03:49
きっと3000年問題で困ってそう
560デフォルトの名無しさん:2008/09/27(土) 20:49:09
950年も先の事で困りますかね?
561デフォルトの名無しさん:2008/09/27(土) 22:22:03
50年後はマイノリティリポートみたいに
なんかオブジェクトを手で動かして作るんだよ
言語なんてなくなってる
562デフォルトの名無しさん:2008/09/27(土) 22:45:12
パッチとか送るの大変そうだなw
563デフォルトの名無しさん:2008/09/27(土) 23:03:06
量子コンピューターでも現れない限り、
0,1とは付き合わざるを得ないし、
アセンブラも消えないはず。
高級言語CPUが一般的になったら変わるのかな。
564デフォルトの名無しさん:2008/09/27(土) 23:30:10
人間がプログラムを組むのではなくて
プログラムを組むプログラム を組むプログラム を組むプログラム… を組むプログラム を人間が組む
になる
人間側インタフェースは完全に自然言語ベースになっていくでしょう
565デフォルトの名無しさん:2008/09/27(土) 23:43:02
無理だな
数式は自然言語だというオチならあり得るが
566デフォルトの名無しさん:2008/09/27(土) 23:54:19
時は西暦2045年・・・
ソフトウェア会社社長「プログラムを組むプログラムが完成したので
おまえらプログラマは全員解雇な。既に競合他社は人間を全員クビにして
高い生産性、少ないバグ、人件費削減を達成してるんだ」
567デフォルトの名無しさん:2008/09/28(日) 00:33:05
1000万行のプログラムを数KBのテキスト(自然言語?)に圧縮できるとか
全ての定理を少数の公理から導けるとか

情報理論っておもしろいなw
568デフォルトの名無しさん:2008/09/28(日) 00:52:41
メタプログラマとかメタメタプログラマとか出てくるのかな
Lispは姿を変えて残ってるだろうね、本質が数学なものは長生きするよ
569デフォルトの名無しさん:2008/09/28(日) 18:34:30
>>566
最終的にはすべての仕事をプログラムが行うようになる。
でも、バグがないプログラムを作ることはできないので、そのプログラムを
メンテする人が最後の職業となる。
その人はアーキテクトと呼ばれるバグを取り除くだけの簡単なお仕事です。
570デフォルトの名無しさん:2008/09/28(日) 18:36:38
少なくとも俺が生きてる間は実現せんだろうな
571デフォルトの名無しさん:2008/09/28(日) 20:34:11
人間とコンピュータがくっついてしまって、どこからどこまでが人間で
どこからがコンピュータなのか、きっと区別がつかなくなってると思う。
したがってプログラミングなんぞ存在しないと言えば存在しないし、
有ると言えば有るとも言える状態になっているだろう。

西暦2500年くらいには…
572デフォルトの名無しさん:2008/09/28(日) 21:09:14
>>571
はいはいサイバーパンクサイバーパンク
573554:2008/09/28(日) 22:42:01
>>555
ありがとうございます。ライセンスがよくわからなかったのですが、
コンパイル後の実行ファイルもGPLになるんでしょうか?
574デフォルトの名無しさん:2008/09/28(日) 22:49:43
ECLはLGPLだし、作ったものは自分の好きなライセンスでいいんじゃない?
libecl は LGPL って点に気をつければ、かなり自由だと思われ。
575デフォルトの名無しさん:2008/09/28(日) 22:57:22
>>574
thx. スタティックリンクしなければ好きなライセンスで大丈夫なんですね。
576デフォルトの名無しさん:2008/09/29(月) 14:24:08
>>554
cffi

>>556
c++呼びたいなら

Verrazano
http://common-lisp.net/project/fetter/
577デフォルトの名無しさん:2008/09/29(月) 17:45:55
>>576
> >>554
> cffi
cffiでどうやってdllを作るのか詳しく
578デフォルトの名無しさん:2008/09/29(月) 20:20:36
ここにgccでsoを作ってLispで使う方法が書いてある。
http://lispuser.net/memo/lisp/2006-04-16-04-32.html
http://lispuser.net/memo/lisp/2006-04-19-05-00.html

でも>>554の求めてるのはdllを作ってCで使いたいから逆か・・・
579デフォルトの名無しさん:2008/09/29(月) 20:51:51
ちゃんと書き込む前に良く嫁
580デフォルトの名無しさん:2008/09/30(火) 01:29:26
なあ、ここの住人ならWinnyレベルのソフトなんて朝飯前で作れちゃうんだろ?
581デフォルトの名無しさん:2008/09/30(火) 01:52:32
まぁ、「技術的に難しくて作れない!」って奴がいたらアホだな。
582どうぞお引取りを:2008/09/30(火) 01:53:55
作れないよ。
もしくは、作れても作る気は全くないので作れないのと同じと思ってくれたまえ。
583デフォルトの名無しさん:2008/09/30(火) 01:54:59
ゴキブリを素手で掴むレベル。
584デフォルトの名無しさん:2008/09/30(火) 02:00:50
>>583
云い得て妙な。
585デフォルトの名無しさん:2008/09/30(火) 02:27:55
金子氏がスゲーと言えるのは技術力よりかはアイディアだな
いくら元ネタにFreenetがあったとはいえ、
当時Winnyを着想するのは・・・・・・やはり天才と言わざるを得ない
586デフォルトの名無しさん:2008/09/30(火) 04:18:52
windowsというプラットフォームならではの発想
linuxとかでああいうソフトは無理
587デフォルトの名無しさん:2008/09/30(火) 09:06:08
うーんプラットフォーム依存なのかな〜
588デフォルトの名無しさん:2008/09/30(火) 10:48:04
>>577
普通にCから呼ぶdll作れば
clからも同じ名前で呼べたはず
ただしextern "C"でcにしないとだめ
589デフォルトの名無しさん:2008/09/30(火) 10:52:50
maximaからJcalへの移行を検討してみたけど
maximaのplot機能を置き換えることができなさそう

lisp:(cffi::hoge)

ができないのもちょっと気になる
590デフォルトの名無しさん:2008/09/30(火) 11:26:16
>>588
だから質問文良く読めよ。

CL"で"dll作るって書いてあるだろ。お前の目は節穴か。そうか。
591デフォルトの名無しさん:2008/09/30(火) 11:33:57
>>590
逆向きなのね。
592デフォルトの名無しさん:2008/09/30(火) 11:37:41
>>590
まぁ質問文はよく読むべきだが、単なる見間違いのレベルで熱源反応出さんでも。
593デフォルトの名無しさん:2008/09/30(火) 12:30:37
すまん、気付く云い過ぎた。

いや、上の方でも同じ事指摘されてるのに同じ間違いをしてるから、ついカッとなってやった。今は反省している。
594デフォルトの名無しさん:2008/09/30(火) 12:58:02
仕事上でもよくあることです。
595デフォルトの名無しさん:2008/09/30(火) 13:00:37
CLerはexeは作れないという思考停止状態だからな
exeも作れんのにdllなんて作れるわけがない
596デフォルトの名無しさん:2008/09/30(火) 14:19:50
何と脊髄反射の多いスレ
597デフォルトの名無しさん:2008/09/30(火) 18:01:10
ループを末尾再帰でシンプルに記述した!なんて思ってしまう人間がいる。
実はその試みは問題を複雑にしただけだ。まずそこに気付いて欲しい。
相互末尾再帰はgotoよりも始末が悪く、デバッグすらままならない。
デバッグするには、全てを普通の再帰に戻す。これでやっと理解できる
レベルに落としこめる。脳は日常的にスタック構造に慣れているからだ。
では末尾再帰にも慣れればよいのでは?という反論がありそうだが、
そんな概念が日常に出てくる事があるだろうか。
残念ながら思いつかない。
598デフォルトの名無しさん:2008/09/30(火) 18:07:56
パフォーマンス的に見ても、自分で必要な箇所でループや
スタックを明示的に使った方が速いのは明らかだ。

schemeは構文を少なくする代わりに、意味を重複して持たせている。
例えばクロージャと関数の同一視、これに継続も含めると、
自分で作った関数がどのように使われる事があるか、全く予測が付かない。
これではバグの予防すら困難だ。
意味が重複する事で、自分の意思が込められない。
構文を少なくまとめるよりも、構文1つの意味を単純にするべきではないだろうか。
構文だけ見てdoの繰り返しが末尾再帰だと気付く人間が、
一体どれだけいるだろうか。
わざわざ末尾再帰だと規定する必要もどこにあるだろう。
コードにプログラマの意思を込められなければ、
それは良い言語とは言えないのではないか。
599デフォルトの名無しさん:2008/09/30(火) 18:09:24
持論の開陳は御自分のサイトでお願いします^^
600デフォルトの名無しさん:2008/09/30(火) 18:19:43
開発者への負担が大きい言語は大抵その辺りのジレンマで破綻するよな
601デフォルトの名無しさん:2008/09/30(火) 19:06:55
自分はSchemerなんですけど、ここ数日Emacs Lispのプログラムを書いてます。
597-598さんとは逆にループでプログラムを書くのに苦労してます。
末尾再帰最大の利点は参照透明性を保ちつつ変化する値を扱える点だと思います。
継続の特別扱い(末尾文脈でなくても継続を破棄すること)は自分もおかしいとおもいますけど。
Wilikiでも前に話題になってた「なぜcall/ccが副作用をもたらすのか」の原因にもなってると思います。
602601:2008/09/30(火) 19:26:40
ちょっと間違い。
参照透明性+値の変化はふつうの再帰でも扱えますね。
定数空間でそれを行えるのが末尾再帰の利点ですね。
603デフォルトの名無しさん:2008/09/30(火) 19:33:30
???
604デフォルトの名無しさん:2008/09/30(火) 19:34:31
おれは逆にfor文を書くのが苦痛で仕方ないんだが。
>>598 のような感性があることは認める。だがそれをむやみに一般化しないでくれるか。
世の中には少数ながら、再帰とTCOの方が自然に考えられる変な種類の人間がいるのだ。
605デフォルトの名無しさん:2008/09/30(火) 19:42:35
forが駄目ならloop, iterate, seriesマクロを移植して使えばいいじゃない
606デフォルトの名無しさん:2008/09/30(火) 19:46:57
マチルダさん<あなたはLisperかもしれない
Lisperはニュータイプなんだろうか?オールドタイプなんだろうか?

TCOの意味がしばらくわかりませんでした。
607デフォルトの名無しさん:2008/09/30(火) 20:02:30
末尾再帰でループすると多重代入みたいになる。
代入の順序が前後するのが嫌なときは使える。
608デフォルトの名無しさん:2008/09/30(火) 20:07:24
forが嫌いだとjavaやCがつらいだろうな〜…
609デフォルトの名無しさん:2008/09/30(火) 20:28:15
JavascriptのforEachは好き
610デフォルトの名無しさん:2008/09/30(火) 20:43:28
Pythonのforは好きですね
611デフォルトの名無しさん:2008/09/30(火) 20:54:17
forは好きだけど、なぜかlisp系で使おうという気にならない。
と言うわけでお前らloopを使おう。
612デフォルトの名無しさん:2008/09/30(火) 21:27:47
それはよくない、それはよくないよマチルダさん!
613デフォルトの名無しさん:2008/09/30(火) 21:45:02
loopってマクロでしょ?中身何でできてるの?
614デフォルトの名無しさん:2008/09/30(火) 21:57:29
>>613
括弧とスペシャルフォーム
615デフォルトの名無しさん:2008/09/30(火) 21:58:06
loopマクロはCっぽい手続型DSLをS式に変換する500行未満で書ける小規模のコンパイラだよ
schemeで実装した原始lispと大体同じ作り
DSLをパーズして一つのS式に畳み込んでゲロるだけ
616デフォルトの名無しさん:2008/09/30(火) 22:12:04
その調子で全部Cっぽい手続型DSLにしてしまうのはどうだろう
617デフォルトの名無しさん:2008/09/30(火) 22:14:05
loopは超一流のギャグだ
あれを実装しようとすると心の底からイラつく
618デフォルトの名無しさん:2008/09/30(火) 22:19:48
iterateの方が簡単かもな
619デフォルトの名無しさん:2008/09/30(火) 22:58:50
>>615
500行未満って小規模なのか?loopとformatは実装しろと言われたら泣くw

でもひげぽんの問題も、loopでの回答が一番美しいな。
ttp://d.hatena.ne.jp/higepon/20080925/1222326246
620デフォルトの名無しさん:2008/10/01(水) 06:21:30
Yow! Loop macrosでググれ。
Comp.Lang.schemeの記事が見つかる。
それをコピペすれば解決。
621デフォルトの名無しさん:2008/10/01(水) 18:35:53
>>620
d。loopを使ってみた。そのページのは長いので改造した。
lisp系なのにreturnとか笑えるw
http://codepad.org/QeJlUSpa
622デフォルトの名無しさん:2008/10/01(水) 18:49:11
lisp系の良い所は末尾再帰でもループでも使える自由度にあるわけで、
ループじゃなきゃ駄目とか末尾再帰じゃなきゃ駄目と言ってるのは
使う側の問題であって処理系の評価には全く関係ない。
そんなことも理解できないで文句言ってる奴は腕が無さ杉。
どの言語を使っても大した仕事は出来ないだろうね。
623デフォルトの名無しさん:2008/10/01(水) 18:57:56
returnは書かなくていいがcontinueを律儀に書くのが末尾再帰
624デフォルトの名無しさん:2008/10/01(水) 19:35:36
繰り返しマクロ(このスレで出てきたもの)

>>418 do
http://codepad.org/yvwb6wvY

>>436-441 for
http://codepad.org/pHIilEjT

>>621 loop
http://codepad.org/QeJlUSpa

※ iterate, seriesマクロも募集
625デフォルトの名無しさん:2008/10/01(水) 20:32:08
唐突ですみませんが...

Schemeで会計ソフトって作れますか?
626デフォルトの名無しさん:2008/10/01(水) 20:54:17
話ぶったぎってすまないけど質問
いまだにScheme脳になりきらない俺なんだが

int line[100][100]; // なんか適当な値が入ってる

------------------
int out[100];
int i, j;

(for i = 0; i < 100; i++){
out[i] = 0;
for(j = 0; j < 100; j++){
if(i != j){
out[i] += line[i][j]
}
}
}

return out;


上記みたいなイメージの処理で2次元配列ぐりぐり回してなんか処理したいけど(= i j)のときは処理しないよみたいなことがしたいときってどうやって書けばいいと思う?
outをリストにしてlineをリストのリストにしてそれぞれiotaで添え字作ってzipでまとめてぐだぐだぐだーな処理を書いてみて流石に頭が悪すぎるだろうと思ったけどいい考えも浮かばなかった
誰かかっこいいネタくれ
627デフォルトの名無しさん:2008/10/01(水) 21:10:58
話ぶったぎってすまないけど

と思ったら書くな
628デフォルトの名無しさん:2008/10/01(水) 21:17:23
話ぶったぎってすまないけど

特に書き込むことなかった
629デフォルトの名無しさん:2008/10/01(水) 21:44:53
if (i == j) continue;

ところでCで書くんですか?Schemeで書くんですか?
630デフォルトの名無しさん:2008/10/01(水) 21:48:35
Schemeで書いてもらえると非常に嬉しい
Common Lispとかだとちょっと嬉しい
631デフォルトの名無しさん:2008/10/01(水) 21:53:24
最初に行列の対角成分を0で上書きするね俺なら
632デフォルトの名無しさん:2008/10/01(水) 22:37:05
vector使って二重doでグリグリやるってのは?
doを使うとSchemeらしくないけど。
633デフォルトの名無しさん:2008/10/01(水) 22:37:26
>いまだにScheme脳になりきらない

>lineをリストのリストにして

むしろ重症だと思うぞ。
634デフォルトの名無しさん:2008/10/01(水) 23:12:48
>>626
(= i j)のときは処理しない、ってのが既に手続き的じゃないかな。
関数的には、このときはこの値、そのときはその値、って感じじゃない?
635デフォルトの名無しさん:2008/10/01(水) 23:34:58
>>631, 634
あーそうかも

>>632
doとか使うとなんか負けたような気がするじゃないか
636デフォルトの名無しさん:2008/10/02(木) 00:31:02
do は単なる末尾再帰
637デフォルトの名無しさん:2008/10/02(木) 03:43:30
こんなループにまじになっちゃってdoするの?
638デフォルトの名無しさん:2008/10/02(木) 04:05:26
>>625 本格的な複式簿記ソフトGnuCashは機能の多くがguileで書かれてるよ。
639デフォルトの名無しさん:2008/10/02(木) 04:09:46
名前が嫌な感じ
640デフォルトの名無しさん:2008/10/02(木) 04:23:50
>>626
そういうのならsrfi-42使うかな。

(do-ec (: i 100) (: j 100)
(unless (= i j) (inc! (vector-ref out i) (array-ref line i j))))

Scheme脳っていったって何でもかんでも明示的な再帰で書くわけじゃないっさ。
再帰はあくまで基本のビルディングブロック。定型的な処理にはより大きな出来合いのブロックを使う。
641デフォルトの名無しさん:2008/10/02(木) 07:54:55
>>638
ありがとう。
行列簿記のシステムをSchemeで書こうと思って。
642デフォルトの名無しさん:2008/10/02(木) 13:28:10
2重ループで外側ループの変数を内側ループの処理にまざようとすると
めんどくさくなった記憶がある
std::for_each
643デフォルトの名無しさん:2008/10/03(金) 03:17:44
schemeは政治で仕様が変わる可能性あるけど
common lispは過去の遺産の関係で簡単には変わらないっていう解釈は間違い?
644デフォルトの名無しさん:2008/10/03(金) 07:42:22
>>643はアホ
645デフォルトの名無しさん:2008/10/03(金) 09:00:52
プログラミング言語に政治って何のことだよ。勢力か?
646デフォルトの名無しさん:2008/10/03(金) 10:05:17
R6RSが気に入らないのだろ。Schemeの後継者争い。
LispやSchemeのブランドにこだわるのは処理系の開発が滞るのが怖いからかな。
647デフォルトの名無しさん:2008/10/03(金) 12:10:03
しょせん黒板に書いて思考実験するための言語で
保守すべき実物が何もないから、一寸先は闇。
648デフォルトの名無しさん:2008/10/03(金) 13:43:56
規格の権威としてはISOが最高でしょうけど
ANSIとIEEEってどっちが上ですか?
(もちろん言語としてはANSI CL > R5RS Scheme > IEEE Scheme、ANSI CL > ISLISPであり
規格の権威の上下が言語の上下を決める訳ではない事は承知しています)
649デフォルトの名無しさん:2008/10/03(金) 14:26:04
上って何だよww
650デフォルトの名無しさん:2008/10/03(金) 14:34:23
人気
651デフォルトの名無しさん:2008/10/03(金) 14:53:07
>>648はアホ
652デフォルトの名無しさん:2008/10/03(金) 15:09:55
ANSIとIEEEって分野が違うでしょ。
重なる部分が多いのは分かるけど。

上も下も無いだろ〜
どっちもよりより上位の規格としてISO持ってるんだから。
653648:2008/10/03(金) 15:30:25
あちゃー書き方がまずかったか。
私がアホなのもSchemeが実験言語なのも否定しませんが
ISOには及ばないもののIEEEで規格化されているSchemeが643-647(特に647)みたいな扱いはないでしょ、て意味です
括弧つき注釈をつけたのは
「それくらいググれカス」
「ISOが最高ならISLISP >>> (越えられない壁)>> ANSI CL, IEEE Schemeかよ」
って書かれないようにと思ったのですが、まずかったですね。
654デフォルトの名無しさん:2008/10/03(金) 18:01:25
便利に使えりゃなんでもいいじゃん
655デフォルトの名無しさん:2008/10/03(金) 20:04:06
俺はとりあえず末尾再帰がきちんと動いてればschemeと見なすよ
継続なんてオナニーだろアホか
656デフォルトの名無しさん:2008/10/04(土) 00:39:36
>>643
R5RS->R6RSという流れは必然なのではないかと思う。
Schemeは小さな言語でも、自分を自分自身で表現することで、
インクリメンタルに自己拡張させることができるという
meta-circularの理論を実証するため生み出された可能性がある。
(継続の概念もその過程で発見された?)
Scheme開発の歴史は知らないので、誤っているかもしれないけれど、
その一面は間違いなく存在したはず。

その観点に立った場合、Schemeはいつか小さな仕様の自分自身を用いて
大きな仕様の自分を記述しないと、意味が無い。
それが、R5RS->R6RSという流れなんじゃないだろうか。
逆に言えば、R5RSのScheme世界が十分成熟したとみなされたんだろう。
657デフォルトの名無しさん:2008/10/04(土) 01:19:05
>>655
末尾再帰の最適化=継続の最適化
658デフォルトの名無しさん:2008/10/04(土) 01:33:58
知らないことを認識できてるなら調べりゃいいのに
659デフォルトの名無しさん:2008/10/04(土) 02:14:52
>>658
アイアイサー
660デフォルトの名無しさん:2008/10/04(土) 02:48:06
>>656 色々違うなあ。
自己記述とインクリメンタルな拡張の概念はLispにほぼ最初から備わってた。
継続の発明もSchemeよりずっと前。LandinのJ-operatorが1965年くらいかな? そのへんまで遡れる。

そんじゃSchemeは何をしたかってことだけど、直接の動機はHewittのActorモデルのうまい記述を
考えているうちに、手続き呼び出しとメッセージパッシングがともに継続渡し+gotoで統一的に
表現できることに気づいたって話かなあ。けれど実装面では、静的スコープで性能を出せることを
示したって功績の方が大きいかもね。

661デフォルトの名無しさん:2008/10/04(土) 09:40:00
>>660
>自己記述とインクリメンタルな拡張の概念はLispにほぼ最初から備わってた。
万能関数?とかいう機能のことですか。

うーん。とにかく、歴史は一度調べておく必要がありますね。
662デフォルトの名無しさん:2008/10/04(土) 09:52:44
必要はないけど、出鱈目書かないでください。
663デフォルトの名無しさん:2008/10/04(土) 10:46:13
>>656を読むと、
「ではないかと思う。 」「可能性がある。 」「発見された?」 「誤っているかもしれない」
「その観点に立った場合、」「という流れなんじゃないだろうか。 」「とみなされたんだろう。 」
終始、自分の推測と、そこから派生するものと、疑問しか書いていない。
つまり、これは事実についての文章ではなく、彼の認識についての文章なわけで、
デタラメかどうかは「Schemeに関する事実と彼の記述内容」ではなく「彼の考えと彼の記述内容」に
違いがあるかどうかで決まる。
(本当はそう思っていない事実を、「〜と思う」という言い方で書いたら、それは「事実でありデタラメ」だ)

多分>>656は、本当にそう思っていることを書いたのであって、デタラメを書いたのではないと思うよ。
664デフォルトの名無しさん:2008/10/04(土) 11:41:03
結果的に有用な情報がポストされればいいんじゃね?
>>661
自己記述についてはeval[e;p]の実装がLispインタプリタの始まりであったことを
考えれば、最初からLispはそうだったってことになる。自己記述が容易だったために
インクリメンタルな拡張が可能だったっていうのはMcCarthyの"The History of Lisp" で
触れられてたと思う。
Lispの歴史の中でのSchemeの位置づけについてはSteele&Gabrielの"The Evolution of Lisp"
がわかりやすい。
R5RSとR6RSについては、まあいろいろな人のいろいろな思惑があるんで一口には言えないなあ。
665デフォルトの名無しさん:2008/10/04(土) 12:06:54
「最初から」っていうとアレだけど、
元はリスト処理ライブラリでしょ、FORTRANの。
詳しくは"The History of Lisp"で。
666デフォルトの名無しさん:2008/10/04(土) 19:24:45
>Lispの歴史の中でのSchemeの位置づけについて

Gerry Sussman and I wanted to understand Carl Hewitt’s ideas, which seemed to have intellectual power, but we couldn’t get past the complexity and the notation to see “what was really going on.”
So we decided to implement a “toy” actors language.
We hoped that it could capture the essence of the ideas while remaining simple enough to understand.
It might even turn into something useful.

--- Guy Steele "The History of Scheme"
667デフォルトの名無しさん:2008/10/04(土) 19:30:43
A Sequence of AI Languages at MIT

LISP (McCarthy et al., 1958)
METEOR (Bobrow, 1964)
CONVERT (Guzman, 1969)
PLANNER (Hewitt, 1969)
MUDDLE (Sussman, Hewitt, et al., 1970)
MICROPLANNER (Sussman et al., 1971)
CONNIVER (Sussman et al., 1972)
PLASMA (Hewitt et al., 1973) <== >>666のヒューイットのアイデアはこれで説明していた
SCHEMER (Sussman and Steele, 1975)
668デフォルトの名無しさん:2008/10/04(土) 19:37:03
We decided to start with a small Lisp interpreter and then graft on exactly two more constructs: a way to make actors and a way to send messages.
Gerry had been studying and teaching Algol 60, so we decided to use the full funarg solution so that our toy language would have lexical scope.
Our intuition was that this would also keep track of actor’s acquaintances correctly.
(Also inspired by Algol 60, the first toy interpreter was call-by-name rather than call-by-value! I will gloss over that distinction here.)
669デフォルトの名無しさん:2008/10/04(土) 19:40:47
An Astonishing Conclusion

Actor constructors and lambda expressions in our toy language are operationally equivalent.
Does it follow that actors are “merely” functions in a tail-recursive, lexically scoped language?
They are the same mechanism.
Any difference is not inherent, but depends only on what you put in their bodies.
If your primitive operators are functions, you will tend to write programs in a functional style.
If your primitive operators are actors, you will tend to write programs in an actor style.
670デフォルトの名無しさん:2008/10/04(土) 19:44:42
A New Language Is Born

After some discussion, Carl Hewitt agreed with our conclusions (with two minor exceptions).
In a way, this ended the “language competition.” <== これは大事!
Our great new AI language “Schemer” turned out to be a small dialect of Lisp with some nice properties.
Oh, yes: the name?
File names in that OS were limited to 6 characters.
“SCHEME”
671デフォルトの名無しさん:2008/10/04(土) 20:03:47
in Lisp

(DEFINE FACTORIAL (N)
 (COND
  ((ZEROP N) 1)
  (T (TIMES N (FACTORIAL (DIFFERENCE N 1)))))

(FACTORIAL 5) ⇒ 120
672デフォルトの名無しさん:2008/10/04(土) 20:04:43
in PLASMA

(define
 [factorial ≡
  (≡≡> (message: [=n] (reply-to: =c))
   (rules n
    (≡> 1 (c <== (message: 1)))
    (else (factorial <==
         (message: (n . 1)
          (reply-to:
           (≡≡> (message: =y)
            (c <== (message: (y * n))))))))))])
673デフォルトの名無しさん:2008/10/04(土) 20:05:54
in SCHEMER

(define factorial
 (alpha (n c)
  (= n 0
   (alpha () (c 1))
   (alpha ()
    (- n 1
     (alpha (z)
      (factorial z
       (alpha (y)
        (* n y c)))))))))
674デフォルトの名無しさん:2008/10/04(土) 20:08:01
Now evaluating the message send

(factorial 5 fred)

results in sending a message containing 120 to the actor named fred.
Oh, joy!
675デフォルトの名無しさん:2008/10/04(土) 20:42:11
in SCHEME

(define-syntax zerop
(syntax-rules ()
((_ x) (= 0 x))))

(define-syntax times
(syntax-rules ()
((_ x y) (* x y))))

(define-syntax difference
(syntax-rules ()
((_ x y) (- x y))))

(define (FACTORIAL N)
 (cond
  ((zerop N) 1)
  (else (times N (FACTORIAL (difference N 1))))))

(FACTORIAL 5)
676デフォルトの名無しさん:2008/10/04(土) 21:11:46
>>663
よくぞ見破りましたというか、すごい明確化の能力ですね。

上記書き込みの理解をとりあえず試みてみます。
677デフォルトの名無しさん:2008/10/04(土) 21:15:00
>>675
そこでdefine-syntaxを使うのは恥ずかしい
678デフォルトの名無しさん:2008/10/04(土) 21:18:34
>>673 in SCHEME
http://codepad.org/JOzaBBNR

このように今でもACTORモデルは使えます。
679デフォルトの名無しさん:2008/10/04(土) 21:21:34
>>677
理解出来ないなら書き込むな
680デフォルトの名無しさん:2008/10/04(土) 21:26:50
>>675は「in SCHEME」というより「in SCHEMER」だから
あらかじめdefine-syntaxで定義されてる処理系で走らせる意味があるんだよ。
681デフォルトの名無しさん:2008/10/04(土) 21:39:04
>>676-677
おまえホント、痛い奴だな。
682デフォルトの名無しさん:2008/10/04(土) 21:48:13
そういう同一人物認定も、相当に痛いと思うけどなぁ。
683デフォルトの名無しさん:2008/10/04(土) 21:54:38
話ぶったぎってすまないけど

喧嘩はよそでやってくれ
684デフォルトの名無しさん:2008/10/04(土) 22:05:06
そうだぞ。夫婦喧嘩は犬も喰わない。
685デフォルトの名無しさん:2008/10/04(土) 22:12:43
Lispだけに、カッコ悪いよな。
686デフォルトの名無しさん:2008/10/04(土) 22:25:03
こういうどうでもいい流れになるのがLispのLispたる所以
687デフォルトの名無しさん:2008/10/04(土) 22:27:34
でもそこが好きーむ
688デフォルトの名無しさん:2008/10/04(土) 22:30:13
Schemeはもともと、Actor(オブジェクト?)指向プログラミング言語として
設計されたのですね。
安直に言うと、SICP2章〜3章のdispatchが出てくるコードがScheme
メインストリームということでOKですか?
689デフォルトの名無しさん:2008/10/04(土) 22:45:05
>>668
違います。

PLANNER A Language for Proving Theorems
by Carl Hewitt (1967)
ttp://dspace.mit.edu/bitstream/1721.1/6144/2/AIM-137.pdf

MICRO-PLANNER REFERENCE MANUAL
by Gerald Jay Sussman and Terry Winograd (1970)
ttp://dspace.mit.edu/bitstream/1721.1/5833/2/AIM-203.pdf

Gerald Jay Sussman と Terry Winograd によるPlanner のサブセット
Micro-Planner は、当時主流であった論理的アプローチとは異なる手法を提案しました。
論理的アプローチ派の Robert Kowalski は Alain Colmerauer と共同で
Micro-Planner によく似た Prolog を開発しました。
不幸なことにMicro-Plannerはバックトラッキングの扱いにくさを証明しましたが、
制御構造に関する議論を活性化しました。
このころ、Peter Landin は J (Jump) 演算子を使って非常に強力な制御構造
を導入しました。
690デフォルトの名無しさん:2008/10/04(土) 22:46:11
Drew McDermott と Gerald Sussman は、Landin のコンセプトを
「Hairy Control Structure」と呼びさらに発展させ、Conniver 言語に実装し
ました。

THE CONNIVER REFERENCE MANUAL
by Drew V. McDermott and Gerald Jay Sussman (1972)
ttp://dspace.mit.edu/bitstream/1721.1/6204/2/AIM-259a.pdf

Scheme An Interpreter for Extended Lambda Calculus
by Gerald Jay Sussman and Guy Lewis Steele Jr. (1975)
http://dspace.mit.edu/bitstream/1721.1/5794/2/AIM-349.pdf

MITのAIラボで作る言語は CONNIVER とか PLANNER とか 「考えるもの」系の
名前をつける伝統だったので、Schemeの名前は、「Conniverよりもっと
スニーキー(卑劣)なPlanner」という意味のSchemerとなるはずだった。
691デフォルトの名無しさん:2008/10/04(土) 22:53:19
>>670で言ってる“language competition”には>>667,>>689,>>690の各言語が登場します。
そしてそれら全てを包含した最終言語がSchemeなので、>>688の意見は的外れです。
692デフォルトの名無しさん:2008/10/04(土) 22:53:30
>>689
どう違うんでしょうか?簡単でいいので教えていただけると嬉しいのですが。
693デフォルトの名無しさん:2008/10/04(土) 22:54:22
>>691
了解しました。
694デフォルトの名無しさん:2008/10/04(土) 23:05:10
ていうか、本増えすぎですよ・・・。
695デフォルトの名無しさん:2008/10/04(土) 23:18:11
>>691
> >>670で言ってる“language competition”には>>667,>>689,>>690の各言語が登場します。
> そしてそれら全てを包含した最終言語がSchemeなので、>>688の意見は的外れです。
>>670には
SCHEMER (Sussman and Steele, 1975)
が入っているのですが、本当にこれも包含されるのですか?
もしかして、SchemerとSchemeは別物ということでしょうか?
696デフォルトの名無しさん:2008/10/04(土) 23:19:02
>>670には×
>>667には○
697デフォルトの名無しさん:2008/10/05(日) 00:40:56
>>664が言ってるように>>695-696は自分で調べろ。乞食か?

>Lispの歴史の中でのSchemeの位置づけについてはSteele&Gabrielの"The Evolution of Lisp"
>がわかりやすい。
http://www010.upp.so-net.ne.jp/okshirai/HOPL2-Uncut-j.txt

PLASMA(PLANNER-73)
http://dspace.mit.edu/bitstream/handle/1721.1/41116/AI_WP_081.pdf?sequence=4
698デフォルトの名無しさん:2008/10/05(日) 00:42:17
>>697
リョーカイ
699デフォルトの名無しさん:2008/10/05(日) 05:35:36
すみません、ちょっと教えてください。

(define (hit clist)
(let iter ((progress (look-forward-symbol clist)) (w '()))
; (display progress)(display w)(newline)
(cond ((not progress) w)
((not (car progress)) #f))
(else (iter (look-forward-symbol progress)
(append w (hit2 progress))))))

look-forward-symbolとhit2の実装はあまり関係ないと思うので省きます。
名前付きletでループさせているのですが、
else節のiterが第一引数#fで呼び出された場合に
condの最初の節で抜けて欲しいのにelse節を再び評価してしまいます。
condって節を順に評価していくとR5RSに書いてあるのでその通りにしたつもりなのですが、
何か間違ってますでしょうか。
700デフォルトの名無しさん:2008/10/05(日) 06:16:46
>>699
#fの後の括弧が一つ多い
701699:2008/10/05(日) 06:49:41
あ!仰る通りですw
直したらうまくいきました。
ありがとうございました。
702デフォルトの名無しさん:2008/10/05(日) 18:15:48
995:朝鮮社会民主党(アラバマ州) 2008/10/05(日) 15:29:29 .85 ID:UoemBcGT
このスレのまとめ:
習得するべき言語:C, C++, C#
習得するべきスクリプト:perl, python, ruby
やめておくべき言語:Haskell, Lisp
703デフォルトの名無しさん:2008/10/05(日) 19:44:06
Gauche以外の方言がもっと評価されてもいいと思うのだが
日本語が使えなさそうなのは門前払いなのかな
C#やRubyは日本語に関しては安心だよな
704デフォルトの名無しさん:2008/10/05(日) 19:56:20
gaucheでヒアドキュメントって使えるんでしょうか?

(define foo #hHEREDOC
aaaaa
bbbbbbbbb
cccc
HEREDOC)

みたいなことやりたいです
705704:2008/10/05(日) 20:02:10
さらにヒアドキュメントの中でS式をevalしてその結果を埋め込みとかできればなお嬉しいです
(define foo
#hHEREDOC
abcde
#hSEXP (integer->string 1)
fooHEREDOC)
706デフォルトの名無しさん:2008/10/05(日) 20:54:44
>>704
非公式なパッチならあるので、これを使えば出来なくはない。
http://practical-scheme.net/wiliki/wiliki.cgi?Rui%3a%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88
2年前のバージョンに対するパッチなので、今の版に適用するならちょっと手を加えないといけないかも
707デフォルトの名無しさん:2008/10/05(日) 20:56:15
>>704 使えない。wilikiかMLで以前議論があったような気がする。
文字列リテラル内でダブルクオートやバックスラッシュをエスケープするのが面倒ってこと?
708デフォルトの名無しさん:2008/10/05(日) 21:00:01
>>705
便利なケースが無いとは言わんが、そんな小汚い方法はSchemeにそぐわない。
マクロでやればいいことだし。
709ha148.opt2.point.ne.jp :2008/10/05(日) 21:11:22
へえ、マクロでねえ。
710デフォルトの名無しさん:2008/10/05(日) 21:15:00
ヒアドキュメントより木構造テキストを使った方がいいんじゃないの?
http://practical-scheme.net/gauche/man/gauche-refj_157.html#SEC433
文字列補間でもいいけど。
http://practical-scheme.net/gauche/man/gauche-refj_48.html#SEC80
711デフォルトの名無しさん:2008/10/05(日) 23:24:03
>>710 に同意。
#`"foo
bar" とか普通に改行も含められるんだから、十分じゃないか?
712デフォルトの名無しさん:2008/10/07(火) 12:48:59
SICP日本語版を読んでいます。
質問です。

(+ 1 2) の様な書き方を「逆ポーランド記法」と読んでも良いのでしょうか?
713デフォルトの名無しさん:2008/10/07(火) 12:54:50
714デフォルトの名無しさん:2008/10/07(火) 12:57:09
ポーランド記法というのですね。失礼しました。
715デフォルトの名無しさん:2008/10/07(火) 20:50:34
Gauche 0.8.14 記念age
716デフォルトの名無しさん:2008/10/08(水) 09:40:52
( ゚∀゚)o彡°がうちぇ!がうちぇ!
717デフォルトの名無しさん:2008/10/08(水) 11:27:32
http://codepad.org/YyhxEFko
こんな風にalphaを導入すれば>>673-674のように
(factorial 5 fred)
でアクター指向プログラミング出来るから>>678よりSchemerに近くできるね。
アクターがメソッドを持つようにすればオブジェクト指向と同じ。
alpahaの式でその部分が鮮明になる。
CLOSはこんな風に考えられたのかな?
718デフォルトの名無しさん:2008/10/08(水) 11:48:31
アクターモデルのような非同期型のオブジェクトモデルも
注目されるようになって来てはいるが、実用には程遠いかなぁ。
Erlangぐらいか?
719デフォルトの名無しさん:2008/10/08(水) 17:42:10
> 実用には程遠い

んなことないだろ。バカでも携わる方面にまで降りてきてないだけで。
720デフォルトの名無しさん:2008/10/08(水) 18:13:30
トリクルダウンw
721デフォルトの名無しさん:2008/10/08(水) 23:34:27
ありゃ、cygwin上のGauche-0.8.14でGauche-gl-0.4.4が動かねぇ
0.8.13なら動くのに
cygwinどっか壊したかな?
722デフォルトの名無しさん:2008/10/09(木) 00:56:57
>>718
> アクターモデルのような非同期型のオブジェクトモデルも

アクターモデルはオブジェクトモデルじゃないよ。
非同期メッセージングモデル。

> Erlangぐらいか?

Erlangも違う。
非同期オブジェクトモデルなのはABCLなどほんのごく一部です。
723デフォルトの名無しさん:2008/10/09(木) 01:24:34
>>721
リビルドしたか?
0.8.13と0.8.14はVMの仕様が変わってるぞ。
724デフォルトの名無しさん:2008/10/09(木) 06:59:34
gaucheスレを作ったらここからどれだけコメントがなくなるんだ老化?
725デフォルトの名無しさん:2008/10/09(木) 10:08:58
gaucheで勉強中の者です。
defineとdefine-methodはどう使いわけるのがいいのでしょうか。
define-methodだけで十分且つ安全とは言えませんか?
726デフォルトの名無しさん:2008/10/09(木) 10:49:42
メソッドじゃないものをdefineすることもある
たとえば (define pi 3.14)
727デフォルトの名無しさん:2008/10/09(木) 11:01:25
とりあえず(define define '())してみると良いんじゃないかな
728デフォルトの名無しさん:2008/10/09(木) 11:03:44
C++でいちいちvirtualと書くのが面倒だと言うのと同じことだな。
729デフォルトの名無しさん:2008/10/09(木) 14:17:42
>>725
Gauche のオブジェクトシステムは CLOS を元にしているけれど、
Scheme とは相性の悪い点もある。

概念的に Scheme の関数は本質的に全て無名関数であって、
それが変数を束縛しているということになってるのに、
CLOS は名前で区別する体裁になってるのがイマイチと言われている。

その他、速度の点でも常に妥当な型を探してディスパッチなんてやってらんない。
このへんは最適化もほとんど出来ないらしい。
でも、もしその速度低下が許容可能で、
define-method を常に使うことが開発効率を大幅に上昇させるなら、
あなたがそうすることを処理系は妨げない。
730デフォルトの名無しさん:2008/10/10(金) 06:48:32
CLOSとかアホかと。
シンボル拡張して(obj.foo.bar)でいいじゃん。
でもfooが関数だとすると((obj.foo).bar)なのか?
これでいいのか?って議論にかならずなるよね。
無いものを作るのは難しいですなw
731デフォルトの名無しさん:2008/10/10(金) 10:02:26
そんなのLispじゃない>(obj.foo.bar)
732デフォルトの名無しさん:2008/10/10(金) 10:18:10
>>731
いや obj.foo.bar は lisp 的に一つのシンボルじゃね?
733デフォルトの名無しさん:2008/10/10(金) 13:07:02
>>732
(obj . (foo . bar))なら許す
734デフォルトの名無しさん:2008/10/10(金) 13:26:38
アクセッサは関数じゃないと。
735デフォルトの名無しさん:2008/10/10(金) 15:25:47
schme用に書いたコードをcommon lispに変換するのって
適当なマクロ導入するだけでできますか?
736デフォルトの名無しさん:2008/10/10(金) 15:49:44
そのマクロが真に適当ならば。
737デフォルトの名無しさん:2008/10/10(金) 16:39:52
その昔taoというオブジェクトシステムがあって
こいつのメソッド適用はオブジェクトを前置する記法だったと聞いた
738デフォルトの名無しさん:2008/10/10(金) 17:36:06
竹内先生のTAO?
739デフォルトの名無しさん
TAOは確かSmaltalk風のメッセージパッシングスタイルのオブジェクトシステムで、
[object message arg1 arg2 arg3]と書く。
先頭がフラグが立った特殊なコンスセルになっていて、
それでこのS式がメッセージセンド式であることを識別していたはず。