5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Lisp Scheme Part23

1 :デフォルトの名無しさん:2008/07/13(日) 00:09:48
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

□過去スレ□
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.html/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html

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
□Wikipedia関連□

ttp://ja.wikipedia.org/wiki/LISP
ttp://ja.wikipedia.org/wiki/Common_Lisp
ttp://ja.wikipedia.org/wiki/Scheme

□継続関連□

なんでも継続 (日本語)
ttp://practical-scheme.net/docs/cont-j.html

Schemeへの道:継続 (日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html

継続の使い方 (日本語)
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation

継続の使用法 (日本語)
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html

Kahua: 継続ベースのアプリケーションサーバー
ttp://www.kahua.org/

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にあるじゃん。
そのまんまの名前で。


39 :37: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

78 :70: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
>>82
つXymTeX

http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?XyMTeX
http://www.klavis.info/xym.html
http://homepage3.nifty.com/xymtex/fujitas/rd/chosho.html

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
ありがとうございます。
> 途中、フィボナッチ数列の行列表現、固有値
程度なら理解できると思います。


131 :lischemep ◆/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
先生のレベルを決めないで、
希望参加費を申告制にすると、
収集つかないんじゃないかな。

133 :lischemep ◆/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式のもつ
プログラムとデータの同一性だと
思います。強力はマクロもその
特性のひとつでは?


156 :lischemep ◆/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

164 :lischemep ◆/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
竹内外史とかのは基礎論だよな?

と板違いか。

176 :lischemep ◆/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
はいさようなら!

191 :176: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部は必要な箇所だけ読めば良い。

198 :lischemep ◆/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
どうでもいいものを、ここに張る奴もどうかしてる。

213 :201: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
弱参照も張らずにメモ化とな

265 :257: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
リンク間違えたw
× http://pc11.2ch.net/test/read.cgi/tech/1211381920/327
○ http://pc11.2ch.net/test/read.cgi/tech/1211381920/723

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
>>356, >>357, >>363

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)

396 :373=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
http://shibuya.lisp-users.org/wiki/index.php?TechTalk_1%2FLT%E7%99%BA%E8%A1%A8%E8%80%85%E5%8B%9F%E9%9B%86

らしいよ。

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
>>415
http://practical-scheme.net/docs/stack-j.html

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
>>418
"step"を使った例はR5RSやR6RSのサンプルだね。
ttp://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3A%E7%BF%BB%E8%A8%B3%3AStandard%20Libraries%3A5%20Control%20structures

421 :デフォルトの名無しさん:2008/09/19(金) 01:19:25
>>418
Part.21の319-330でそんな話があった。
... ...の置き換えじゃなくて、...が0個でもマッチするとかいう話。

422 :デフォルトの名無しさん:2008/09/19(金) 04:35:27
LispMeの説明にSECDマシンが出てくるよ。chap6を見てみて。

http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap1.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap2.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap3.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap4.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap5.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap6.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap7.html
http://www.yuasa.kuis.kyoto-u.ac.jp/~nobu/study/palm/chap8.html

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
http://www.yomiuri.co.jp/atmoney/news/20080919-OYT1T00011.htm

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/
こんなのみつけた
これってマイナーな言語なの?
他で使ってたプログラムの流用はできない?

531 :530: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に惚れて以来一筋

535 :534: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
思いつき

http://codepad.org/zctEhM1Y
http://docs.plt-scheme.org/reference/nest.html


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
下地貞夫著「数式処理」
を見ながら作成してる人もいるね。
http://practical-scheme.net/wiliki/wiliki.cgi?sasagawa%3A%E6%95%B0%E5%BC%8F%E5%87%A6%E7%90%86
http://practical-scheme.net/wiliki/wiliki.cgi?sasagawa%3Acomplex

554 :デフォルトの名無しさん:2008/09/26(金) 21:25:50
common-lisp で .so か .dll 作って c から呼びたいんだけど、
商用の処理系じゃないと無理?

555 :デフォルトの名無しさん:2008/09/26(金) 21:43:12
つ【ECL】
ttp://ecls.sourceforge.net/

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
はいはいサイバーパンクサイバーパンク

573 :554: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が副作用をもたらすのか」の原因にもなってると思います。

602 :601: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持ってるんだから。

653 :648: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の後の括弧が一つ多い

701 :699: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)

みたいなことやりたいです

705 :704: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にそぐわない。
マクロでやればいいことだし。

709 :ha148.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
>>712
ttp://ja.wikipedia.org/wiki/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95

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 :デフォルトの名無しさん:2008/10/10(金) 17:39:26
TAOは確かSmaltalk風のメッセージパッシングスタイルのオブジェクトシステムで、
[object message arg1 arg2 arg3]と書く。
先頭がフラグが立った特殊なコンスセルになっていて、
それでこのS式がメッセージセンド式であることを識別していたはず。

740 :デフォルトの名無しさん:2008/10/11(土) 10:10:33
>>703
どれも割と悪くないとは思う。

WindowsのAPIとか叩くなら、PLT Schemeとか楽だった。
日本語の文字コードも、少なくとも変換はネイティブで対応してる。
でも本格的に使ってる人、はてなの人以外全然見たこと無い。

Biglooは本当触ってみただけなんだけど、MinGWでコンパイルすると、
(作者曰く)Boehm GCのせいでマルチスレッドが使えないのが悲しかった。
Cygwinだと遅いし、CygwinのDLLに依存するしで扱いづらい。
でもスタンドアローンの実行ファイルはいいよなー。

741 :デフォルトの名無しさん:2008/10/11(土) 13:57:47
漢は黙ってノンプリエンプティブコルーチン

というのは冗談としてBoehm GCをpthreadに対応させるにはどうしたらいいんですかね?
OpenBSD portsでも未だにpthreadには対応できてません。

742 :デフォルトの名無しさん:2008/10/11(土) 17:31:50
何をやりたいの?

743 :デフォルトの名無しさん:2008/10/11(土) 19:54:16
最近の処理系はGCをVM(LLVM, JVM)に丸投げしたり、
accurateなのを独自実装する(ypsilon, tamarin, v8)のが多いね。

744 :741:2008/10/11(土) 20:14:52
>>742
私はGauche on OpenBSDのパッチを作ってるんですが
pthread対応版Gaucheを作りたいんです。
Kahuaなどpthreadが有効である事を要求する物があるので。
(もしかして私じゃなくて740さんへのレスだったかな?)

745 :デフォルトの名無しさん:2008/10/11(土) 20:35:52
それはboehm gcのMLか何かで話題にした方がいいんじゃない? >>741

746 :Qual1ty@非戦主義 ◆bLAROckCS6 :2008/10/11(土) 21:41:57 ?2BP(128)
Lisp学べば悟り開けるって本当っすか? 中卒以下の漏れでもLispをマスターできますか?

747 :デフォルトの名無しさん:2008/10/11(土) 21:45:49
高学歴なおもて悟りを開く、いわんや低学歴をや。

748 :デフォルトの名無しさん:2008/10/11(土) 22:13:40
>>744
特定した。

Boehm GCのスレッドサポートが一部OSで欠けているのは、
単にそっちの作業をしてる人がいないだけな感じなので、
パッチ送れば取り込んで貰えるんじゃないかなー。

前にびの人がNetBSDのスレッドサポートをさせてたから、
自分でやる気があるなら、LingrのGauche部屋に行けば、
何か取っ掛かりになること教えてくれるかもしれないよ。

749 :デフォルトの名無しさん:2008/10/11(土) 22:24:21
*BSDを使わなければ解決

750 :デフォルトの名無しさん:2008/10/11(土) 22:56:07
Ypsilonはgaucheのクラスみたいな独自拡張は無いのか?

751 :デフォルトの名無しさん:2008/10/11(土) 23:45:06
Gaucheって今はNetBSDでスレッドつかえるの?
スレッドつかいたくてLinuxに移行しちゃった。
ありがとうびの人。これでBSDにかえれる。

752 :デフォルトの名無しさん:2008/10/12(日) 08:42:01
FreeBSDは高性能Linuxエミュレータを装備している。


753 :デフォルトの名無しさん:2008/10/12(日) 13:19:20
>>733
それを言うなら(. (. obj foo) bar)かと

754 :デフォルトの名無しさん:2008/10/13(月) 00:04:24
>>747
せっかく覚えたイディオムなんだろうけど、使い方が間違ってるよ

755 :デフォルトの名無しさん:2008/10/13(月) 01:36:35
中卒でも悟りが開けるかもしれないが、
中卒ではLispをマスター出来ないから悟りも開けない
という回答もあり得る。

756 :デフォルトの名無しさん:2008/10/13(月) 01:39:46
俺はMITのトイレで悟りを開いた

757 :デフォルトの名無しさん:2008/10/13(月) 01:50:18
MITのトイレには人を悟りに導く何か特別な仕組みがあるんですか?

758 :デフォルトの名無しさん:2008/10/13(月) 01:53:21
MITの学生は、喋るのが異様に速いという噂を聞いたことが
つられて脳が活性化されるんじゃね?

759 :デフォルトの名無しさん:2008/10/13(月) 02:14:32
ポール・グレアムのエッセイに書いてあった。

760 :デフォルトの名無しさん:2008/10/13(月) 14:22:36
独り言じゃ駄目なのかな。


761 :Qual1ty@非戦主義 ◆bLAROckCS6 :2008/10/13(月) 15:36:12 ?2BP(128)
Lisp極めたら頭がバーンってなるんだろ? 誰か漏れを世界一のLisp使いに育ててくれよ

762 :デフォルトの名無しさん:2008/10/13(月) 15:53:04
頭がばーんってなったらドンキングになるよ。

763 :デフォルトの名無しさん:2008/10/13(月) 16:05:29
>>761
つ 「メタマジック・ゲーム」

764 :デフォルトの名無しさん:2008/10/13(月) 16:16:27
>>761
指導である程度のところまでは到達できるが、
世界一になるなら自分でそこまで這い上がらなければいけない。
発想その物が世界一になれる見込みは感じない。

765 :デフォルトの名無しさん:2008/10/13(月) 16:17:32
世界一でないお前に言われても…

766 :デフォルトの名無しさん:2008/10/13(月) 16:23:30
* 世界一のプログラマは LISP でリスト処理を'する(do)'。
* 世界一のプログラマは LISP で文字列操作を'やる(do)'。
* 世界一のプログラマは LISP で経理処理を(必要ならば)'する(do)'。
* 世界一のプログラマは人工知能プログラムを LISP で'する(do)'。

 もし LISP で出来なければ、C言語でやる。C言語で出来なきゃ、それはやる価値がないのだ。

767 :デフォルトの名無しさん:2008/10/13(月) 16:54:41
>>765
世界一にしか言えないはずのことや、世界一が言わないと説得力が無いことは
一つも書かれていない中で、そんなことを書いても意味がない。

768 :デフォルトの名無しさん:2008/10/13(月) 17:18:50
とりあえずMITのトイレに座ることから始めてみよう。

769 :デフォルトの名無しさん:2008/10/13(月) 17:21:47
>>766
real programmers don't use ???

770 :デフォルトの名無しさん:2008/10/13(月) 20:31:25
bLAROckCS6でぐぐれ

771 :デフォルトの名無しさん:2008/10/14(火) 00:37:19
>>756
MITもないからおよしなさい
もっとでかいことなぜできぬ

772 :デフォルトの名無しさん:2008/10/14(火) 01:22:35
武蔵野の某大学のことでしょ?

773 :デフォルトの名無しさん:2008/10/14(火) 04:18:06
武蔵工大のことだよ。

774 :デフォルトの名無しさん:2008/10/14(火) 12:49:58
東京の西の方を指すなら、範囲広すぎ

775 :デフォルトの名無しさん:2008/10/14(火) 17:51:26
世界一のハッカー目指して武蔵工大の便所で瞑想してくるお!

776 :デフォルトの名無しさん:2008/10/14(火) 18:56:42
>>775
おう。ガンバっといで。もし痔なら塗り薬も忘れずにな。

777 :デフォルトの名無しさん:2008/10/14(火) 23:59:23
早くしろよ。来年四月からは都市大学だぜ

778 :デフォルトの名無しさん:2008/10/15(水) 01:39:36
あれもひどい名称だ

779 :デフォルトの名無しさん:2008/10/15(水) 01:49:44
>>775
いっといれ

780 :デフォルトの名無しさん:2008/10/15(水) 06:06:11
http://web.archive.org/web/20070616032224/http://www.b54.org/lisp15
にあったlisp15.zip、どこか他で手に入れること出来ませんか?
持ってたのに、なくしてしまった。消したかも orz

781 :デフォルトの名無しさん:2008/10/16(木) 04:02:59
cdrとcarの違いを教えてください。

782 :デフォルトの名無しさん:2008/10/16(木) 04:06:18
cdrとcarの違いを教えてください。

783 :デフォルトの名無しさん:2008/10/16(木) 05:09:27
 d  a

784 :デフォルトの名無しさん:2008/10/16(木) 05:18:05
car - リストの先頭
cdr - carを除いた残り

785 :デフォルトの名無しさん:2008/10/16(木) 08:03:42
カーは左、って覚えるんだよ!

786 :デフォルトの名無しさん:2008/10/16(木) 08:13:53
今更前書き読んだら、Littleって2週間のレクチャーでやってた内容なんだね。
武蔵工大レベル高杉。

787 :デフォルトの名無しさん:2008/10/16(木) 11:59:02
CARはContents of the Address part of Register numberの略
CDRはContents of the Decremental part of Register numberの略

IBMの昔のコンピューター(IBM 704)のレジスタの略称に由来しています。
車(CAR)は左側通行という俗説もある。

788 :デフォルトの名無しさん:2008/10/16(木) 12:03:40
mzschemeではfirst, restというのもあるな
こっちの方がわかりやすい筈なのについついcar, cdrを使ってしまう
慣習というのは恐しいものだ


789 :デフォルトの名無しさん:2008/10/16(木) 12:08:57
caaaaaaaaaaaaaaaaadr
とかを自動生成できる。コンパイラが。プログラマを信じて。


790 :デフォルトの名無しさん:2008/10/16(木) 12:12:30
cprとctrとcwrもあったらしいです

>>789
そういうのをcxxxxrとcxxxrとcxxrとcxrの組み合わせに展開するマクロなら使ってました

791 :デフォルトの名無しさん:2008/10/16(木) 12:21:59
c[ptw]rについてもうちょっとくわしく

792 :デフォルトの名無しさん:2008/10/16(木) 12:22:32
>>780
ググってみたが、これ関係ある?

LISP 1.5 -- Millesime 1961
http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2005-06/msg00629.html

--
The LISP1.5 sources:
http://www.informatimago.com/develop/lisp/lisp15-0.0.tar.gz

The original Listing:
http://community.computerhistory.org/scc/projects/LISP/LISP1.5-Bonnie-sBirthdayAssembly.pdf

The asm7090:
http://www.cozx.com/~dpitts/ibm7090.html



793 :デフォルトの名無しさん:2008/10/16(木) 12:30:05
ニフのPLフォーラムに転がってそうな気がする。
まだあるのか知らないけど。

794 :780:2008/10/16(木) 12:36:46
>>792
ソースもあるんですね。これでなんとかなりそうです。


795 :デフォルトの名無しさん:2008/10/16(木) 12:38:13
NIFTY-Serveのフォーラムって無くなったんじゃない?

796 :デフォルトの名無しさん:2008/10/16(木) 12:50:59
>>791
IBM704の1wordは36bitでprefix:3, decrement:12, tag:3, address:12というビットフィールドだったらしいです
それぞれcpr, cdr, ctr, carが対応し、word全体を表すcwrというものもあったそうです

797 :デフォルトの名無しさん:2008/10/16(木) 12:57:20
そんな由来があったとは。

798 :デフォルトの名無しさん:2008/10/16(木) 12:58:39
あーdecrementとaddressは12bitじゃなくて15bitでした


799 :デフォルトの名無しさん:2008/10/16(木) 13:09:28
cdrは乗り物デス。某ブログより

800 :デフォルトの名無しさん:2008/10/16(木) 15:25:04
くだーないね

801 :デフォルトの名無しさん:2008/10/16(木) 18:00:55
http://www.call-with-current-continuation.org/eggs/3/pyffi.html
pythonのメタ制御をしたくてこんなのを見つけたのですが
この処理系独自の方法で
scheme共通のffiの方法はないのでしょうか

802 :デフォルトの名無しさん:2008/10/16(木) 19:49:42
cprはくぱぁ

803 :デフォルトの名無しさん:2008/10/16(木) 21:00:07
クダーちゃん(*´Д`)ハァハァ

804 :デフォルトの名無しさん:2008/10/16(木) 21:38:07
大量のカッコが夢に出てきた。
閉じなきゃ、閉じなきゃと
思ってるうちに目が覚めた。

805 :デフォルトの名無しさん:2008/10/16(木) 21:46:23
カッコカッコカッコカッコカッコカッコカッコばかりさきばしり

806 :デフォルトの名無しさん:2008/10/16(木) 21:49:08
最初にカッコいっぱいタイプして後から中身を埋めてくタイプっていうことですね。

807 :デフォルトの名無しさん:2008/10/16(木) 21:58:17
M-(

808 :デフォルトの名無しさん:2008/10/16(木) 22:02:47
俺は(をどんどんひらいていって関数を書き終わったときに対応を確認しながら閉じてくのが快感だ

809 :デフォルトの名無しさん:2008/10/16(木) 22:05:04
]

810 :デフォルトの名無しさん:2008/10/16(木) 22:08:08
言われてふと振り返ってみると、俺閉じ括弧どうしてるんだろう…。
今度、じっくり観察してみよう。

811 :デフォルトの名無しさん:2008/10/16(木) 22:19:41
「括弧?そんなものあったかのう」


812 :デフォルトの名無しさん:2008/10/16(木) 22:34:20
>>809
スーパーこっか?

813 :デフォルトの名無しさん:2008/10/16(木) 23:04:10
MITって東京都市大学に名前が変わるらしいよ。

814 :デフォルトの名無しさん:2008/10/16(木) 23:16:18
schemeは黒板
pythonは電池

815 :デフォルトの名無しさん:2008/10/17(金) 00:24:23
Qi やClojureの話題もこちら? arcが別だから別スレ立てる必要あり?

816 :デフォルトの名無しさん:2008/10/17(金) 00:56:50
arcは誰か勝手に立てただけだし。このスレと直接関係ない。
lisp系言語なら別にどっちでもいいと思うよ。お好きにどうぞ。

817 :デフォルトの名無しさん:2008/10/17(金) 01:12:20
>>814
そのココロは?

818 :デフォルトの名無しさん:2008/10/17(金) 07:12:20
>>816
どうせ過疎るから。スレは立てないわ。ありがとう

819 :デフォルトの名無しさん:2008/10/17(金) 09:14:57
CPRはContents of the Prefix part of Register numberの略 (3 bits)
CDRはContents of the Decremental part of Register numberの略 (15 bits)
CTRはContents of the Tag part of Register numberの略 (3 bits)
CARはContents of the Address part of Register numberの略 (15 bits)
CWRはContents of the Word part of Register numberの略 (36 bits)

IBMの昔のコンピューター(IBM 704)のレジスタの略称に由来しています。
IBM704の1wordは36bits。
車(CAR)は左側通行という俗説もある。

820 :デフォルトの名無しさん:2008/10/17(金) 09:46:08
アドレスは、4096ワード(expt 2 12)なのに、CDRとCARは15bits。

           1 1 1 2 2     3
 0 1 2 3 .................7 8 9 0 1 .................5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  | | | | |  | | | | |  | | | | |  | | | | |  | | | | |  | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
<---> <-------------------> <---> <------------------->
prefix     decrement      tag      address

821 :デフォルトの名無しさん:2008/10/17(金) 10:12:08
36ビット1ワードってことは
9ビット単位でアドレッシング?

822 :デフォルトの名無しさん:2008/10/17(金) 10:16:33
後に32768ワードのメモリ積める様になったらしいよ。

ttp://www.bitsavers.org/pdf/ibm/704/24-6661-2_704_Manual_1955.pdf

823 :デフォルトの名無しさん:2008/10/17(金) 13:21:08
ってことはアドレス空間は15ビットのワードアドレッシングで
当初は4096ワード(12ビットぶん)実装してたってことでFAか

824 :デフォルトの名無しさん:2008/10/17(金) 16:51:41
>>784
返事がおそくなりました。
ありがとうございます。

825 :デフォルトの名無しさん:2008/10/17(金) 21:06:46
>>821
バイトアドレッシングがなかったのでは?

826 :デフォルトの名無しさん:2008/10/18(土) 01:50:19
バイトアドレッシングが当たり前になったのは、
PDPが大流行してからだからね。
packed BCDとかやってた頃。

827 :デフォルトの名無しさん:2008/10/18(土) 08:36:41
メインフレームでは System/360 以降
C言語との相性がいいこと
マイコンの主流がバイトアドレッシングになったこと

828 :デフォルトの名無しさん:2008/10/18(土) 10:10:17
>>507,>>512-527

毎回マクロを作らないで済むようにHaskellみたいに
ガード節が使えるパターンマッチでifの問題を回避できるんだよね。
http://codepad.org/yViqll2E
これのpmatchみたいなマクロを一度作れば、毎回マクロを作らないで済む。
「いつマクロが必要か?」という一例かな。

829 :デフォルトの名無しさん:2008/10/18(土) 10:19:57
ガード節、俺節

830 :デフォルトの名無しさん:2008/10/18(土) 10:26:19
car - リストの先頭
cdr - carを除いた残り

CPRはContents of the Prefix part of Register numberの略 (3 bits)
CDRはContents of the Decremental part of Register numberの略 (15 bits)
CTRはContents of the Tag part of Register numberの略 (3 bits)
CARはContents of the Address part of Register numberの略 (15 bits)
CWRはContents of the Word part of Register numberの略 (36 bits)

IBMの昔のコンピューター(IBM 704)のレジスタの略称に由来しています。
IBM704の1wordは36bits。IBM704にはバイトアドレッシングがなかった。
バイトアドレッシングはPDP以降。メインフレームでは System/360 以降。
バイトアドレッシングが登場した頃、CPR・CTR・CWRは無くなった。
車(CAR)は左側通行という俗説もある。

831 :デフォルトの名無しさん:2008/10/18(土) 11:50:57
>>828
そりゃ違うと思ったので>>512をpmatchでやってみた。
http://codepad.org/StCiwAUv
やっぱ>>514みたいにマクロでやらないと、ガード節があっても関数は展開されるから駄目。
でもこのOleg Kiselyovのpmatchマクロは便利。

832 :デフォルトの名無しさん:2008/10/18(土) 14:29:43
ifが先行評価であっても
then式とelse式をthunkで囲んだ式に変形するマクロがあれば没問題。
ifが特別式なのは習慣的にそうなっているだけで
マクロがあれば特別式はquote、lambdaだけでいいはず。

833 :デフォルトの名無しさん:2008/10/18(土) 15:00:54
特別式とは少し違うが
SICPの冒頭で挙げられている三つの要素は
変数の参照と関数呼び出しとlambdaに対応する

834 :デフォルトの名無しさん:2008/10/18(土) 16:40:47
>>832
その話題の古典
Guy Lewis Steele, Jr.. "RABBIT: A Compiler for SCHEME". Masters Thesis. MIT AI Lab. AI Lab Technical Report AITR-474. May 1978
http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AITR-474.pdf

835 :デフォルトの名無しさん:2008/10/18(土) 18:03:18
Lispの誕生した美国では車は右側通行という噂がある。

836 :デフォルトの名無しさん:2008/10/18(土) 18:10:32
え、生まれは米国じゃないの?
美国ってどこ?

837 :デフォルトの名無しさん:2008/10/18(土) 18:14:31
美国=美しい国=日本 → 右側通行 → 明日はホームランだ

838 :デフォルトの名無しさん:2008/10/18(土) 18:14:59
>>836
アメリカ

839 :デフォルトの名無しさん:2008/10/18(土) 18:37:09
美国=美ら国=チュニジア

840 :デフォルトの名無しさん:2008/10/18(土) 18:43:11
>>836
中国語でアメリカ合衆国をさす。

841 :デフォルトの名無しさん:2008/10/18(土) 19:17:10
日本語:米(メイ)国→米国(ベイコク)、ア”メイ”リカから
中国語:美国(メイグォ)、同上
韓国語:美国(ミグッ)、???

842 :841:2008/10/18(土) 19:26:24
Wikipediaによれば米利堅もしくは亜米利加に由来すると書かれてるから
”メイ”じゃなくて”メ”一音が米に相当するんですね
お詫びして訂正します

843 :デフォルトの名無しさん:2008/10/18(土) 19:31:05
自分たちのことをアメリカ人というアメリカ人はあんまりいない
合衆国市民とよくいう

844 :デフォルトの名無しさん:2008/10/18(土) 19:39:11
アメリカ人は日本語しゃべれるんですね

845 :デフォルトの名無しさん:2008/10/18(土) 19:40:08
合唱コンクールシチズンヲッチ

846 :デフォルトの名無しさん:2008/10/18(土) 19:55:44
>>844
×アメリカ人は日本語しゃべれる
○日本語しゃべれるアメリカ人は存在する

Lispにも論理が極端に苦手な人っているんだな。

847 :デフォルトの名無しさん:2008/10/18(土) 20:38:31
×喋れる
○喋ることができる

848 :デフォルトの名無しさん:2008/10/18(土) 21:16:46
>>847
「喋れる」はら抜き言葉だから×だと言いたいのかな?
「喋る」は五段活用だから、「喋れる」はら抜き言葉ではないよ。
文法的には「話せる」「遊べる」など五段活用の可能表現と同一。
可能の意味しかないので「〜できる」と書かなくても誤解はない。

849 :デフォルトの名無しさん:2008/10/18(土) 21:25:38
ら抜きは受身とかと紛れないから機能的で好きだ

850 :デフォルトの名無しさん:2008/10/18(土) 22:06:04
>>849
うん、文法学的にはまさにそれが発生の理由だとされている。

もともと五段活用では可能(例:喋れる)が受身(例:喋られる)と区別されていて、
それが動詞一般に適用されたのがら抜き言葉。

851 :デフォルトの名無しさん:2008/10/18(土) 22:22:05
誰もら抜き言葉とか言ってないのに何突っ走っちゃってるの

852 :デフォルトの名無しさん:2008/10/18(土) 22:22:54
car、cdrのほかにもう2つ(clr,crrとか)作って立体的なリスト構造
というのはできないものだろうか?
竹内先生の初期のLispってメモリの効率化から
そんなことやってたってどこかに書いてなかった?

ハミルトンの4元数みたいに拡張すると面白いことは
できないだろうか?と。

853 :デフォルトの名無しさん:2008/10/18(土) 22:37:20
>>852
言語処理で枝を複数出したいケースは確かにある。
たとえば「重要な昨日の問題」というようなケース。
「重要な」は「昨日」や「問題」ではなく「昨日の問題」に掛かっている。

昨日の問題
└重要な

これを文節単位で区切ろうとすると、ツリーを入れ子にするか、
名詞句を受けるノードを追加するような方法しかない。

854 :デフォルトの名無しさん:2008/10/18(土) 22:42:45
>>846
論理によるプログラミングといえばPrologしかない
Lispは論理を超越している。

855 :デフォルトの名無しさん:2008/10/18(土) 22:46:24
>>853
生成文法では後者ですな
自然言語処理では生成文法が主流でしょ

856 :デフォルトの名無しさん:2008/10/19(日) 00:50:22
>>853
何かXMLを使った方がいいような気がします。

857 :デフォルトの名無しさん:2008/10/19(日) 02:06:44
>>852
"cdr coding"でググれ

car/cbr/ccr/cdrって四つ組Lispもあった。

858 :デフォルトの名無しさん:2008/10/19(日) 02:26:01
>>856
シリアライズ形式は関係なくね?
XMLを使ったとして、LISPではDOMをリスト処理するよね?
だからこそ自然言語処理ではLISPが強いわけで。

859 :デフォルトの名無しさん:2008/10/19(日) 02:39:43
ものまね鳥って読むとやっぱりLispの理解深まるの?
洋書ってLittle並に易しいですか?

860 :デフォルトの名無しさん:2008/10/19(日) 02:43:10
スマリヤン先生の本は単純におもしろいけどね。
でもそれでLispでWebサーバ書いたり処理系書いたりすることは多分できない。

861 :デフォルトの名無しさん:2008/10/19(日) 03:02:31
>>858
自然言語処理ではLISPやPrologが強いって話はよく聞くんだが、
実際に商用の翻訳ソフトとかで使ってるって話は聞いたことがない。
しかも英日翻訳とか全然実用レベルに達してないじゃん。
これでまともに処理できてるって言えるの?

862 :デフォルトの名無しさん:2008/10/19(日) 03:41:57
自然言語処理に強かったのは昔の話だよ。
基礎アルゴリズムを探求するうえで、
プロトタイプが得意なLisp, Prologは便利だった。
GC, S式, 節などのデータ構造がらみが特に。
今は基礎アルゴリズムが確立してきているので、
効率を考えてC/C++などで書かれることが多い。
代数処理系も同様。

863 :デフォルトの名無しさん:2008/10/19(日) 03:45:20
>>862
なるほど、サンクス!

864 :デフォルトの名無しさん:2008/10/19(日) 04:38:11
商用ソフトだと速度や保守もあるしC++でかくんじゃないの?
でも、商用で多分一番有名なSYSTRANなんかは今でもProlog/Lispプログラマ
募集してるよ。計算機言語学の論文なんかでもProlog使われてるし。

あと、英語<ー>日本語はラテン語圏内の機械翻訳にくらべてかなり難しいし
日本語話者は日本で閉じてるのでマーケットになりづらい。
韓国語<ー>日本語の機械翻訳ならけっこう意思疎通できるぞ。ホルホルホルとかあるけど。

865 :デフォルトの名無しさん:2008/10/19(日) 05:09:49
>>864
これまたサンクス!!

866 :デフォルトの名無しさん:2008/10/19(日) 14:17:19
教えていただきたい問題が一つあります。

(count)
(count)
に対して
the number of times the counter has been used 1
the number of times the counter has been used 2
という出力を出したいのですが、私がコーディングしたSchemeでは
(the number of times the counter has been used . 1)
という風に出てしまいます。
以下がコードなのですが、どこをどういう風に変えれば良いか教えていただきたく思います。ビギナー的な内容で恐縮ですがよろしくお願いします。

(define next 0)
(define count
(lambda()
(set! next (+ next 1))
(append '(the number of times the counter has been used) next)))

(count)
(count)

867 :デフォルトの名無しさん:2008/10/19(日) 14:22:07
>>866
そのコードに対してなるべく小さな変更で実現しようとするならこんな感じだと思う。

(define count
(lambda()
(set! next (+ next 1))
(append '(the number of times the counter has been used) `(,next))))

868 :867:2008/10/19(日) 14:27:39
>>866
おっと、その外側の括弧もいらないのかな?
文字列で返してほしいならこうなる。

(define count
(lambda()
(set! next (+ next 1))
(string-append "the number of times the counter has been used "
(number->string next))))

869 :デフォルトの名無しさん:2008/10/19(日) 14:56:24
>>867
>>868
あり得ないくらい助かります。本当にありがとうございます。
やっぱりappendを使うと( )が付いてくるのでしょうか。string-appendというのは初めてみました。大変勉強になりました。

870 :デフォルトの名無しさん:2008/10/19(日) 15:09:59
そりゃ括弧に()は付くわね
戻り値はリストで、表示は非リスト形式での表示にしたければ、次のようにするとか
(map (lambda (x) (display x) (display #\space) x)
(append '(the number of times the counter has been used) (cons next ())))

871 :867:2008/10/19(日) 15:33:01
>>869
> string-appendというのは初めてみました。

こういうこと言う初心者って多いけど、なんで R5RS を読まないのかと小一時間問い詰めたい。
いきなり読んでも意味わからんところは結構あるかもしれないが、
ありきたりな関数でも知ってるとそれなりに便利だし。 充分に洗練された日本語訳があるし。

それに、意味わかんなくても読んでおくと、
入門書を読みすすめていくうちに「なるほど、こういうことだったのか」っていう感覚が得られる。
地道に学習するにしても、マイルストーンがあるとはげみになるでしょ。

872 :デフォルトの名無しさん:2008/10/19(日) 16:22:10
>>830
cprが現代に(あまり)残ってなくてよかったな。
Lisperたちが「くぱぁ」「くぱぁ」言いまくる怪しい人たちになるところだった。

873 :デフォルトの名無しさん:2008/10/19(日) 16:22:49
Sexp

874 :デフォルトの名無しさん:2008/10/19(日) 16:27:03
nextを大域変数として使っているけど
せっかくだからクロージャー使って局所変数として
もたせた方がいいんじゃない?

875 :デフォルトの名無しさん:2008/10/19(日) 16:33:47
あ、それとdisplay使って副作用として
画面に表示して関数の値は#tとかというのは
ダメかな。

876 :デフォルトの名無しさん:2008/10/19(日) 17:29:52
>>873
(sexp 873) ;-> T

877 :デフォルトの名無しさん:2008/10/19(日) 21:13:01
>>872
ググるまで意味わかんなかった。


878 :デフォルトの名無しさん:2008/10/19(日) 22:54:11
シーピーアールとなぜ呼べない

879 :デフォルトの名無しさん:2008/10/20(月) 01:03:48
そんなあーた面倒くさい

carやcdrをシーエーアール・シーディーアールとは読まんでしょふつー

880 :デフォルトの名無しさん:2008/10/20(月) 01:41:43
私、ず〜っとそう読んでた…

881 :デフォルトの名無しさん:2008/10/20(月) 02:49:31
lambdaはラムブダだよなJK

882 :デフォルトの名無しさん:2008/10/20(月) 04:39:53
ラムだっちゃ!

883 :デフォルトの名無しさん:2008/10/20(月) 10:07:27
>>830
CWRはバイトアドレッシングがどうのこうのと関係ないだろ?
CPR、CTRだってそうだけどな。

884 :デフォルトの名無しさん:2008/10/20(月) 11:00:21
>>882
今度使わせてもらうよ。

885 :デフォルトの名無しさん:2008/10/20(月) 14:29:10
Kahuaて実用に使える?

886 :デフォルトの名無しさん:2008/10/20(月) 14:38:28
デザイナが歩み寄れないって意味じゃページ量産の実用は難しいのかもと思ったり

887 :デフォルトの名無しさん:2008/10/20(月) 18:33:10
HTML を S式 にするのはたいして難しくない。

888 :デフォルトの名無しさん:2008/10/20(月) 20:22:31
有名なフリーソフトはソースコード解説本が出版されたりするけど
Webアプリにはそういうのないの?

889 :デフォルトの名無しさん:2008/10/20(月) 20:30:09
>>887
えー?
そりゃプログラマにはそうだろうけどなぁ

890 :デフォルトの名無しさん:2008/10/20(月) 21:02:49
>>888
オープンソースなら自分で読めるでしょ。

891 :デフォルトの名無しさん:2008/10/20(月) 21:09:00
KahuaはS式でViewを作ろうとするから、その辺がJSPやERBみたいに
なって、細かいヘルパーとか揃ってくればぜひ使いたいな。

Railsを真似したSchemeによるフレームワークって無いのかな。

892 :867:2008/10/20(月) 21:17:43
>>891
ある

893 :デフォルトの名無しさん:2008/10/20(月) 21:22:59
>>892
え、あるの?教えてw

894 :デフォルトの名無しさん:2008/10/20(月) 21:37:53
>>889
プログラマ以外は関係ないじゃん。
少なくともこの板では。

895 :デフォルトの名無しさん:2008/10/20(月) 21:41:20
>>894
板の話をすれば確かにそうなんだけど、
この場合は話の流れで出てきた「デザイナ(>>886)」を絡めた会話だと思う。

896 :デフォルトの名無しさん:2008/10/20(月) 21:43:56
>>893
このリポジトリに。
http://ey-office.net/svn/rails/trunk/GaucheRails/

897 :デフォルトの名無しさん:2008/10/20(月) 21:55:40
sxml <-> xml の変換はすごい簡単なんだから、
必要なときに変換すればいいんでないの?

898 :デフォルトの名無しさん:2008/10/20(月) 21:58:38
フレームワークを弄るデザイナなんて、
DOMくらい理解してるだろ。


899 :デフォルトの名無しさん:2008/10/20(月) 22:05:56
個別にはすごい簡単でもたくさん集まると嫌になってくる

900 :デフォルトの名無しさん:2008/10/20(月) 23:10:29
XMLの利点

閉じタグでつりあいをチェックできる
→typoにつよい

<むすー>
 <わはー>
</むすー>

この場合</むすー>の前に</わはー>があるとみなすんだっけ?
それともエラーになるんだっけ?

(むすー (わはー)
readがエラーを返す

901 :デフォルトの名無しさん:2008/10/20(月) 23:14:02
釣られてみる。
なして?

902 :デフォルトの名無しさん:2008/10/20(月) 23:23:52
<むすー>
 <わはー>
</むすー>
 </わはー>

ってのはXMLの仕様でやっちゃいけないと決まってるから
普通のパーサの実装なら </むすー> が見つかった時点でエラー

903 :デフォルトの名無しさん:2008/10/21(火) 01:00:54
well-formed とか valid とかの用語を使いたくない理由でもあるんですか?

904 :デフォルトの名無しさん:2008/10/21(火) 01:03:14
rails風FW嫌い
流行ってるしWebグラマには人気なのはわかるけどさ・・・・

905 :デフォルトの名無しさん:2008/10/21(火) 01:28:42
>well-formed
便利で実用的な言葉だ…

906 :デフォルトの名無しさん:2008/10/21(火) 09:00:37
http://article.gmane.org/gmane.lisp.openmcl.devel/2878

907 :デフォルトの名無しさん:2008/10/21(火) 12:41:39
htmlのついでにjavascriptも扱えるといいな

908 :デフォルトの名無しさん:2008/10/21(火) 12:47:08
lispcript

909 :デフォルトの名無しさん:2008/10/21(火) 13:17:28
「むすー」「わはー」ってなに?

910 :デフォルトの名無しさん:2008/10/21(火) 14:30:26
>>909
hogeとかgegeとかと一緒じゃね?


911 :マジレスごめん:2008/10/21(火) 14:41:58
「むすー」め
「さんー」よくきー
「けよー」や
「まおー」とこに
「わはー」

912 :デフォルトの名無しさん:2008/10/21(火) 15:13:04
わはーとむすー
http://www.invizoo.com/geru/gallery/graphics/nijiura/wahawhf01.jpg

913 :デフォルトの名無しさん:2008/10/21(火) 15:23:04
結局そういう方向かよ・・・orz

914 :デフォルトの名無しさん:2008/10/21(火) 16:26:29
だれかLisp50に出た人いないの?

915 :デフォルトの名無しさん:2008/10/21(火) 16:44:11
>>912
そっちのオタクの世界なのか。

916 :デフォルトの名無しさん:2008/10/21(火) 17:05:39
笑ってるからわはーで、むすっとしてるからむすーなんか?
わけわからん

917 :デフォルトの名無しさん:2008/10/21(火) 17:20:08
>>912
なんじゃそりゃ〜!
マジでfoo,barのたぐいかと思った

918 :デフォルトの名無しさん:2008/10/21(火) 18:23:37
正直ちょっと癒された。

919 :デフォルトの名無しさん:2008/10/21(火) 20:27:59
>>896
これって実績あるの?セミナー用に作っただけじゃなくて?

920 :デフォルトの名無しさん:2008/10/21(火) 20:28:25
>>914
これか。面白そうだな。
http://www.lisp50.org/

921 :デフォルトの名無しさん:2008/10/22(水) 01:54:07
「ほげ」って嫌いだから、
今度から「わはー」と「むすー」使うわw

922 :デフォルトの名無しさん:2008/10/22(水) 02:22:46
http://d.hatena.ne.jp/conceal-rs/20081019/1224388892

うーん。変な構文(人に優しい構文ってなんだよ)を導入するより
S式に拒否反応を示す馬鹿をチームから捨てた方が早いんじゃないかな。

923 :デフォルトの名無しさん:2008/10/22(水) 02:30:36
Lispからむき出しのS式を取ったらLispじゃなくなると思う。

924 :デフォルトの名無しさん:2008/10/22(水) 02:35:49
Schemeに関する質問ですが、
Listにある4×4マトリックスの四つ、例えば
'((1 2 3 4)(5 6 7 8)(9 0 1 2)(3 4 5 6))を
((1 8 9 3)(2 6 0 4)(3 7 1 5)(4 8 2 6))
という形にリカーシブに4つのマトリックスを転置行列したいのですが、思うようにいかず困っています。
どちら様かアイデアを頂ければ大変助かります。宜しくお願いします。

925 :デフォルトの名無しさん:2008/10/22(水) 02:51:44
gosh> (define M '((1 2 3 4) (5 6 7 8) (9 0 1 2) (3 4 5 6)))
M
gosh> (use srfi-1)
#<undef>
gosh> (apply zip M)
((1 5 9 3) (2 6 0 4) (3 7 1 5) (4 8 2 6))

926 :デフォルトの名無しさん:2008/10/22(水) 02:54:57
R5RS の範囲でならこう書けるかな。
(define (substitution mat) (apply map list mat))

927 :デフォルトの名無しさん:2008/10/22(水) 02:57:30
(apply map list '((1 2 3 4) (5 6 7 8) (9 0 1 2) (3 4 5 6)))

928 :デフォルトの名無しさん:2008/10/22(水) 03:04:48
パズルみたいだなぁ。
reformで新しいリストを作成して、その中に入れていくという方法もあるかな。

929 :デフォルトの名無しさん:2008/10/22(水) 03:38:57
(apply proc arg1 ... args)

R5RS
> procは手続き、argsはリストでなければならない。
> リスト`(append (list arg1 ...) args)'の要素を実引数に使用してprocを呼び出す。

(append (list list) '((1 2 3 4) (5 6 7 8) (9 0 1 2) (3 4 5 6)))

(map list '(1 2 3 4) '(5 6 7 8) '(9 0 1 2) '(3 4 5 6))


930 :デフォルトの名無しさん:2008/10/22(水) 06:31:05
>>922
ruby屋はこれだから(ry

931 :デフォルトの名無しさん:2008/10/22(水) 07:51:28
>>922
自分で構文作れるってもLispの一部だからまぁいいんじゃね?
何かが奇妙だ、とは思うけどw
ただ、構文と実装と両方のバグとか不具合に対応するって
大変だったろうな。

932 :デフォルトの名無しさん:2008/10/22(水) 09:34:00
>>924
再帰じゃ無くしかもベクターだけど、数値計算は汎用ルーチンでやった方が安心。
http://codepad.org/f6dZESSj

933 :デフォルトの名無しさん:2008/10/22(水) 10:34:40
あー、イプシロンの話は聞きたかったかも

そうしょっちゅう上京していられないのだが

934 :デフォルトの名無しさん:2008/10/22(水) 13:45:42
>>926
>>927
早速のお返事ありがとうございます。我流で本を読みながらその付属の問題からのモノだったのですが、
carとcdrとlistに関しての基本的なリカーシブのトピックなので、頂いたコードは少しトピ違いでした(最初にいっておけばよかったです、申し訳ないです)。

>>928
そうです、パズル感覚の問題だと思います。Reformを調べてみます。

とりあえずお答えありがとうございます。

935 :デフォルトの名無しさん:2008/10/22(水) 14:04:35
>>932補足
SICPではaccumulateを使って再帰処理してる。
http://codepad.org/jFscjfs5

936 :デフォルトの名無しさん:2008/10/22(水) 14:26:21
>>935
SICPではaccumulate(=fold-right)かfold-leftで再帰処理だね。

937 :デフォルトの名無しさん:2008/10/22(水) 14:37:15
>>935
それをfold-leftで書き直せれば再帰処理を理解できてるか判断できるね。

938 :デフォルトの名無しさん:2008/10/22(水) 20:26:35
>>937
fold-leftで再帰処理したプログラムも作ってみた。
http://codepad.org/y1R8xgv9

939 :デフォルトの名無しさん:2008/10/22(水) 22:51:23
>>925 http://codepad.org/NtJ0gPED
>>926 http://codepad.org/aiOINqa8
>>932 http://codepad.org/f6dZESSj
>>935 http://codepad.org/jFscjfs5
>>938 http://codepad.org/y1R8xgv9

940 :デフォルトの名無しさん:2008/10/24(金) 04:43:30
Javaをボチボチやるものですが、
関数型言語(Scheme,Erlang, Haskell, ML等)を学ぶ上での将来性の利点を教えてください。

941 :デフォルトの名無しさん:2008/10/24(金) 05:00:49
そのままJavaやってた方がいいよ

942 :デフォルトの名無しさん:2008/10/24(金) 05:04:26
やるならまずは一つの言語に集中したほうがいい。
両方やって虻蜂取らずになるよりか、まずは簡単なJavaをある程度マスターして、
それから関数型をやってもまったく遅くない。

943 :デフォルトの名無しさん:2008/10/24(金) 05:46:05
>>940
Javaをやってると
再帰的な関数記述の感覚が鋭くなるかというと、
そうではないと思う。将来性を考えて関数型を
やりたいなら、今すぐ切り替えるべき。

944 :デフォルトの名無しさん:2008/10/24(金) 07:11:35
>>940
javaにも応用できる知識を学べる。
Scheme(Lisp)は回帰ロジックに強いという印象を持ちました。

945 :デフォルトの名無しさん:2008/10/24(金) 07:31:58
>>940
再帰だけなら関数型言語やらなくても
Eric Roberts "Thinking Recursively with JAVA"
でも読めば足りる。

JAVAで不満が出てきてから他の言語を考えれば?
いろんな言語を知っててもどれもボチボチでは困ると思うよ。
その言語のどういった点が良さそうかハッキリさせてから
完全に乗り換えるのがいい。

946 :デフォルトの名無しさん:2008/10/24(金) 07:56:45
>>940
関数型言語をやるのはやめときな。

947 :デフォルトの名無しさん:2008/10/24(金) 08:13:14
SICP
--- 5人の若者達が時に傷つけ合い、時に励ましあいながら成長していく青春ドラマ ---

出演:
Ben Bitdiddle
Alyssa P. Hacker
Eva Lu Ator
Louis Reasoner
Lem E. Tweakit

948 :デフォルトの名無しさん:2008/10/24(金) 08:50:17
>>940
ここできくと、背中を押す人や梯子を外す人など様々な人がいるけど、やりたければ
その気持ちに忠実にすればいい。

関数型の利点は、関数を作るときに最小単位をしっかり考えるくせがつく。それが無
ければデバックもままならない。javaなどなら一つの関数にいろんな動作を入れがち
だが、これは関数型と手続き型の大きな違いで、関数型のプログラミングを学と、読
みやすいソースを記述することができるね。それ故に、生産性がいいと言われている。

将来性だが、マシンパワーは普通のことをする限り最適化に気合を入れる必要がな
くなってきたこともあって、生産性の高さに変わってきている。生産性の高さはLLがあ
るけどLLより速くって、生産性があるとなれば手続き型言語より関数型に変わる。この
変化の兆候は少しずつみえてきている。おそらく、ここ5年で関数型へもう少し切り替
わるだろう。

一方javaでの大きな問題は何でもかんでもオブジェクト指向で片付ける悪い癖がつく
ね。他へパラダイムシフトをするときについていけなくなる危険はある。だから、関数
型を知っておくと、変化についていける可能性は高いと思うね。javaVMも多様な方向に
動き出していて、scala,clojureでてきているから、javaのライブラリをそれから利用できる
ために、javaを知っておくと有利になる部分も持っていますね。

いかんせん、日本語の情報が少ないものが多いので、gauche,ocaml,haskell,common lisp
など、日本語で書籍が出ているものに手を出す方が勉強しやすいだろう。

949 :デフォルトの名無しさん:2008/10/24(金) 09:07:31
シフトするのだろうか
広げるというならわかるが
cpr

950 :デフォルトの名無しさん:2008/10/24(金) 10:35:18
>>940
将来はコンピュータの機械命令が関数型になるであろうから関数型をやる
というのでは答えにならないのかな。

951 :デフォルトの名無しさん:2008/10/24(金) 10:40:21
でーたふろーけいさんきですねわかります

952 :デフォルトの名無しさん:2008/10/24(金) 12:43:11
>>950
30年前からタイムスリップしてきたんですね。


953 :デフォルトの名無しさん:2008/10/24(金) 12:47:37
端的に>948がまとめてくれてて嬉しい。

954 :デフォルトの名無しさん:2008/10/24(金) 12:54:34
>>952
LISPマシンは時期尚早だっただろうけれど、20年後には
Haskell的マシンになるんじゃないの?

955 :デフォルトの名無しさん:2008/10/24(金) 12:58:06
たくさん金をつぎこめるCPUが速い
特殊化は効果があげられない
というのが前世紀の結論です。

956 :デフォルトの名無しさん:2008/10/24(金) 13:15:15
>>955
機械命令についてはよくわからないけど、
1024コアの並列といった環境でも手続き型言語は有効なの?

957 :デフォルトの名無しさん:2008/10/24(金) 14:10:55
何を書きたいかが重要
どのような言語で書くかは最初は気にしない
似たようなものを何度も書くようになってから書きやすい言語を探せばいい

958 :デフォルトの名無しさん:2008/10/24(金) 17:21:15
数学やってきた人だと関数型の方が激しくわかりやすいんじゃないか。

959 :デフォルトの名無しさん:2008/10/24(金) 17:39:01
いや、本当に数学を理解したは再帰を思いつく。

960 :デフォルトの名無しさん:2008/10/24(金) 17:50:18
>>958
そうおもう。lispも理解しやすいけど、特にhaskellは扱い易そうに思う。<数学やってきた人

961 :デフォルトの名無しさん:2008/10/24(金) 21:29:10
Cが普及したのはイルミナティが、Lispは使えない特殊用途の言語、
と言う嘘を大衆に植え付けたからだよ。
当時のイルミナティはMITのトイレから入ることが出来たんだが、
あ、、、誰か来たから後で続き書くね(^o^)/

962 :デフォルトの名無しさん:2008/10/24(金) 21:37:02
はやくに

963 :デフォルトの名無しさん:2008/10/24(金) 21:59:49
イルミナティの"ガベージコレクター"に捕まったな。
捕まると洗脳されてCしか書けない体にされてしまう。
lambdaのスペルを一生思い出せないようにされるという。
これ以上は危なくて話せない。

964 :デフォルトの名無しさん:2008/10/24(金) 22:14:48
特殊用途のハード+用途が分からん言語って最強じゃん

965 :デフォルトの名無しさん:2008/10/24(金) 22:21:06
>>961
アホな低級レス
どうしようもない

966 :デフォルトの名無しさん:2008/10/24(金) 22:59:11
このスレには中村正三郎がいます。

967 :デフォルトの名無しさん:2008/10/24(金) 23:06:59
あのアルファブロガーの?

968 :デフォルトの名無しさん:2008/10/24(金) 23:16:05
21世紀になってUnixはないでしょって。
これはね、SolarisがとうとかLinuxがどうとかというレベルじゃないですよ。
もうひとつ上のレベル。
OSという本質的な意味ね。IBMとかが「Linuxで!」なんて聞くと「え?っ!」て思うもん。
「あなたたち、IBMでしょ。それはないんじゃないですか?」って。
そりゃMulticsの時代にMulticsってヤバイからUnixねって、それって何10年も前の話でしょ。
http://sdc.sun.co.jp/news/200201/danwa01.html

969 :デフォルトの名無しさん:2008/10/25(土) 00:10:46
論理型はどうなんだろ
大学で単位取っただけだから全く知らね

970 :デフォルトの名無しさん:2008/10/25(土) 00:26:18
>>956
SMPもそういう夢を見られた頃がありました。
マルチコアだって今は一桁だからスケールしてるだけ。

971 :デフォルトの名無しさん:2008/10/25(土) 01:42:27
オートマートンとかもその類かな。

972 :デフォルトの名無しさん:2008/10/25(土) 01:43:34
>>968
ナイス。

973 :デフォルトの名無しさん:2008/10/25(土) 01:53:47
映画「ジュラシック・パーク」の子どもが、「UNIXなら知ってるわ!」と聞いたのがはじめてのUNIX

974 :デフォルトの名無しさん:2008/10/25(土) 02:03:29
Unixは古い。Windowsは科学じゃない。それは分かるが
Web2.0とかクラウドみたいな怪しげなところに行くのはやめてくれ

975 :デフォルトの名無しさん:2008/10/25(土) 02:03:57
Dr.苫米地ってLisperとして凄い人なの?

976 :デフォルトの名無しさん:2008/10/25(土) 02:06:21
> Web2.0とかクラウドみたいな怪しげなところに行くのはやめてくれ
ポール・グレアムはそんな方向ですがやっぱり怪しげですか?

977 :デフォルトの名無しさん:2008/10/25(土) 02:29:19
21世紀になってLispはないでしょって。
これはね、Common LispがとうとかSchemeがどうとかというレベルじゃないですよ。
もうひとつ上のレベル。
関数型言語という本質的な意味ね。MITとかが「Lispで!」なんて聞くと「え?っ!」て思うもん。
「あなたたち、MITでしょ。それはないんじゃないですか?」って。
そりゃFortranの時代にFortranってヤバイからLispねって、それって何10年も前の話でしょ(笑)

978 :デフォルトの名無しさん:2008/10/25(土) 02:42:20
>>976
pgは雲行きが怪しくなったらスパッと諦める

979 :デフォルトの名無しさん:2008/10/25(土) 02:50:18
山田君、>>978さんに座布団2枚差し上げて。


980 :デフォルトの名無しさん:2008/10/25(土) 02:51:00
OIBMとかが「Linuxで!」なんて聞くと「え?っ!」て思うもん。
MITとかが「Lispで!」なんて聞くと「え?っ!」て思うもん。
「デルモ!」っていったら「え?っ!」ってみんなが。

981 :デフォルトの名無しさん:2008/10/25(土) 07:16:27
ベッチー大人気だな。

982 :デフォルトの名無しさん:2008/10/25(土) 15:35:43
産め

983 :デフォルトの名無しさん:2008/10/25(土) 15:36:22


984 :デフォルトの名無しさん:2008/10/25(土) 15:37:13
ウメェ〜

985 :デフォルトの名無しさん:2008/10/25(土) 15:39:42
大分県南海部郡『宇目』町

986 :デフォルトの名無しさん:2008/10/25(土) 15:41:02
膿め

987 :デフォルトの名無しさん:2008/10/25(土) 16:01:56
無理に埋めなくて良いよ。

988 :デフォルトの名無しさん:2008/10/25(土) 18:32:02
税金大量投入して関数型に適したCPUを独自開発したら
どないなもんだろう。経済対策にもなるしあの忌々しい
ノイマン型から脱出できるかもしれないじゃん。
臨時経済対策にどうですか、麻生さん。


989 :デフォルトの名無しさん:2008/10/25(土) 19:51:05
まだ速さが足りないのかw

990 :デフォルトの名無しさん:2008/10/25(土) 20:12:34
>>988
論理型@ICOT
データフロー@九州大学
と既にやってます。

991 :デフォルトの名無しさん:2008/10/25(土) 20:15:08
あっそう

992 :デフォルトの名無しさん:2008/10/25(土) 20:39:08
倦め

993 :デフォルトの名無しさん:2008/10/25(土) 20:39:52
熟め

994 :デフォルトの名無しさん:2008/10/25(土) 20:40:44
績め

995 :デフォルトの名無しさん:2008/10/25(土) 21:38:55
Lisp Scheme Part23
http://pc11.2ch.net/test/read.cgi/tech/1215875388/

996 :デフォルトの名無しさん:2008/10/25(土) 21:56:28
次スレ Lisp Scheme Part 24
http://pc11.2ch.net/test/read.cgi/tech/1224939205/l200


997 :デフォルトの名無しさん:2008/10/25(土) 22:02:26
次スレテンプレに黒ちゃん御言葉集を

998 :デフォルトの名無しさん:2008/10/25(土) 22:17:50
次の1さん乙。まだテンプレコピー中かも知れんのでこちらで礼を書いとくわよ(うふ)♪

999 :デフォルトの名無しさん:2008/10/25(土) 22:29:26
999ゲット!!

1000 :デフォルトの名無しさん:2008/10/25(土) 22:30:38
1000をとったからlispはこれからはやるよ 

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

251 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)