[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 18:10 / Filesize : 180 KB / Number-of Response : 714
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part25



1 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:16:33 ]
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/
Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.cgi/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 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:17:35 ]
□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)

□参考リンク□

日本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 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:18:30 ]
面倒くせえ
後は誰か頼むw

4 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:08:31 ]
□仕様関係□

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.lispworks.com/documentation/HyperSpec/Front/index.htm

Common Lisp Quick Reference (英語)
ttp://clqr.berlios.de/

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

5 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:08:56 ]
□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/

6 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:09:24 ]
□書籍関連(1)□

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

Programming Languages: Application and Interpretation (英語)
ttp://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
ブラウン大学で使われている、Schemeを使ったプログラミング言語論の教科書。
SICPでは触れられていない継続についても、Webアプリと関連づけて詳述されています。
全文がpdf形式でダウンロードできます。

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入門書。全文がオンラインで読めます。

7 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:10:01 ]
□書籍関連(2)□

『プログラミング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入門書。全文がダウンロードできます。

Common Lisp: A Gentle Introduction to Symbolic Computation (英語)
ttp://www.cs.cmu.edu/~dst/LispBook/
Common Lispを使った非常に丁寧なプログラミング入門書。
全文がpdf形式でダウンロードできます。

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』として出版されています。
ttp://pcl.lispuser.net/ (日本語版非公式サポートページ)

『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の力の源泉であるマクロプログラミングを解説。

8 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:10:14 ]
実装いろいろ
ttp://community.schemewiki.org/?scheme-faq-standards#implementations

9 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:10:24 ]
□その他(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

10 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:13:38 ]
□その他(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



11 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:14:18 ]
□その他(3)□

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

Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/
コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。

12 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:14:42 ]
□Schemeの実装(1)□

Gauche: マルチバイト文字に対応したR5RS準拠のScheme処理系。川合史朗氏作。
ttp://practical-scheme.net/gauche/index-j.html
ttp://jp.youtube.com/watch?v=WEBOdWyGE3E (川合史朗氏によるGaucheに関するトーク)

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
ftp://ftp.ecn.purdue.edu/qobi/fdlcc.pdf (Stalinの最適化技術を解説した論文)

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

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

JScheme: Javaで書かれたR4RS準拠Scheme処理系。Javaインターフェイスをサポート。
ttp://jscheme.sourceforge.net/jscheme/main.html

13 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:15:16 ]
□Schemeの実装(2)□

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

Ypsilon Scheme System: 藤田善勝氏が開発中のR6RS準拠のScheme処理系。
ttp://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon_Scheme_System

Mosh: higepon氏が開発中のR6RS準拠Scheme処理系。
ttp://code.google.com/p/mosh-scheme/

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/

14 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:15:53 ]
□Common Lispの実装□

Steel Bank Common Lisp: 代表的なCommon Lisp処理系。CMUCLより派生。
ttp://www.sbcl.org/

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

GNU CLISP: Common Lisp処理系。バイトコード変換系。
ttp://www.clisp.org/

Clozure CL: Common Lisp処理系。
ttp://trac.clozure.com/openmcl

Embeddable Common Lisp: Cで書かれたプログラムへの埋め込みが可能なCommon Lisp処理系。
ttp://ecls.sourceforge.net/

Armed Bear Common Lisp: JVM上で動くCommon Lisp処理系。JVMバイトコード変換系。
ttp://armedbear.org/abcl.html

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

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

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

Scieneer Common Lisp: 商用Common Lisp処理系。
ttp://www.scieneer.com/scl/index.html

15 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:17:40 ]
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

16 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:17:46 ]
□その他の実装□

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/

Lisp interpreter in AS3: ActionScriptで書かれたLispインタプリタ。
ttp://www.solve-et-coagula.com/?p=8

Arc: ポール・グレアム氏が開発中の新しいLisp。
ttp://arclanguage.org/

Clojure: MLやHaskellの特長を取り入れた新しいLisp。JVMバイトコード変換系。
ttp://clojure.org/

Qi: MLやHaskellの特長を取り入れた新しいLisp。型の定義にシーケント計算表記を用います。
ttp://www.lambdassociates.org/

GOO: DylanとSchemeの影響を受け、OOPをサポートした新しいLisp。
ttp://people.csail.mit.edu/jrb/goo/

Liskell: Lispの顔をしたHaskell。
ttp://liskell.org/

17 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:18:10 ]
□イベント関連□

Shibuya.lisp
ttp://shibuya.lisp-users.org/
東京地区、特に渋谷周辺半径2万キロの Lisp 系プログラマによる非営利団体。
第1回テクニカルトークは2008年10月18日に開催されました。

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/

18 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:20:33 ]
□2ch上にあるLisp関連のスレ□

(make-thread :name common-lisp :part 5)
ttp://pc11.2ch.net/test/read.cgi/tech/1215834213/
Emacs Lisp 3
ttp://pc11.2ch.net/test/read.cgi/tech/1191875993/
【魔法】リリカル☆Lisp【言語】
ttp://pc11.2ch.net/test/read.cgi/tech/1183396621/
【SICP】計算機プログラムの構造と解釈 Part2
ttp://pc11.2ch.net/test/read.cgi/tech/1203096230/
【普通のやつらの】 Arc Language 0 【上を行け】
ttp://pc11.2ch.net/test/read.cgi/tech/1202098949/
【CGI】実用比較Lisp vs C/C++【GUI】
ttp://pc11.2ch.net/test/read.cgi/tech/1150501484/
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
ttp://pc11.2ch.net/test/read.cgi/tech/1140006937/
Lisp@UNIX版
ttp://pc11.2ch.net/test/read.cgi/unix/1019926525/
Lisperこそ真のプログラマーよ!!
ttp://pc11.2ch.net/test/read.cgi/prog/1175791979/
LISPってさ〜
ttp://science6.2ch.net/test/read.cgi/sim/1015169050/
【数式処理システム】 Maxima 【Common Lisp】
ttp://science6.2ch.net/test/read.cgi/math/1220340695/

19 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:22:31 ]
テンプレ長いよ! 連投規制に二回も引っ掛かったよ!

>>3
諦めんなよ!

>>8 >>15
お前らも手伝えよ!

20 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:36:46 ]
これは乙じゃなくてλなんだからね



21 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 00:55:07 ]
乙です

22 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:00:04 ]
>>1
っT

23 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:37:21 ]
1乙

Little終わったので萩谷先生の関数プログラミング買った。
3月まではこれとものまね鳥読む。

24 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 04:37:00 ]
てんぷら増えすぎじゃないか?
毎回20レス近く潰れるのは無駄な気がする
どうせ雑談しかしてないし、こんな長いと読まないっしょ
仕様書程度でいいんじゃないか


25 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 04:47:45 ]
つまり
Common Lisp→EuLisp
R6RS→R5RS
ですね 乙と違うんだからね

26 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 05:00:33 ]
>>24
「仕方ない。代わりに貼るか→この分量マジすか」
というコンボを喰らった身としては、同意せざるを得ない。

細かい内容は、テンプレ置き場でまとめれば良いと思う。

27 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 06:12:57 ]
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ まピョーん☆
 彡、   |∪|  /
/ __  ヽノ /
(___)   


28 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 06:49:51 ]
なんだお前?やるんか?
くらえ!つ nil

29 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 11:03:20 ]
テンプレ置き場ってないし。

WiLikiあたり借りる?

30 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 11:21:19 ]
>>29
>>2



31 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 00:50:24 ]
テンプレが役に立ってないことがよくわかる。

32 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 07:52:33 ]
>>30 の役には立っている。

33 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 08:45:23 ]
on lisp読み終わったんだが
次はpractical common lisp読んだらいいのかな

schemeの対応する本はないのかな

34 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 09:04:48 ]
SICP

35 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 10:10:36 ]
>>34
昔、飛ばし読みしちゃったので
今度は問題やりながら読んできます

36 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 17:23:59 ]
cheese.2ch.net/math/kako/1000/10001/1000107761.html
★100!と1000!の桁数の出し方★

codepad.org/lbITOona

37 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 22:59:45 ]
>>36
このほうがいい。10000!の桁数も楽々

(define (place-of n)
(+ 1 (inexact->exact (floor (* 0.4342944819032518 (log n))))))

codepad.org/8evfGr7x

38 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 19:14:11 ]
関数のアーギュメントの順番ってこうするのがいいって習慣みたいなのはないの?


(setf 出力 入力)
(with-open-file 変数 ファイル)

だと、出力 入力の順番なのかな?


この辺の例をみてると
www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp11.html

(fun 主要なもの 補助的なもの さらに補助的なもの...)

と定義してるようにも見えるんだけど 








39 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:10:26 ]
その辺は場合にもよるから一般化はできないね。
反例は例えば with-input-from-string は入力が先だし。
まぁ、主要なもの、対象とするものが前のほう、くらいだろうね。


40 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 23:53:23 ]
jibun.atmarkit.co.jp/ljibun01/rensai/genius/03/01.html
誰も言及しないのは何故。



41 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:26:16 ]
既にCyanスレで見たから。

42 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:40:01 ]
そんなのもあるんだ

43 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:40:49 ]
クラスのないオブジェクト指向とかS式のないマクロとかは面白いね
大前提をぶっ壊すところが

44 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 03:00:46 ]
>>43
S式の無いマクロならDylanがあるし、
プロトタイプベースのOOPならSelfとかがあるじゃん。

むしろ、そういう引用元の概念を、あの歳できっちり理解してるのが末恐ろしいよ。

45 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 04:16:34 ]
5つの自然言語ならよかったのになあ

46 名前:デフォルトの名無しさん [2009/01/17(土) 15:28:41 ]
高速で使えるライブラリのそろったCyan実装が登場したら
Ruby以上に世界中のハッカーにインパクトを与えそう。

47 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 16:11:52 ]
>>40
ニュータイプって感じだね。

48 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:20:32 ]
私は信じんよ、ニュータイプの存在など

49 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:30:31 ]
既存のpythonのlibraryが使えてマクロありなら便利かもね

50 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 23:55:38 ]
現状だと荒削りだし、そりゃ言い杉なんじゃないかな。将来は楽しみだけど。
素直に理論面とかハードウェアの知識を学んでいったら楽しみだね。
まだだ、まだ終わらんよ!とか言わされちゃうのかなー



51 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 00:14:09 ]
本人乙www

52 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 01:22:19 ]
クワトロ・バジーナ降臨ときいてすっ飛んできました。
アクシズ落とさないでね。

53 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 09:45:33 ]
wikipediaのclikiのリンクが古いままだ

54 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 12:38:12 ]
>>53
なんのための「Wiki」pediaだよ

55 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 12:59:52 ]
>>53,54
直しておきますた ノシ

56 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 18:08:54 ]
>>37
goshだとexactな数値のlogがとれなかった

57 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 22:18:02 ]
>>56
他の処理系みた?
Gaucheで数値計算するから・・・

58 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:06:53 ]
>>56
普通にとれるだろ
gosh> (log 1000)
6.907755278982137
gosh> (log 10000)
9.210340371976184
gosh> (log 100000)
11.512925464970229
gosh> (* 0.4342944819032518 (log 1000))
3.0
gosh> (* 0.4342944819032518 (log 10000))
4.0
gosh> (* 0.4342944819032518 (log 100000))
5.0

59 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:13:57 ]
gosh> (* 0.4342944819032518 (log 3628800))
6.559763032876794
gosh> (* 0.4342944819032518 (log 93326215443944152681699238856266700490715968264
38162146859296389521759999322991560894146397615651828625369792082722375825118521
0916864000000000000000000000000))
157.97000365471578

60 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:17:51 ]
gosh> (log 402387260077093773543702433923003985719374864210714632543799910429938
51239862902059204420848696940480047998861019719605863166687299480855890132382966
99445909974245040870737599188236277271887325197795059509952761208749754624970436
01418278094646496291056393887437886487337119181045825783647849977012476632889835
95573543251318532395846307555740911426241747434934755342864657661166779739666882
02912073791438537195882498081268678383745597317461360853795345242215865932019280
90878297308431392844403281231558611036976801357304216168747609675871348312025478
58932076716913244842623613141250878020800026168315102734182797770478463586817016
43650241536913982812648102130927612448963599287051149649754199093422215668325720
80821333186116811553615836546984046708975602900950537616475847728421889679646244
94516076535340819890138544248798495995331910172335555660213945039973628075013783
76153071277619268490343526252000158885351473316117021039681759215109077880193931
78114194545257223865541461062892187960223838971476088506276862967146674697562911
23408243920816015378088989396451826324367161676217916890977991190375403127462228
99880051954444142820121873617459926429565817466283029555702990243241531816172104
65832036786906117260158783520751516284225540265170483304226143974286933061690897



61 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:18:15 ]
96848259012545832716822645806652676995865268227280707578139185817888965220816434
83448259932660433676601769996128318607883861502794659551311565520360939881806121
38558600301435694527224206344631797460594682573103790084024432438465657245014402
82188525247093519062092902313649327349756551395872055965422874977401141334696271
54228458623773875382304838656889764619273838149001407673104466402598994902222217
65904339901886018566526485061799702356193897017860040811889729918311021171229845
90164192106888438712185564612496079872290851929681937238864261483965738229112312
50241866493531439701374285319266498753372189406942814341185201580141233448280150
51399694290153483077644569099073152433278288269864602789864321139083506217095002
59738986355427719674282224875758676575234422020757363056949882508796892816275384
88633969099598262809561214509948717012445164612603790293091208890869420285106401
82154399457156805941872748998094254742173582401063677404595741785160829230135358
08184009699637252423056085590370062427124341690900415369010593398383577793941097
00277534720000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000)
+inf.0

62 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:21:43 ]
(log (fact 1000))が計算できないのはGaucheの事情。
practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E6%95%B0%E5%80%A4%E3%81%AE%E5%85%A5%E5%87%BA%E5%8A%9B

63 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:25:55 ]
practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E9%96%A2%E6%95%B0%E3%81%AE%E5%86%8D%E5%AE%9A%E7%BE%A9

64 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 23:34:44 ]
一般的なlog10の計算の注意点
codepad.org/MjooyHH4

65 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 11:15:03 ]
on lispの原著が34000円もするなんて・・・
最後のいくつかの章で図がみえないから欲しかったのに

66 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:18:17 ]
何千ページの本なの?

67 名前:デフォルトの名無しさん [2009/01/19(月) 20:55:42 ]
www.paulgraham.com/onlisp.html
>> 65 ここから落とせない? 著者公開してるけど.

68 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:32:16 ]
>>67
そこのは、例えばFigure 24.1
が見えないよ。他にも見えない図がいくつかあった

69 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 21:38:09 ]
on lisp $13 しかし日本への送料が4000円
www.lulu.com/content/3060872

こっちから買うかな
何冊かまとめ買いすれば送料安くなんないかな

70 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 22:35:33 ]
日本語訳の本に載ってないって事?



71 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 00:18:36 ]
ttp://www.amazon.co.jp/dp/0130305529/
ttp://www.amazon.com/dp/0130305529/
高いな

72 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 22:57:56 ]
Head First Common Lispはまだか。

73 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 03:10:07 ]
たぶん一生でないよw

74 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 13:05:51 ]
主婦の友増刊号「誰にもわかるコモンリスプ」

75 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 14:23:07 ]
片仮名で書くとめちゃくちゃイメージ違うなぁ。

76 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 16:32:13 ]
フランス語みたい。

イロムサコン・フィヨンセ・コモンリスプ

77 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 01:35:12 ]
特別寄稿ガイ・スチール・ジュニア氏
「君もリスプやらないか?」

78 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 02:00:30 ]
「いいこと思いついた。
お前、俺のテイルジャンプで、メッセージパッシングしろ」

79 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 17:50:52 ]
「アッーーク!」

80 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 21:18:38 ]
アンジー・コモン・リスプ



81 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 23:24:26 ]
微妙にワロタ

82 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 02:43:49 ]
GaucheにIDE付けれの人まだ張り付いてるのか

83 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 03:26:34 ]
Lisp 系言語だと emacs か vi しか選択肢が無いのは事実だけど、
あらたに統合環境を用意する積極的な理由ってのも無いんだよなー。

欲しいのはデバッガみたいだけど、
仮にデバッガが便利だとしても Scheme にふさわしいデバッガのモデル
は過去事例を研究したところで容易に決められるとは思わんのだよなー。

これだけ長い Lisp の歴史の中でいわゆる「デバッガ」が言及された
ことがそんなにないってのはただの偶然だとでも思ってんだろうか。

84 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 06:25:23 ]
pltはそのへんがんばってるんじゃないの

85 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 06:30:20 ]
なんでlispは歴史的にデバッガが言及されないの?

86 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 08:36:47 ]
>>85
文脈嫁。

>>83 は、GCを考案し、動的言語の先駆けとなったLisp に、デバッガの話が持ち上がらなかったのは、Lispにデバッガが不要だから、と云いたいんだろ。

87 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 08:47:36 ]
>>83は、これだけ長い Lisp (スレ)の歴史の中で、と言いたかったんだよ。

88 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 09:10:02 ]
>>83
Schemeの話をLisp系と一般化しないでくれ。Emacs Lispのデバッガはなかなかいい、
CL系は昔から規格に最適化オプションで debug 指定ができたりと、デバッガは
売りにしてたよ。SchemeでもPLTやGuileはがんばってるじゃん。

89 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 09:43:29 ]
DebuggerのないLisp machineなど存在しない。
もともとsmalltalk実装のモデルになったような
統合プログラミング環境を持っていたのがLisp。
今はむしろLLみたいな軽い環境が流行りで、
外界とのインターフェースは昔より豊か。

90 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 16:54:11 ]
eclipseあたりに自力で作ってみたらいいのに



91 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 17:19:03 ]
調べるのめんどくさいんでここで聞きますがscheme ってバイトコードはけるの

92 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 17:42:27 ]
>>91
Kawa, JSchemeでググレカス

93 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:42:50 ]
>>89
Smalltalkより前にIDEを持っていたLispってどんなLispだよw

94 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 18:46:35 ]
つ ttp://ja.wikipedia.org/wiki/Interlisp

95 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:05:55 ]
まったく関係ないがh抜き不便

96 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:15:49 ]
アセンブラ使え

97 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 19:23:10 ]
>>93
TECO+MacLisp
後継のEmacsがSmalltalk-76と同時期。

98 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 21:57:10 ]
超古代文明の発掘みたいな。
断絶があるのはなぜだろう。

99 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 21:58:24 ]
車輪の再発明と言ってだな、

100 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 00:28:22 ]
>>82
別にどんな主張をしようが構わないが、
「デバッガ」っていう重要なカテゴリ以下を私物化してるのがちょっと……。
あれのどこがGaucheのデバッガの話なのよ?

何で、自分のページとか作って、そこでやらないんだろうね?



101 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 11:20:53 ]
まあWiLilki的にひどすぎるということになれば管理者のShiroさんが強権発動するでしょ

102 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 13:43:07 ]
俺はffiの項目を私物化したいぞおお
ジョジョオ〜

103 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 21:30:00 ]
継続渡しマクロなんて作るぐらいなら
common lispの上にscheme作っちゃえばいいのに

104 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:30:15 ]
みんながACL使えばみんなが幸せ

105 名前:デフォルトの名無しさん mailto:sage [2009/01/27(火) 23:39:46 ]
もっとお手頃価格でACL売ってくれ。
俺も使うから。

106 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 02:43:48 ]
一方、ロシアのSchemerは黒板を使った。

107 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 03:34:23 ]
>一方、ロシアのSchemerは黒板を使った。
作らないところが寂しいよな

>もっとお手頃価格でACL売ってくれ。
なんであんなに高いんだろうね?
年間売り上げみてみたいよ。


株主になっても一票そこに投じられそうもないのが悲しいやね

108 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 13:46:02 ]
ロシアのLisp事情ってどんな感じなんだろう。
あそこは数学も物理も凄いんでしょ?

109 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 14:21:33 ]
行って確かめてこいよ

110 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 16:10:27 ]
ロシアは遠いし言葉がわからないから
かわりにロシアンパブ行ってきます。



111 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 21:13:51 ]
ttp://sourceforge.jp/magazine/09/01/27/0039208

あとまあ、これもある意味予想通りではあるが、LispやScheme、Haskellと言ったあたりは、
結局のところ「語られる」言語であって、「使われる」言語ではないようだ。
HaskellにしろCommon Lispにしろ、近年ではライブラリも相当揃ってきており、
パフォーマンスの面から言っても実用言語として遜色ないものになりつつあるので、個人的には残念なのだが。

112 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 21:22:15 ]
Emacs Lispも仲間に入れてほしいんですけど。

113 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 21:52:50 ]
だが断る

114 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:17:45 ]
各個人の問題として何故使わないのか。

115 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:35:50 ]
先週新聞に載ってたセンター試験の数学UAをやってみたんだけど
21世紀になって10年たとうというのにひどいBASICのプログラムが載ってたんだわ
高校生に勉強させるなら
COMETでもMIPSでもいいからアセンブラでやらせるか
BFで難易度高めにするか
LispやHaskelやForthで教養を身につけさせるかすればいいのに
あるいはスパコンのためにFortranを教えるか


116 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:50:30 ]
>>114
次々と新たな処理系が開発されるのは、既にある処理系を使いたくないのかもな。
勉強のためだとしても、なんで人のソースを読むことより自分で書くことを選ぶのか。
それが問題だと思うよ。

117 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:52:42 ]
IT音痴大国の名に恥じないな。

118 名前:デフォルトの名無しさん mailto:sage [2009/01/28(水) 22:58:36 ]
Lispはラテン語ではない。と誰かが言ったとか言わないとか。

119 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 20:26:19 ]
むしろラテン語だろ

120 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 22:59:04 ]
まあもう少し待ってれば予想外の変化が起きるかもよ



121 名前:デフォルトの名無しさん mailto:sage [2009/01/29(木) 23:03:38 ]
Lisp/Scheme類は法律で禁止され、地下で開発するしかないのだ。

122 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:02:26 ]
>>115
あれはなんの冗談なんだろうと思ったな。
釣りじゃないのか、とか日付を確認したりとか。
徐々にその事実が恐ろしくなっていった。

>LispやHaskelやForthで教養を身につけさせるかすればいいのに
お前は俺かw


123 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 00:06:09 ]
BFで難易度をってところにワロタ

124 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 06:22:02 ]
d.hatena.ne.jp/niitsuma/20080209/1233260146

125 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:58:37 ]
Lisperだけで会社作ったら、経営していけるかな。

126 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:03:15 ]
codepad.org/7ozb95V2

127 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 05:02:34 ]
漢詩って何かいいね。


128 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 05:15:40 ]
情景が目に浮かぶようだね。霜ってのがまた良いな。

……ところで、ここ何のスレだっけ?

129 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:23:31 ]
comp.lang.lispに何度か書き込みしてるはずなのに反映されない
なんでだろ

130 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 16:48:38 ]
ネットニュースだから配送の問題とか?



131 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:40:24 ]
quasiquote.org/log2/Scheme/Gauche/Gauche-lazy-ffi
をconfigure make make installしてから

gosh> (use lazy-ffi)
*** ERROR: Compile Error: failed to link "lazy-ffi" dynamically: /usr/lib/gauche/site/0.8.12/i486-pc-linux-gnu/lazy-ffi.so: undefined symbol: strlcpy
"(stdin)":2:(use lazy-ffi)

Stack Trace:
_______________________________________
gosh>


何が問題なのでしょうか

132 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 13:44:27 ]
だからここはサポート掲示板じゃねえっつーの
またどうせバージョン違うんだろ

133 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 14:06:25 ]
>>131
glibcにOpenBSD由来のstrlcpy(3)はありません。
www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/
から持ってきてリンクしてください。
デストリによってはパッケージで提供されているかも知れませんが。


134 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 14:12:09 ]
やっぱlinuxってきもいなー

135 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 04:35:42 ]
gimp2.6.3(ほぼR5RS互換) のscript-fu で

(let ((foo 2)
(bar 3))
(display foo)
(display bar))
->23#t

これと同じ事がしたくて(返り値は無視して)
下のように書きましたが変数ではなく
文字列として扱われてしまいます。

(let ((foo 2)
(bar 3))
(mapcar (lambda (arg)
(display arg)) '(foo bar)))
->foobar(#t #t)

上に書いたlispと同じ動作にするにはどう書けば良いでしょうか?

136 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 06:59:00 ]
>>135
「'」(クォート)をつかわず、 (list foo bar) としたら良いのでは。
あるいは `(,foo ,bar) (先頭はバッククォートね)かな。

137 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 09:54:45 ]
letやmapcarが出てくるのにquoteが判らないとは
えらい偏った学び方したんだな
quoteはLISPの基礎

138 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:39:03 ]
>>137
偏ってない。変数とシンボルを混同するのはLISPの名物。
変数とimmutableな文字列なら、混同することはあまりないのだが。

最近思うんだが、LISPは動的スコープに戻したほうがいいんじゃないか?
変数は常に(eval シンボル)と等価で、関数は常にS式と等価。
静的スコープではこれが成立しない。

139 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:13:37 ]
'(1 2)と(list 1 2)の結果が同じだし、勘違いしちゃうことってあるよね

140 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:24:19 ]

'multiple-value-bindについてるクオートがよくわからない.


(defmacro mvbind (&rest args)
(let ((name 'multiple-value-bind))
`(,name ,@args)))




141 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:07:30 ]
これでうまくいった
(let ((foo 2)
(bar 3))
(mapcar (lambda (arg)
(display (eval arg))) '(foo bar)))

142 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 17:31:30 ]
>>138
かなり偏ってるね
混同するのが名物とか、変な偏見も持ってそうだが
多分>>140-141もお前じゃないか?
きちんとした処理系で基礎から勉強し直した方がいいと思うね


143 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:38:40 ]
>>136
そうだね。前スレ372-390でも話題になってたよね。
(list foo bar)
== (list `,foo `,bar)
== `(,foo ,bar)
quasiquoteの分配則では気をつけないとね。

144 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:43:43 ]
データとコードの違いは最初に叩き込まれると思っていたがそうでもないのか?

145 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 18:48:15 ]
>>139
>結果が同じだし

微妙な違いは理解してるのか?
同じ臭いがするんだよ>>138-141はよ。


146 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:05:17 ]
マクロの勉強でもしてみれ

147 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:11:52 ]
eval使って解決した気になれるとか、初心者の特権だねえ。

148 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:15:57 ]
>>135
それよりmapcarの使い所を間違えてないかね?
処理系変えるとうまく動かないかもよ。
quoteはちゃんと理解した方がいいよ。

>>140
どんだけ頓珍漢なことやってるのかって
最初は気付かないもんだよ。

149 名前:135 mailto:sage [2009/02/03(火) 20:15:17 ]
ありがとうございます。
もう一度 quote の部分を見直しましたが
まだいまいちわかっていないので
もう一度じっくり読んでみます。

>>148
mapcar の使い方を確認しようと
Revised5 Report on the Algorithmic Language Scheme
を見てみたところ mapcar は乗っていなかったので
map を使うことにしました。

150 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:12:28 ]
>>135は展開すると
'(foo bar)
== (list 'foo 'bar)
となる。
これと>>143を比べると違うことは明白。
(list 'foo 'bar)ではlistの要素はシンボルになっている。>>135
(list foo bar)ではlistの要素は変数になっている。>>136,>>143



151 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:34:33 ]
初心者ならそこまで気を回さなくてもいいかもしれないけど
(equal? '(foo bar) (list 'foo 'bar)) => #t
だけど
(eq? '(foo bar) (list 'foo 'bar)) => #f ; ほとんどの場合
quoteはquoteでlistとは別物(返り値も含めて、書き換え可能かどうか等も)
返ってくる値がequalなだけ

152 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:03:12 ]
それからR5RSのmapは返り値の順序は規定されているけど
評価順序は未規定
だから
(map display '(A B C)) => '(#<undef> #<undef #<undef>)
標準出力にはABC、ACB、BAC、BCA、CAB、CBAのいずれか
評価順序をリストの順通りにしたいのならfor-eachを使う
(for-each display '(A B C)) => #<undef>
標準出力には必ずABC
評価順序と戻り値のデータ構造内の順序の区別は
HaskelのIOモナドにもつながる
(たぶん)
R5RSでは関数の引数の評価順さえ未規定

153 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:52:11 ]
>>152
>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定

うわ…これ今ごろ知ったよ、ありがとう。つかこの仕様で誰が得するんだろ。
慌てて調べたけど、Gauche は独自仕様で常にリスト内の順番どおり、なのね。
ちょっと安心。

154 名前:デフォルトの名無しさん [2009/02/04(水) 00:06:16 ]
並列処理が楽になるとは聞いたな。

155 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 12:25:14 ]
少しActorも意識してるんだろうね。
各要素に並行にfがメッセージパッシングされて。

>>138
funarg問題の時代までタイムスリップかよ。



156 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 13:04:44 ]
funarg問題の例: compose
(lambda (f g) '(lambda (x) (f (g x))))

こうすればいいんじゃないの?
(lambda (f g) `(lambda (x) (,f (,g x))))

157 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:50:12 ]
quoteが嫌いな人はクロージャやsyntax-rulesを使う
quoteが大嫌いな人はPythonやRubyを使う
そんな気がする

158 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:05:31 ]
quasi-quoteの便利さは異常。
そんな嫌いになるなんて、これが本当のくぉーつ嫌いってやつか・・・

159 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:51:16 ]
昔のマクロにはバッククォートなんてなかったよな
ひたすらlistでS式をこさえてたっけw

160 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:32:58 ]
どんだけ昔の人だよ



161 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:40:10 ]
Lisp-85とかって言っても分からんだろうなw

162 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:53:31 ]
そんな最近かよ
とっくにバッククオートあるよw

163 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 04:06:48 ]
Lisp-85ってS-OSというZ-80のOS上で動く奴なんだが
fexpr形式やmacro形式はあってもバッククォートは無かったぞ

164 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 08:52:25 ]
Alan Bawden, "Quasiquotation in Lisp"によれば、

 現在とは少し記号法が違うが、1972年のConniverが現代的な
 quasi-quoteの起源。

 少なくとも1977年ごろのLisp machineには、現在使われているのと
 ほぼ同じquasi-quoteがあった。

ということらしい。

D. V. McDermott and G. J. Sussman, "The Conniver reference manual," 1972
ftp://publications.ai.mit.edu/ai-publications/0-499/AIM-259a.ps

Alan Bawden, "Quasiquotation in Lisp," 1999
citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.5.2566



165 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 10:11:52 ]
'の逆はevalだと思ってた

166 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 10:29:33 ]
>>163
Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし

167 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 10:39:22 ]
全然問題ない。

168 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 10:57:09 ]
あっそ
ならLisp-85作った人が入れ忘れたんだね

169 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 11:05:52 ]
quasi-quoteを効率を保ってきちんと実装するのは意外と難しい。
80年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。

170 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 11:51:35 ]
Gauche WiLiLiのあんまり目立たないとこに自分の作ったパッケージ書き足す方法はないものだろうか



171 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:28:07 ]
>>156
その関数の引数f,gにシンボルxを引数として渡すと死ねる。


172 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 18:05:14 ]
やっぱり gensym が必要なんだね。

173 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 18:47:23 ]
関数名じゃなく、関数「値」を式に埋め込めばいい。
gosh> (define x (list + 1 2))
x
gosh> (define y (list '+ 1 2))
y
gosh> (define + -)
+
gosh> (+ 1 2)
-1
gosh> (eval x (current-module))
3
gosh> (eval y (current-module))
-1

174 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 20:23:37 ]
再帰関数だったら?

175 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:49:55 ]
そこまで行くとR5RSでも解決できてるかどうか怪しい
R6RSは再定義禁止だっけ

176 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:59:07 ]
R5RSの件は
(define f (letrec ((f ...)) f))
と書けば安全かも

177 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:10:38 ]
仕様に自由があるから面白い。

178 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:01:07 ]
>>173
で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?

179 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 17:53:52 ]
>>178
SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね

180 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 18:39:03 ]
俺はOnLispをお勧めする。



181 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 19:54:30 ]
ふつうにあのお魚の本でよくないか?

182 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 20:48:41 ]
処理系のソースで十分

183 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 21:37:03 ]
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/
ほれ

184 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:02:05 ]
うわーっ!びっくりした
と避ける

185 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 08:31:34 ]
>>169
ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは

`(foo ,bar)

とはかけなくて、

(` (foo (, bar)))

と書いていたような。

186 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:41:36 ]
関係ないけどチャイティンのLispでは'はシンボルで
(QUOTE X) == (' X)
って書いてたな

187 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 14:53:09 ]
(define (% num1 num2) (remainder num1 num2))
としてるんですが、関数に別名与えるもっと良い方法はありますか?

188 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:21:52 ]
引数の数が一致しているのなら
(define % remainder)

189 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:06:46 ]
それでいいんですね。
気づきませんでした。

ありがとうございます。

190 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 19:07:14 ]
指定のクロージャが束縛されているシンボルを探す方法ってありますか?



191 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:08:34 ]
処理系によってはあるかもしれないけどRnRSにはないんじゃないかなぁ。
CLにはあるかもしれませんけどSchemerだから知らないです。
シンボルのリストを引数に与えるのであれば
グローバル束縛されているクロージャをevalで取り出してeq?して調べられるけど
グローバル変数のリストはどうやって得ればいいかわかりません。
それにローカル束縛も含めるとなると不可能じゃないでしょうか。

192 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 20:28:40 ]
CL なら do-symbols で探せるんじゃないかと。

193 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 22:01:31 ]
Haskellとlispの得意不得意ってどんなところなのでしょうか?

194 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 22:44:15 ]
別に無いよ?

195 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 22:53:19 ]
>>193
特にないんじゃないの?
文字列を扱うとめちゃくちゃメモリ食うってのがHaskellの弱点かもしれんけど
今時のマシンだったら何の問題も無いし。



196 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 22:56:48 ]
Haskellとlispを戦わせたくてしょうがないらしい

197 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:04:03 ]
ムシキングか何かでやってください

198 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:39:04 ]
[Lisp] 攻撃:85 素早さ:94 防御:96 命中:68 運:32 HP:154
[Haskell] 攻撃:68 素早さ:55 防御:65 命中:52 運:31 HP:233

Lisp vs Haskell 戦闘開始!!
[Lisp]の攻撃 HIT [Haskell]は91のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は11のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は109のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は0のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は76のダメージを受けた。
[Lisp]が[Haskell]を倒しました(ラウンド数:3)。
魔法のMD5 - MD5バトル www.newspace21.com/mix/btl.php

199 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:41:50 ]
いちいち貼らなくていいよ

200 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:49:28 ]
>>193
Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?



201 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:02:40 ]
外に出なくても済む方がいいです

202 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 07:17:52 ]
λ

203 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 08:13:10 ]
maximaの中に面白いのみっけた

(defun for-eval-then-quote (var)
`(list 'quote ,var))

(setq x 1)
(for-eval-then-quote x)
-> '1


204 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 12:37:31 ]
>>203
えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)

205 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:23:49 ]
>>204
間違えました
(eval (for-eval-then-quote x))
->'1

206 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 01:08:08 ]
loopマクロ勉強したのにiterateの方が使われてたり
言語の発展はゆるやかだ
とか言ってたのどこのどいつだ

207 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 01:52:43 ]
>>206
それ言語じゃなくてライブラリの発展だと思うんだが……。

208 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 02:14:28 ]
>>206
これ読め。
pc11.2ch.net/test/read.cgi/tech/1203096230/251

209 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 12:06:52 ]
[clojure] 攻撃:28 素早さ:67 防御:78 命中:87 運:55 HP:202
[Qi II] 攻撃:51 素早さ:21 防御:48 命中:69 運:23 HP:189

clojure vs Qi II 戦闘開始!!
[clojure]の攻撃 HIT [Qi II]は1のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は16のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は10のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は38のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は25のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は57のダメージを受けた。
[clojure]が[Qi II]を倒しました(ラウンド数:6)。
魔法のMD5 - MD5バトル www.newspace21.com/mix/btl.php

210 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 13:48:31 ]
kill



211 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 15:30:33 ]
連邦のモビルスーツは化け物か!?

212 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 05:14:36 ]
array->list 変換関数がみつからない
自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))

213 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 23:55:21 ]
>>自分で書くものなの?
R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?

214 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:02:23 ]
#2A(..)ってのはCommon Lispの二次元配列かな。
ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。

215 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 03:21:33 ]
lispに興味があるんですが、
いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー

216 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 05:29:30 ]
オンラインで読める無料の
・独習Scheme三週間 ttp://www.sampou.org/scheme/t-y-scheme/
・入門Scheme ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html

書籍じゃないけど
・もうひとつのScheme ttp://www.shido.info/lisp/idx_scm.html
あたりを読んでから買えばいいんじゃないでしょうか。

217 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 05:46:35 ]
>>215
SICP読んでみて、自分に合いそうなら買うのがいいとおも。
mitpress.mit.edu/sicp/

218 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 10:05:25 ]
SICP日本語版はちょっと高い

219 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 10:48:56 ]
なんでいきなりSICPなんじゃーー

220 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 11:11:47 ]
「良い本だ」ってよくScheme関連のWEBに載ってるから。



221 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 11:20:35 ]
良い本には違いないけど、
SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。

222 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 12:06:25 ]
maximaが使いたいだけだったので
on lispはじっくり読んだが
SICPは問題もやらずに流し読み

223 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:13:48 ]
SICP は Scheme の本というわけではない。
Scheme を使って解説してる本。

224 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:19:01 ]
>>223
え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。

序盤の関数 f(x) の話とか、大学の数学が懐かしいです。

225 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:22:09 ]
SICPにアルゴリズムの話が出てないわけではないが、
SICPをやってもアルゴリズムを勉強したとは言えない。


226 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:22:39 ]
>>223
何を解説してるの? w

227 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:28:22 ]
>>226

っ人生

228 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:36:31 ]
>>226
本のタイトル

229 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:44:04 ]
>>226
降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識

230 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:35:07 ]
SICP読んだら魔法使いになれますか?



231 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:26:27 ]
>>230
なれません。

232 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:45:20 ]
>>230
なれます。
就活に有利です。

233 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 11:01:41 ]
>>230
さあ、30歳になるまで貞操を守る作業に戻るんだ

234 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 14:39:58 ]
30歳を越えてるのですがSICPは読めますか?

235 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 14:51:53 ]
読めなかったら困ると思いますよ

236 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 15:01:35 ]
60歳とかでも読めるらしいですよ
読めなかったら数学勉強してから再挑戦しましょう

237 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:19:40 ]
30歳過ぎてもSICP読むと童貞になりますか?

238 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:34:56 ]
俺はSICPを読んで、背が10cm伸びたよ

239 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:49:08 ]
SICP読んで宝くじ当たったよ。


240 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:50:51 ]
もしかして訳者の和田さんってスーフリの和田さん?



241 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:52:39 ]
プログラマ50人に1人ぐらいはSICP読んでるよね。

242 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 19:54:25 ]
>>250
和田って俺のことだけど。

243 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 20:28:13 ]
SICP未読で許されるのは小学生までだよね!

244 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:31:02 ]
ちょっと待ってくれ。「人生に必要な知恵はぜんぶ幼稚園の砂場で学んだ」とあるように、幼稚園のうちに読んでおくべきものではないだろうか?

245 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:34:17 ]
なんてこったい/(^o^)\

246 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:52:02 ]
人生に必要な知恵はぜんぶサンドボックで学んだ。


247 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:55:25 ]
俺、人生に必要な知恵はぜんぶ死後の世界で学ぶんだ…

248 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:02:42 ]
次はアメンボに生まれてきたりして

249 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:07:08 ]
おれも人生に必要なことは幼稚園で一通り学んだ覚えがあるな

250 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:14:11 ]
>>249
ってことは、幼稚園で、チュー済ませたタイプか。



251 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:45:23 ]
登り棒オナニーなら幼稚園の時に覚えました

252 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:48:59 ]
SICP以外誇れるものはないのか

253 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:54:55 ]
essential of なんたらとかreasoned schemerとかもいいかも

254 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:00:19 ]
時代は宝石の名前の言語じゃね?

255 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:05:57 ]
党員の友人とMercuryを学んでいます。

256 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:13:10 ]
Perlのことですね、わかります

257 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:27:06 ]
あのバージョン6がすべった言語のことか

258 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:28:03 ]
>>255
それは金属であって宝石ではない(゚д゚)!

259 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:28:14 ]
真珠の綴りはPerlじゃないぞ・・・

260 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 01:32:50 ]
まぁなんにせよ変な宗教言語は使いたくないわなw



261 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 05:43:57 ]
()とか幼稚園じゃ習わなかった

262 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 09:40:03 ]
幼稚園の時、世の中はすべてnilだと習った。

263 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 09:44:22 ]
うちの幼稚園ではnil派と()派が闘争を繰り返していた。

264 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 10:01:49 ]
little schemerって幼稚園児でも理解できるように書かれたんだっけ

265 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:41:33 ]
誰が象のラムダ君役をするかで喧嘩になってみっちゃんが泣いた。

266 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:43:25 ]
ここは幼稚園で人生のすべてが再帰的だと悟ったみなさんが集まるスレですかね。

267 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:45:16 ]
継続渡しスタイルで幼稚園ドロップアウトした。

268 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:36:37 ]
ところで、
チョコはいくつもらえましたか

269 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:38:38 ]
カーチャンから一個、姉さんから一個

270 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:44:26 ]
(´;ω;`)



271 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:46:02 ]
ええい、FOR文でもらえた奴はいないのか!

272 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:50:04 ]
「末尾再帰!」と叫んで保母さんのスカートをめくったのはいい思い出

273 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 13:14:52 ]
Next Boston Lisp Meeting: Monday February 23th 2009 at 1800 at MIT 34-401B
fare.livejournal.com/139926.html

vyzo will talk about gerbil, a little language for distributedprogramming
using PLT-Scheme. Gerbil is a macro language that provides facilities
for actor-based distributed programs and transparent network simulation.

これおもしろそうね。



274 名前:デフォルトの名無しさん [2009/02/14(土) 18:38:38 ]
Seasoned Schemer ってどうですか?

275 名前:デフォルトの名無しさん [2009/02/14(土) 18:39:22 ]
Let Over the Lambda ってどうですか?

276 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 22:52:52 ]
海は死にますか?

277 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 23:11:19 ]
nilもそうですか?

278 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 23:18:17 ]
水曜どうですか?

279 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 00:06:17 ]
明日来てくれるかな?

280 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 00:43:26 ]
このスレのネタの応酬はハイレベル過ぎて



281 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 00:50:07 ]
終いますか〜?

282 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 00:58:25 ]
括弧の山を愛する連中の嗜好が平凡なわけがなかった・・・・

283 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:02:23 ]
別に愛してるわけじゃないけど、無いと不安になるというか不安定に感じる。

284 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:44:31 ]
十分平凡でないです!

285 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 17:10:57 ]
アイちゃんも冗談を言うようになったか。

286 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 20:27:36 ]
>>274
何が?
俺は好きだよ?

287 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:07:40 ]
hogehoge

288 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:40:17 ]
(hage? >287)

289 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:54:06 ]
一連の1行の糞レスをあぼーんするプログラムを作れ

290 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 23:59:14 ]
(waha >>288)



291 名前:あぼ〜ん mailto:あぼ〜ん [2009/02/16(月) 00:38:22 ]
あぼ〜ん

292 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 02:11:17 ]
>>289
navi2chちょっといじればいいだけ

293 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:08:12 ]
iPhone/iPod touch用のLisp/Schemeを発見。次スレのテンプレに入れて。

www.turbozen.com/sourceCode/TinyLisp/
programming.nu/

294 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 04:15:12 ]
こういうlist が返ってくるときに
((1 2 3) (1 2 3) (1 2 3))

こういう処理にするにはどうすればできますか?
(map + '(1 2 3) '(1 2 3) '(1 2 3))

295 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 04:25:47 ]
(apply map (cons + list))

296 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 04:36:47 ]
>>295
ありがとうございます!

297 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 10:24:17 ]
>>293
wikiのテンプレに書き加えておいて。

298 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:27:38 ]
(setq list1 '((message "X") (message "Y")))
があったとして、list1 の各要素を順番に実行していく方法を教えてください。


299 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:38:32 ]
(eval (cons 'progn list1))
こういう話?
それともこんなのをお望み?
(mapcar #'(lambda (x) (apply (car x) (cdr x))) list1)

300 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:44:13 ]
(mapcar #'eval '((message "X") (message "Y")))
とかでもいいのか。



301 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:01:05 ]
仮定が分からないな。
messageというのが関数なのか?
(setf *func-hash* (make-hash-table))
(setf (gethash 'message *func-hash*) #'(lambda (x) (princ x)))
(setf list1 '((message "x") (message "y")))
(mapc #'(lambda(x)(funcall (gethash (car x) *func-hash*) (cadr x))) list1)
=> 以下が結果 maximaとかはこの手のことをやってるね。
xy
("x" "y")

302 名前:298 mailto:sage [2009/02/20(金) 03:13:07 ]
>>299
>(eval (cons 'progn list1))

すごいです。これでできました。
ありがとうございました。

303 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 05:52:44 ]
Scheme

(let ((list1 '((display "X") (display "Y"))))
 (map eval list1))
⇒XY(#<void> #<void>)

304 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:33:52 ]
(cons 1 '(2 3))
-> (1 2 3)

となりますが

(cons '(1 2) 3)
-> ((1 2) . 3)

になりますよね

今は (append '(1 2) '(3)) と書いてますが
(cons 1 '(2 3)) に比べて冗長だと感じます
もっと良い書き方はありますか?

305 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:51:17 ]
書き方というか、片方向リストの仕様だから

306 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 03:11:26 ]
(define (wahacons a b) (append a (list b)))
(wahacons '(1 2) 3)

307 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 05:12:06 ]
>>305
仕様ですか…。
>>306
関数を書いてしまえば良かったんですね
ありがとうございます

308 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 06:25:59 ]
>>307
quasiquoteは?

> (define x '(1 2))
x
> `(,x 3)
((1 2) 3)

309 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 06:28:27 ]
肝心な部分コピペし忘れとかどうなのよ、俺……orz

> `(,@x 3)
(1 2 3)

310 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 23:02:45 ]
Luaスレがschemeネタで盛り上がってるw



311 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 00:35:49 ]
ちょっと見てくルア

312 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 01:21:09 ]
見てきたけど、あんまり面白い流れでも無かった。
速いなら実装を参考にしよう、とか建設的な意見が出る訳でもなく、
単にSchemeイラネ、だし。

313 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 04:20:15 ]
括弧うぜえとか。

314 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 09:18:44 ]
Schemeは作るの簡単とか。

315 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 09:36:45 ]
>>312
Luaってのはどういう言語かもよく知らないんだが、
処理系は結構よくできているみたいで遅くはないよ。
shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&box=1

316 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:35:16 ]
ypsilon軍団とgauche軍団どっちが多い?

317 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:36:35 ]
[gauche] 攻撃:52 素早さ:32 防御:27 命中:74 運:17 HP:258
[Ypsilon] 攻撃:88 素早さ:69 防御:92 命中:95 運:96 HP:144

gauche vs Ypsilon 戦闘開始!!
[Ypsilon]の攻撃 HIT [gauche]は154のダメージを受けた。
[gauche]の攻撃 HIT [Ypsilon]は1のダメージを受けた。
[Ypsilon]の攻撃 HIT [gauche]は173のダメージを受けた。
[Ypsilon]が[gauche]を倒しました(ラウンド数:2)。
魔法のMD5 - MD5バトル www.newspace21.com/mix/btl.php




318 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:38:19 ]
何という二番煎じ、お前は車輪の再発明でもしてろ

319 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 20:43:41 ]
車輪の再発明はハッカーの大好物

320 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 21:09:19 ]
>>315
遅くないのは知ってるけど、向こうの話題の発端がそういう話だった。

俺の場合、VCSのmonotoneで組み込まれてて知ったんだけど、
かなり評価高い言語だよね。Adobeとかも採用してるとか。



321 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 21:14:55 ]
Lispが早いとか

322 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:30:29 ]
CLでもSchemeでもいいので話題のHSPみたいに簡単にゲーム作れるソフトはありますか?

323 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:38:44 ]
>>322
CL/scheme はしらんが、どこぞのメーカは
ゲーム開発ベッドで専用 Lisp 使ってなかったっけ?


324 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:56:50 ]
>>322
LispやSchemeをゲーム制作に生かしている企業とかはあるみたいだけど、
誰でも分かり易いライブラリだの、特化した処理系だのはないんじゃない?
一応、SDLとかOpenGLとか使ってゲーム作るのは、大抵の処理系で出来ると思うけど。

というか、HSPが話題っていつの話だ。

325 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 23:41:31 ]
>>323
これね。
en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp

326 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 02:25:21 ]
LuaとかSquirrelは遅かったらC++に書き直せばいいだけだからな

327 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 02:48:48 ]
Lisp/Schemeも同じことができると思うんだが……。

328 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 03:01:43 ]
書き直す際に
実装が多いのが弱点ではないかと。


329 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 03:04:34 ]
Squirrelは書き直すのが楽そうだ

330 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 06:21:26 ]
StalinならCより速くなることもあるんじゃなかったっけ?




331 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:01:55 ]
Stalinって実際どんな感じ?

332 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:49:25 ]
StalinってCを出力するんでしょ?
Cより速くなる事は無いと思うけど…
Cで「人間が」書くより速くなる事ならあるかもしれないけど

333 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 10:13:08 ]
stalin ... それは、かつてソ連で大量虐殺をおこなった恐怖の支配者。。。
だから
非人間的な行動(コード)だろ?人間が書くCのコードより速いってことじゃ?

334 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 12:45:31 ]
Stalinは、人間がかくCコードよりかなり早い場合も多い。
ただし、継続が使えないとか制限が多いし、コンパイル時間がめっちゃかかる。

>>332
> Cより速くなる事は無いと思うけど…
> Cで「人間が」書くより速くなる事ならあるかもしれないけど
こんなこというやつ初めて見た。

335 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:00:30 ]
そうか?理論値と実情を別に語るのは良くあると思うが。

336 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 14:49:32 ]
だって、人間が書いたものではないCを含めて 「C言語より速い」
を語るなら、それって実質的にCコンパイラの最適化の差に帰着するじゃん。

コンパイラによってはCから (ほぼ)最小のアセンブリを生成できることだってできるし、
そうすると何をもって「Cのソース」とするのかって話になって、
「Cのソースを吐くんだからCより速いはずがない」 っていう議論は空虚じゃない?

まぁ言い出しておいてアレだけどスレチだな。すまん

337 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 15:49:25 ]
Stalinの話は定期的にでてくるけど、流れとしては・・・

「同じ問題を解くのに俺様の書いたCよりXXにあるStalinのコードの方が速かった!」
「でも俺様のCのコードがヘボいことはありえない!そんなことは考えられない!」<- これが間違い
「Stalinはどんな魔法を使ってるんだ!スゲーよStalin!」

一部で盛り上がるけどスルーする人も多い。
同じ速度を出すのにStalinを使った方が簡潔に短時間で書けるというのはあると思う。
だからあれほどコンパイル時間がかかってもユーザーは気にしないんじゃないかな。



338 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 17:31:09 ]
まぁStalinはある種の一発モノだからな。
研究とか勉強の材料としてはすごいけど、プロダクションでは使えないから
盛り上がるのは一部にとどまる。

俺は盛り上がった派だけどw
最適化の解説の論文は勉強になった

339 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:26:10 ]
schemeのマクロを使って 
見た目から括弧を無くしていくことって出来ますか? 
例えば括弧のない1 + 2を3と評価するとか 
for リスト do 処理 done 
みたいな構文がmapの意味で動くようにしてみたい 


340 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:34:29 ]
>>339
まえにどっかでみたことがある。srfiなんとか だったと思う。



341 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 01:17:57 ]
SRFI 49のI-expressionsは、インデントで構文木を表す表記法であって、
マクロは関係なかった気がするんだけど、違ったっけ?

342 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 06:02:54 ]
SRFI 49: Indentation-sensitive syntax
srfi.schemers.org/srfi-49/srfi-49.html

最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
lispuser.net/memo/lisp/2006-03-30-23-58.html

343 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:45:19 ]
つ Standard Lispの記号モード

344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 15:44:53 ]
>>339
「schemeのマクロを使って」も
マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
ただしこの3つをなくするのはRnRSではできない。
処理系によってはリーダマクロをサポートしているのでそれを使うと可。

345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:11:25 ]
なるほど、やはり出来ないのかー
リーダーマクロ、存在だけは知ってましたが
コンパクトでかっこいいSchemeで出来たらなぁって思いまして

昨日考えてたんですが、
Schemeには演算子の優先順位がないのが原因でしょうね
もし優先順位がつけば、括弧省略出来る
それはそれで、F#やらHaskellやらでみかける
パイプライン演算子みたいなのが定義出来たり、と夢が膨らむが
言葉に表せない大切な物が犠牲になってしまう気がします

>マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
これ非常に興味あるんですが、どういうことでしょうか?

適当に試してはみたんですが、わかりません
(define-syntax plus
(syntax-rules ()
; ((x _ y) (+ x y))))
; ((x (_) y) (+ x y))))
; (((x _ y))(+ x y))))

Gaucheの拡張で優先順位を計算して括弧を省略ってページなら見つけましたが
そういった話でしょうか?


346 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:42:16 ]
こういうことじゃないの
(define-syntax calc
(syntax-rules (+ -)
((_ a + . rest) (+ a (calc . rest)))
((_ a - . rest) (- a (calc . rest)))
((_ a) a)
)
)
> (calc 1 + 10 - 5)
5

347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:44:04 ]
5かよ

348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:44:55 ]
> Schemeには演算子の優先順位がないのが原因でしょうね
> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
> これ非常に興味あるんですが、どういうことでしょうか?
そうゆう reader を作ればいいじゃね?
作るだけだったら誰でも作れると思うし…


349 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:45:29 ]
>>345
俺は344じゃないけど、344の言ってることは違う。

344が言ってるのは、「一番その側のカッコがあれば」 ということ。
いちばん外側のカッコは、どう頑張ってもRnRSでは省略不可能。
しかし、一番外側のカッコとマクロ名を許容すれば、
そのマクロの引数を全部自力で解釈すれば、そういうことは可能ということ。

文字通り、言語をもう1つ作るようなもんだけど。



350 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:46:54 ]
× 一番その側
○ 一番外側



351 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:16:51 ]
>>344
これ面白いなぁ。
引き算は
(calc 1 - 2 - 3)
こう展開されてしまうから
(- 1 (- 2 3))
正しい値にならないね
けど、面白いからちょっと考えてみます

>>349
なるほど、勉強になります。
「マクロ使用を囲う括弧と、マクロ名さえあれば」
というのは、344氏の例でいけば、
一番外側の()とマクロ名であるcalcっていう意味なわけですね
そして、それより内側であれば、がんばり次第で自由自在だ、と。

352 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 21:51:26 ]
('A`)y-~

353 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 02:20:27 ]
そもそも、何で括弧なくしたいんだ?
知的好奇心満たしたいだけなら何も言わんが。

354 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 07:19:11 ]
Lisp Scheme初心者です。マグロウヒルの「プログラムの構造と実行」をテキストに
Schemeを勉強しようと思っています。
そこで皆様のアドバイスをお願いしたいのですが、どのScheme処理系がお勧めでしょうか?
あまりにもたくさんありすぎて判断できません。
OSはWindows XPです。よろしくお願いします。

355 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:44:21 ]
>>354
windows上で勉強目的なら統合環境のほうが楽だろうしPLT schemeで良いんじゃないかな。
さもないなら、linux上でemacs+gauche(日本語の本があるから)とかでも良いように思うん
だけどね。

356 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:03:43 ]
>>338
stalinがダメなら
記述力と速度を同時に達成できるのって
ocamleぐらい?

357 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:11:06 ]
GCの停止時間がなくて
記述力も同時に達成できるのはC++しかないんだぜ

358 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:19:51 ]
確か2月前半ぐらいに
comp.lang.lisp
でreadable なlisp -> C 変換の話がでてたはずなのに見つからない


359 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 16:55:36 ]
C++はOOPの振りをした関数型言語だからな

360 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:34:58 ]
>>359
テンプレートで遊ぶ分にはそうだけどな



361 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:16:37 ]
OOPは言語関係ねーす

362 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:20:23 ]
c++でoneceonlyマクロって書けるんだろうか
前にoneconleyできない関係で何度も代入評価されてる
「そんなエラー絶対みつかんないだろう」ってエラーがboost関係で報告されてた

363 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:39:11 ]
>>353
どっちかっていうと実用的な理由
 ・タイプ量を減らしたい
 ・括弧がネストすると、対応が激しくおいづらい

364 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:48:59 ]
emacsを使えばそんなこと屁でもないな
むしろ()がある方がタイプ量が減るし、移動が楽ってぐらいになる
逆にエディタの支援が無いとなるとなるほどそれは確かに致命的だ

365 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:09:55 ]
エディタの機能でどうのこうのっていうのは
言語の話とは別のような・・
俺もemacsは使ってるが

>()があるほうがタイプ量が減る
それはない
letよりlet1のほうが読みやすいし打ちやすい

366 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:26:16 ]
>>363
実用的な理由で括弧を消すのはないだろー。
前者の理由なら、そのために高階関数やマクロがある。
後者の理由なら、そのためにエディタの支援機能がある。
というか、インデントで対応を追うのが普通。

まあ、実際にやってみて、構文を増やす度に複雑化する、
仕様やリーダーマクロのメンテにうんざりしてみれば、
その辺良く分かるとは思うけど。

367 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:34:54 ]
実用ってことはコードを編集することを含むだろう?
ならエディタは関係あるじゃないか

368 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:52:06 ]
emacsの括弧うんぬんはいじる方の腕しだいで楽になる。

369 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:56:54 ]
emacs はこのへんを組み込んでるかどうかでも全然ちがうよ。
1. insert-parentheses を使ってるかどうか
2. show-paren-mode を使ってるかどうか
3. transient-mark-mode を使ってるかどうか

370 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:57:00 ]
>>365
プログラムのコードのタイプ量は減るだろうけど、
編集作業全体のタイプ量は驚きの増加量、って感じになる気がするよ。
S式単位での編集を使わないと、移動に掛かる手間が段違い。



371 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:03:44 ]
emacs userは1匹見ると10匹いると思え

372 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:06:15 ]
>>371
ごきぶりみたいにいうな にがわらひ
370みたいなべてらんもいるけど、C-F C-B C-N C-Pもままならずマウスな初心者も
いるから。
viでもlispモードは普通にあるよ。

373 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:36:25 ]
>>371
むしろ1匹しかいない絶滅危惧種扱いの所が多いよ。

374 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:18:10 ]
google trendsをみても検索数の指数は減ってるけど、多い地域はアカデミックなところが
多いね。日本も亜米利加もね。

375 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:15:14 ]
俺ベテランじゃなくて異端。
viper-modeで、viとEmacs両方のキーバインドを同程度に使う変態。

376 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:19:42 ]
vipperかお?

377 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:22:13 ]
お じゃない。

378 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:27:08 ]
>>375
viper-modeかぁ。15年以上起動したことがない。笑い

379 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:31:02 ]
>>375
   ___l___   /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
   ノ l Jヽ   レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
    ノヌ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    / ヽ、_      /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
   ム ヒ       /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
   月 ヒ      /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
   ノ l ヽヽノ    /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
      ̄ ̄    /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |

380 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:56:13 ]
>>375
viperモードたまに使うけど、完全に終了させる方法教えて下さい。
viper-go-away しても別のファイル開いたらまたviperになってて、
仕方ないからemacs毎再起動してる。



381 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:13:24 ]
>>380
せっかくなので、ソースコードを読んで原因を探ってきました。

viper-go-awayを呼ぶと、viper.elのviper-remove-hooksで、
仕掛けていた各メジャーモードのフックを解除していくのですが、
コードを見ればお分かりの通り、とても素敵なバグがありまして、
find-file-hooksとかは完全スルーです。

なので、自分でコードを修正するか、本家にフィードバックするか、
俺のようにVIPER常駐野郎になるか選んでください。

382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 04:40:02 ]
と思ったんだけど、追加で調べていったら、
デフォルトのメジャーモードを元に戻さないってバグもあって、
これが本筋っぽい。CVS最新版では修正されてる。
↓を.emacsに追加でひとつ。

(defadvice viper-go-away (after revert-default-major-mode activate)
(setq default-major-mode 'fundamental-mode))

383 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 08:37:29 ]
maximaの細かいbugが未だに放置なのは
common lispの問題なんだろうか
schemeで書かれてるならbugは少なくなるんだろうか

384 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:34:14 ]
妄想はそのくらいに

385 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 19:45:52 ]
もともと"Common Lisp"じゃないものをGCLに、そして"Common Lisp"に書き直したからじゃない?
最初から"Common Lisp"で書かれていたら違っていたかも
Maxima使ってないからよくわからないけど

386 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:21:25 ]
質問。この2つに違いってありますか?

(define (f x)
(define g 10)
(+ x g))

(define (g x)
(let ((h 10))
(+ x h)))

387 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:29:49 ]
5.2.2 internal definitionsに変らないと書いてある。

> A <body> containing internal definitions can always be converted
> into acompletely equivalent letrec expression.

388 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:45:33 ]
(define (g x)
 (letrec ((h 10))
  (+ x h)))
となら同じ、が正しいのでは?
letとletrecは違う
この例はたまたまコンビネータ式が束縛されているに過ぎない
(正確には式が束縛されているわけではないけど)

389 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:53:51 ]
質問の意図によるだろうけど
最終的な機械語に落とす段階では同じコードになる

390 名前:388 mailto:sage [2009/02/26(木) 23:57:23 ]
とはいったものの、束縛する式が1つならSchemeレベルではletとletrecは等価ですね



391 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:01:31 ]
>>387
ありがとうございます
自分の知らない、
何か違う意味があるんだろうと思って質問したんですが
letrecと同じ意味なんですね

392 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:01:49 ]
おっちょこちょいですね。

393 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:04:11 ]
>>391
>>386の例ではletで問題ない。

394 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:11:24 ]
>>393
了解です。Schemeってシンプルですね。ありがとうございます

395 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 00:20:22 ]
>>387
編集ミスった。
acompletely→a completely

否定のa-に見えてしまう すまん

396 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 10:00:52 ]
さしずめ「うは宇宙のう」

397 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 21:31:01 ]
>>382
遅くなったけどありがとう。これでviperモードと仲良く暮らせそうです。

398 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 08:07:26 ]


399 名前:デフォルトの名無しさん [2009/02/28(土) 09:35:38 ]
399

400 名前:デフォルトの名無しさん [2009/02/28(土) 09:36:03 ]
400



401 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:05:35 ]
shibuya.lisp ストリーミング中!
って今ごろ気付いたorz

402 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:49:13 ]
見逃した……
ニコニコ動画辺りに上げてくれないかあ

403 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:33:59 ]
>>402
マイリスト Shibuya.lispテクニカルトーク#2‐ニコニコ動画(ββ)
www.nicovideo.jp/mylist/11305224


404 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:48:54 ]
>>403と投稿者に感謝を

405 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:57:15 ]
>>403
マジでありがとう!!

406 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:21:33 ]
他の関数型言語でこの手の集まりをみないのは
学会で代用してるからなのだろうか

407 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 01:33:04 ]
>>406
勉強会ならあるけどな。

408 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 05:19:41 ]
>>403
あー、配信のときとは別テイクで音声がずいぶん聞きやすくなってる!
ありがとうございます。

409 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 10:57:50 ]
>>406
HaskellとかOCamlだと人がそんなにまだ多くないし(Lispに比べれば)、
ゲーム作りましたみたいな大きいネタとか、その筋なら誰でも知ってる大先生とか
そういうのないからねぇ。
さがせば>>407が書いてるみたいに勉強会とかあるからメイリングリストとか
入ってみれば? 今時捨てアドのひとつやふたついくらでも作れるし。

410 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:06:35 ]
lispが多いといってもschemerが多いんじゃない?
やはり、川合さんとか、処理系製作者が3人もいるくらいだからね。
common lispは人は少ないよ。Qiやclojure,newLispに至っては壊滅的。

そーいえば、abclがバージョンアップしてたな。



411 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:12:46 ]
ircを覗くと、常駐者が

#lisp 250
#haskell 550
#ocaml 50
#scala 50
#clojure 100
#ruby 250

くらいみたいだね。haskellがなんでこんなに多いんだ?

412 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 18:35:37 ]
has略は中ニ設定豊富だからな

413 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:33:36 ]
pc11.2ch.net/test/read.cgi/tech/1234635513/378

自分はLispが全然書けないけど、どんだけ短くなるのか見てみたいです。
どなたお願いします〜

414 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 00:34:29 ]
>>410
Qiというものを始めて知りましたが、Haskellっぽくて面白そうですね。
ところで皆さんはこういった面白い実装の情報をどこで得てるんでしょうか?
英語のメーリングリストなのかな?とは思ってるんですが・・・

415 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:00:31 ]
>>414
それはねぇ。。。こまめに調べてるだけよ。ふふふ。。。lisperがあつまる日本語のチャット
も情報源だよ。
うんQiはHaskellっぽいね。

416 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:13:41 ]
ttp://www.zazzle.com/lisp+gifts

これがメリケンだ!?

417 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:06:13 ]
>>416
made with secret alien technologyのシャツが無いなんて信じられん

418 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:44:57 ]
schemer多いのはシンプルだからなんだろうか

419 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:50:50 ]
Qi ECLでは駄目なんだ・・・
高速化って書いてるから期待したのに

420 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 04:18:51 ]
>>413
(use srfi-1)
(define request '((hoge . 1) (fuga . 2) (piyo . 3)))
(filter (lambda (x) (member (car x) '(hoge fuga))) request)
とか



421 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:26:08 ]
>>414
Planet LispってRSSあるよ。

422 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 09:50:56 ]
>>421
おおっ、有り難うございます!! さっそくGoogle Readerに追加しました。

423 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:07:00 ]
>>420 3行目 srfi-26使って(gaucheならuse不要)
(map (cut assoc <> request) '(hoge fuga))

424 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:13:58 ]
ハッシュテーブルに代入したら負けですねわかります

425 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 13:20:03 ]
(defvar *request* (make-hash-table))
(mapc #'(lambda (elem)
(setf (gethash (car elem) *request*) (cdr elem)))
'((hoge . 1) (fuga . 2) (piyo . 3) ...))
(let ((res (make-hash-table)))
(mapc #'(lambda(key)(setf (gethash key res)
(gethash key *request*)))
'(hoge fuga piyo))
res)

とくに簡潔ではないな。

426 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:48:35 ]
schemeで論理の勉強しようと思って
(tflist n)で#tと#fの組み合わせを列挙してくれる関数を書こうとしたんだが
意外と難しい
最初mapで#t → (#t #f) (#t #t)という風に書こうとしたが
これだとflattenが居るし、flattenを再帰で呼び出してみたら
全部平らになってしまって(#t #t #t #t #t #f #t #f #t ...)みたくなっちまった
誰かたすけて

動作イメージ
(tflist 1)
 '(#t #f) or '((#t) (#f))
(tflist 2)
 '((#t #f) (#t #t) (#f #f) (#f #t))
(tflist 3)
 '((#t #t #t) (#t #t #f) (#t #f #t) (#t #f #f) (#f #t #t) (#f #t #f) (#f #f #t) (#f #f #f))

427 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:07:54 ]
(define (tflist n)
 (cond
  ((<= n 0) '())
  ((= n 1) '((#t) (#f)))
  (else
   (let ((l (tflist (- n 1))))
    (define (add-t l) (cons #t l))
    (define (add-f l) (cons #f l))
    (append (map add-t l) (map add-f l))))))

428 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:08:27 ]
(define (tflist n)
(if (= n 1)
(list (list #t) (list #f))
(append
(map (lambda (x) (cons #t x)) (tflist (- n 1)))
(map (lambda (x) (cons #f x)) (tflist (- n 1))))))

429 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:19:22 ]
>>427-428
おお、神よ。なるほど、(append (map..)(map..))の形になるのか
もしよろしければもう1個
以下の例で最後の行は動くようになりませうか?
;guile/gaucheでどちらもエラー
(define (mujunritu p) (not (and p (not p))))
(define (haityuritu p) (or p (not p)))
(define (try1 f) (map f '(#t #f)))
(try1 mujunritu)
;これがダメ。try1のfでλx(apply f x)やλx(eval(f x))も試してみたものの
(map try1 '(mujunritu haityuritu))

OCamlでは動作
let mu p = not (p && (not p));;
let hai p = p || (not p);;
let tr f = List.map f [true;false];;
List.map tr [mu;hai];;

430 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:23:52 ]
>>420>>425
サンクス。今の自分じゃ全然理解できないけどorz



431 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:25:52 ]
前きたquote判ってない人かね

432 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:28:26 ]
>>429
`(,mujunritu ,haityuritu)または(list mujunritu haityuritu)
'(mujunritu haityuritu)との違いわかるかな

433 名前:前きたquote判ってない人 mailto:sage [2009/03/03(火) 23:55:18 ]
>>431
別人です。あれからROMしかしてないですよ。

434 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 00:52:37 ]
>>432
Lisp属の初心者には、このあたりは難しすぎます
調べるのは本当に大変でしたが、何とか見つかりました
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html
これのことですよね?
 Common Lispでも、関数引数に関数実体も名前も両方使える。
 (略)
 Schemeでは、関数しか受けとらない

確かに、CLでは両方動作することを確認
(defun muj (x) (not (and x (not x))))
(defun hai (y) (or y (not y)))
(defun tr (f) (mapcar #'(lambda (z) (funcall f z)) (list t nil)))
(mapcar #'tr (quote (hai muj)))
(mapcar #'tr (list 'hai 'muj))

schemeの場合
(list mujunritu haityuritu)だと関数実態が返ってくるが
(quote (mujunritu haityuritu))だと名前が返ってくる
schemeにもCLのsymbol-functionみたいな関数があれば
quoteのほうでも動作すると思い調べてみたものの
該当の関数が全然見つからない\(^o^)/
しかし、関数はおいといて、この考えでたぶん、大丈夫ですよね?

435 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 01:20:53 ]
>>434
つ「eval」

436 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:00:08 ]
quoteとevalは静的スコープな言語にふさわしくないとつくづく思う

437 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:12:51 ]
スコープと評価が?

438 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:50:43 ]
schemeのシンボルは文字列に毛の生えた特殊オブジェクトと思えばよろし。
プログラム内でそのシンボルに何が束縛されているかとは基本的に全く関係ない。

439 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 07:25:51 ]
R5RS の eval だと、その時点の環境での評価ができないから symbol-function の代わりにはできないし。

440 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 12:06:53 ]
あくまでも、定義中の名前はシンボルではなくただの変数の入れ物の
名前として使われる。また、プログラムを実行するには変数の位置を
表現できれば名前のような冗長な情報は必要ない。
よって名前は実行前のある時点でアドレスに変換されていると考えるべき。

evalやCLのsymbol-functionみたいな実行時にシンボルからその位置情報へ
変換する仕組みを作るとなると、処理系のインタプリタやコンパイラ相当を
必要時に起動するのと全く事になり、非常に馬鹿げたコストが掛かる。




441 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 12:13:45 ]
>>436
evalはともかくquoteはこの件と関係ない

442 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 13:16:24 ]
>>440
文章として突っ込みどころ多すぎw

内容的にも、後段のsymbol-functionについては、
特殊オペレータのfunctionと勘違いしているとしか思えない。

(defun foo ()
(print 'foo))
(flet ((foo () (print 'foolet)))
(foo)
(funcall (function foo))
(funcall (symbol-function 'foo))))
FOOLET
FOOLET
FOO


443 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 12:49:38 ]
急に流れが止まったから釣りかと思ったが
やっと>>422の言っていることがわかった
symbol-functionってグローバルな関数定義しか参照しないんだな

444 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 13:48:24 ]
schemeにシンボルが無いってことが少し分かってきた
やっぱ Common Lisp 最強だな!

445 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 14:16:03 ]
>>442
(let ((foo #'(lambda () (print 'fooval))))
(flet ((foo () (print 'foolet)))
(foo)
(funcall foo)
(funcall 'foo)
(funcall (function foo))
(funcall (symbol-function 'foo))))
FOOLET
FOOVAL
FOO
FOOLET
FOO

Common Lispは、symbol-valueとsymbol-functionが
シンボルセル内の別スロット。

funcallは>>440の後段のような処理は、
functionに任せて、関数呼び出しに専念する仕様。
funcallの第一引数は関数か、シンボル。
シンボルの場合symbol-functionの結果を使う。

446 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 16:10:34 ]

何が真実なのかさっぱりわからんのでまとめてみたら
カオスになった。つっこみ希望

・evalは静的スコープにはふさわしくない
 動的スコープなら1つしか環境を考えなくて良いためと想像

・schemeのシンボルは文字列に毛の生えた特殊オブジェクト

・呼び出し
 (hoge)はレキシカルな環境での関数呼び出し(関数セル)
 (funcall hoge)はレキシカルな環境での関数呼び出し(値セル)
 (funcall 'hoge)は↓と同様。symbol-functionを使うため
 (funcall (symbol-function 'hoge))はグローバルに定義されたシンボルの関数呼び出し(関数セル)
 (funcall (function hoge))はレキシカルな環境での関数呼び出し(関数セル)
 レキシカル環境で同名の変数がある場合に
 グローバルなシンボルのsymbol-value(値セル)を参照する方法はなさそう

>>442氏の440へのコメント
 ここのあたりが一番わからない
 symbol-functionは(トップレベル変数が動的スコープのため)
 動的スコープを参照出来る
 →functionのようにレキシカルスコープの変数を考慮しなくてよい
 →symbol-functionに関してはevalもそんなにコストかからんぜ、ってこと?

447 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:43:08 ]
>>446
442,445はCommon Lispのコードっていうのは分かってる?

> ・evalは静的スコープにはふさわしくない

これは俺も何が言いたいのかさっぱりわからんというか、
はっきり言って間違い。反証はScheme。

448 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 19:15:47 ]
> evalは静的スコープにはふさわしくない
はLisp1.5世代の人の意見なのかな。

449 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 20:28:14 ]
現在のevalはLispらしさを演出するためだけの存在だからな

450 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 21:07:27 ]
evalを使うってのは、速度的にも不利になるし、普通にlispでプログラムを組む人は
避けるところだと思うよ。避けないとすれば腕の悪い人という印象しかないな。少な
くとも他の方法を探すだろう。



451 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 10:41:58 ]
大抵マクロでおkだからな

452 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:39:34 ]
Qiは
データ
[]
program
()
のカッコをわけたらlispの意味ないとは思わなかったんだろうか


453 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:21:06 ]
>>451
マクロでできることはevalでもできるみたいな言い方だな
第一印象はそんなものだろうけど
それをいつまでも引きずっていていいのかな?

454 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:40:18 ]
451じゃないけど違うの?

455 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:49:10 ]
Lispのマクロ機能はevalで実装されていると思うのだが・・・

456 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:11:36 ]
codepad.org/kiclBi61

457 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 18:36:31 ]
(display (eval (let1 'y 2 `(+ ,x y))))
これで動くよ
何が言いたいのかわからんが


458 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 19:00:31 ]
言いたいことは
>>443
>symbol-functionってグローバルな関数定義しか参照しないんだな
と同じことがevalにも言えるということ。

evalは外側のローカル変数xの定義を参照できないから
>>457では、事前にxのところを値で置き換えたものをevalに渡している。

459 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 19:58:27 ]
つーかevalは他のローカル変数のことなんか知らんから。
関数の引数として渡されたコンテクストで評価するしかない。
それを知らせる手段として(current-environment)みたいなものが
処理系にあればやりたいことは実現できるんじゃないか。

460 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 20:13:48 ]
Schemeのevalの話?

Common Lispでは、

(defvar x 1)
(print (eval '(+ x x)))
2
(let ((x 10))
(print (eval '(+ x x))))
20

Schemeのevalは渡された環境への変更に制限もあるよね。
;; R5RSとR6RSで少し違う



461 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:10:14 ]
(let ((x 10))
(print (eval '(+ x x))))

*** - EVAL: variable X has no value



462 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:15:34 ]
>>460が一見意図通り動いてるように見えるのは
最初のdefvarでxをスペシャル変数にしてるから。

schemeで同じことをする場合はfluid-letを使う。

(define x 1)
(display (eval '(+ x x)))
2
(fluid-let ((x 10))
(display (eval '(+ x x))))
20
x
1


463 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 08:01:39 ]
mzschemeで、CGIをPOSTメソッドで使いたいのですが(クライアント側)、うまくいきません。

たとえば、
en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces
と同じことをしたいのですが(これはGETメソッド)、

(let* ((url (string->url "en.wikipedia.org/w/api.php"))
(post (string->bytes/utf-8 "action=query&meta=siteinfo&siprop=namespaces"))
(port (post-pure-port url post))
(xml (read-string 1000 port))
)
xml)

でいけると思ったのですが、エラーメッセージが帰ってきます。
どこがまずいのでしょうか?

464 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 08:57:46 ]
コンビネータパーサを作ったから
せっかくなのでR5RSかR6RS準拠のパーサを書いてみようと思ったんだが
全体のBNFのリストってどこかにまとまってる?
仕様書をざっと見した感じでは、
ばらばらにちょっとずつBNFが載っているように感じるんだが
仕様書ってのはこんな感じのもん?

465 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:02:30 ]
Schemeの仕様書はこんな感じのもん。
まぁLispでBNFもくそもないが。

466 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:51:26 ]
Lisp系言語の場合、構文のフォーマルな定義がBNFとはちょっと合わない。書けなくはないけれど。
構文の定義はこんな感じのレイヤになってる。
(1)まずtokenに分解 (R6RSの用語ではlexical syntax)
(2)S式として読み込み (R6RSの用語ではdatum syntax)
(3)S式の中の特定の構造をプログラムの構文として認識 (R6RSの用語ではprogram syntax)
このうち、(2)の出力は既に抽象的な木構造のデータなんで、(3)のレベルの構文定義っていうのは
木構造に対する定義になる。もちろん木構造にマッチする文法を書けばいいんだけど。
プログラムの字面に対するBNFとは違ってくるな。
例えば、"(if x y z)" と"(if . (x . (y . (z))))" は字面では違うけどdatum syntaxとして
読まれた後は全く同じ木構造になる。program syntaxはその木構造だけを見る。



467 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:22:02 ]
コンビネタ・パーザだとレキサも一体で書くスタイルが多い。
>>466で言うと(1)と(2)が一体。
ただ演算子多重定義出来る言語じゃないと、
見た目がシンプルにならない。

468 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:48:06 ]
>>467
それは知ってるんだが、要点はそこじゃなくて(2)と(3)が分離してるってとこ。仕様からして。
>>464 は言語構文のBNF定義がまとまってないってことに違和感を覚えたわけだろ。
(1)-(3)までまとめて書くことはできると思うがきれいになるかな?


469 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:39:11 ]
(3)は、R5RSとR6RSでちょっと違うし、
内部表現的には変える必要ない上に、
read/evalの分離構造ともマッチしているから、
あえて混ぜる必要はないと思う。

>>449
そういえばEuLispにはevalがなかったな。
おもしろい試みだったけどあっさりと廃れたね。
YooTooはまだ更新されているみたいだけど。
R6RSのmoduleも一部影響受けてるね。

470 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 06:01:07 ]
>>463ですが、自己解決しました。
このコードで動きます。


(let* ((url (string->url "en.wikipedia.org/w/api.php"))
(post (string->bytes/utf-8 "action=query&meta=siteinfo&siprop=namespaces&format=xml"))
(header
'("User-Agent: MzScheme"
"Accept: application/xml"
"Accept-Encoding: deflate"
"Accept-Charset: utf-8"
"Content-Type: application/x-www-form-urlencoded"))
(port (post-pure-port url post header))
(xml (read-string 1000 port)))
xml)

すくなくともen.wikipedia.orgのサーバーは、Content-Typeを指定しないとCGIだと認識してくれないようです。



471 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:41:18 ]
>>465-469
ありがとう。こういうもんか
特に466の説明はとてもわかりやすい。
R5RSのほうはBNFついてそうだから
こっちやってみよかな

しかし、PDFって扱いにくいわ
<hoge>って表記をテキストでコピペするとhhogeiになるし
<で検索できんから不便

472 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 05:03:58 ]
ファイルの basenameを取得する関数ってありますか?

"foo.txt" -> "foo"
"foo.bar.txt -> "foo.bar"

といった風に取得したいのですが

自分で書くなら
一文字ずつ後ろから文字比較して . が来るまで探して
その部分を削除。とするんですが

もし既にあるなら書くのも悲しいので
どなたかご存知ありませんか?

473 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 05:37:46 ]
(pregexp-replace "(.*)\\.[^.]+" "foo.bar.txt" "\\1")

474 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 05:49:52 ]
pathname-name
www.lispworks.com/documentation/HyperSpec/Body/f_pn_hos.htm

475 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 06:47:07 ]
>>473-474
レスありがとうございます。

環境を書いていませんでした申し訳ありません。
R5RSで行うにはどうすれば良いでしょうか?

476 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 07:39:05 ]
R5RSにそんな高レベルな標準関数ないと思う

477 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 08:52:04 ]
R5RSで動く出来合いのライブラリが欲しいってことかね

478 名前:472 mailto:sage [2009/03/11(水) 09:17:26 ]
>>476-477
ありませんか…。

仕方がないので自分で書いてみました。
もうちょっとすっきり書けないもんかと思うんですが
今の自分にはこれが限界でした。

(define (chop str)
(substring str 0 (- (string-length str) 1)))
(define (basename str)
(if (string? (basename-if-thereis str))
(basename-if-thereis str)
str))
(define (basename-if-thereis str)
(cond ((= (string-length str) 0) #f)
((eqv? (string-ref str (- (string-length str) 1)) #\.)
(chop str))
(#t (basename-if-thereis (chop str)))))

479 名前:デフォルトの名無しさん [2009/03/11(水) 11:47:54 ]
>>472
SRFI 13 使えばいいんじゃね

(let ((i (string-index-right s #¥.)))
(if i
(substring s 0 i)
s))


480 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 14:19:19 ]
basenameの本質って拡張子を省くことじゃなくてディレクトリパスの削除じゃないのかな?
(my-basename "foo.txt") => "foo.txt"
(my-basename "foo.txt" #t) => "foo"
(my-basename "/foo/bar.txt") => "bar.txt"
みたいな
472の例はgaucheではpath-sans-extensionという手続きが割り当てられている



481 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:07:51 ]
クラススロットを辞書のように自由に登録したいのですが、
何かいい方法はありませんか?

例えば、
 (define-class <test> () (()))
というクラスから
 (define foo (make <test> :xxx 0 :yyy 10))
 (ref foo 'xxx) -> 0
 (ref foo 'yyy) -> 10
を可能にしたいのです。

482 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:09:20 ]
>>481
処理系は?

483 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:16:34 ]
>>482
gaucheです

484 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:23:09 ]
簡単にやるならこんな感じかな
(use gauche.sequence) (use util.list)
(define-class <test> () (%slots))
(define-method initialize ((self <test>) initargs)
(next-method)
(slot-set! self '%slots (map (lambda (x) (cons (string->symbol (keyword->string (car x))) (cadr x))) (slices initargs 2))))
(define-method ref ((self <test>) slot) (assq-ref (slot-ref self '%slots) slot))
(define-method (setter ref) ((self <test>) slot val) (assq-set! (slot-ref self '%slots) slot val))
ほんとうのスロットのようにふるまわせたいならMOP使わないとだめかも。


485 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:37:09 ]
>>484
それだとクラス内に辞書を確保して、
setterとgetterをスロット操作のようにエミュレートするってことですね。
なるほど〜
ありがとうございます。

ところで、Gauche本やリファレンスを見てもMOPの使い方がいまいち分からないのですが、
MOPを使うとどのようなソースになるのでしょうか?
よかったら教えてください。
よろしくお願いします。

486 名前:472 mailto:sage [2009/03/11(水) 22:12:20 ]
>>479
こういうライブラリがあるんですね、紹介ありがとうございます。
ただ、これだけのためにライブラリ入れるのも何なんで
もう少し難しい文字列処理が必要になったら入れることにします。

>>480
そうですね、確かに言われてみれば。
名前は変えることにします。

487 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 01:34:42 ]
コンビネータの勉強がしたいんですが
(expand S)とすると
(fun x (fun y (fun z ((x z) (y z)))))
が返ってくるような関数orマクロを作ろうとしたら
実質インタプリタを作るようなもんでしょうか?
もし楽な方法(特定の処理系の拡張機能etc)等があるのであれば知りたいです

488 名前:デフォルトの名無しさん [2009/03/12(木) 08:19:24 ]
lispな方はバージョン管理は何を使ってますか?

git
svn
cvs


489 名前:デフォルトの名無しさん [2009/03/12(木) 08:23:19 ]
>>488
darcs


490 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 08:28:28 ]
mercurial,
git



491 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 09:14:18 ]
Bazaar

492 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 11:02:23 ]
質問します。
組合せ問題、経路問題などの、記号処理問題をリストを使って解決するのに
相応しい言語を教えてください。
環境はできるだけ特定のOSに限定されない方が結構です。
グラフ表示は別の専門家が扱うのでロジック部分のみです。


493 名前:492 mailto:sage [2009/03/12(木) 11:15:29 ]
すみません。誤爆です。"初心者のためのプログラミング言語ガイド Part14"に書き込む
つもりでした。直前にこのスレを確認していたのでpasteされたURLがここになって
いました。
このスレの方々は それはSchemeだ! っておしゃいますよねw


494 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 11:16:25 ]
cl-graph
boost::graph

495 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 11:54:50 ]
>>492
「リストを使って解決するのに相応しい」って、その質問がすでにLISPを想定しているとしか。その名も、LISt Processer。
昔は人工知能を書くために使われていたので、ターゲット分野的にもぴったり。

LISPをはずすなら、Haskellかなぁ。
ただ、Haskellはマルチバイト文字の処理周りが痛いらしい。

496 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 12:03:13 ]
>>485 Gauche特有の話だし、wilikiででも質問してみたら?

497 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 16:25:52 ]
ものまね鳥をまねる、14000円つけてるなw
今図書館で借りっぱなしで催促の電話が何度もかかってる。
忙しくて読めなかったんです。
この場を借りて予約入れてる人に謝るよ。


498 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 16:33:29 ]
lispのラーメンタイマーだよ
(require :pythononlisp)
(py::py "import noodletimer;noodletimer.noodletimer")

499 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 16:43:28 ]
QiはQiからlispよぶのは簡単なのに
Qiをdumpしてlispから呼ばせるにはコードいじれって書いてある
自動でできないものなんだろうか

500 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 03:25:49 ]
lispは、カッコばかりでみづらいとよく言われるけど
これは、慣れだね

生産効率性については、まだよくわからないけど



501 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 05:23:24 ]
入門者レベルなんですが、lambdaを使わないと書けないんでしょうか

練習問題 1

次の関数を再帰を使って書いてください。
3. リスト (ls) から要素 (x) を取り除いたリストを返す関数。

; 3 模範解答
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
((if (eqv? x h)
(lambda (y) y)
(lambda (y) (cons h y)))
(remove x (cdr ls))))))


502 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 06:56:30 ]
>>501

(define (remove x ls)
(cond
((eq? x (car ls)) (cdr ls))
(else (cons (car ls) (remove x (cdr ls))))))

503 名前:502 mailto:sage [2009/03/14(土) 08:50:42 ]
Σ(゚д゚)

ls の中に x が二回以上出る場合はこうだ。

(define (remove x ls)
(cond
((null? ls) '())
((eq? x (car ls)) (remove x (cdr ls)))
(else (cons (car ls) (remove x (cdr ls))))))

504 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 08:58:47 ]
>>502
突っ込もうと思っていました
最初のは、(remove 5 '(1 2 3 2))でもコケますね

ヒントで実装までできました
ありがとうございました

505 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 19:18:21 ]
これ読んでいるとlispのほうが良さそうにみえるね
www.unixuser.org/~euske/doc/python/python-lisp-j.html

506 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 20:54:29 ]
Schemeでスタックを書こうとした場合
スタックのデータはグローバル変数に置くのが普通ですか?
出来たらクロージャとかに閉じ込めたいのですが
引数を2個にして1個目でpush/pop判断だとpopの時は引数が一つ無駄だし
個別にクロージャを使うと環境が別々になるし。

Gaucheのオブジェクト指向拡張とかだと綺麗にかけるんでしょうかね
他に思いつくのは、モジュールを作って
そこにスタック本体のデータを置くとかですが
どれが良いと思いますか
環境はGauche0.8.14です

507 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:08:09 ]
どれがって、consセルで作れば簡単じゃないかと

508 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:21:08 ]
(define top car)
(define pop cdr)
(define push cons)
じゃまずいですか?



509 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:40:07 ]
>>505
例外処理の項目の数値が未だに信じられない

510 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:52:51 ]
>>508
スタックをリストとして直接触らせたくないってことなんじゃね?

まぁ、Gauche の OO 関連はそんなに効率が良くないので、
クロージャに閉じ込める方がまだ無駄は少いかもね。



511 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:01:34 ]
>>509
> まぁ、Gauche の OO 関連はそんなに効率が良くないので、
> クロージャに閉じ込める方がまだ無駄は少いかもね。

くわしく
なにと比べて?
効率って生産効率?

512 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:06:56 ]
>>506-508

想像だけど、破壊的更新をしたいじゃないの?

オブジェト志向なら、
 a = stack.pop()
stack.push(b)
 …
とか書くわけジャン。

513 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:14:32 ]
>>511
速度とかメモリ効率とか。
メソッドのディスパッチも基本的には実行時にしか出来ないし。
どうでもいいけど、アンカ間違ってるぞ。

速度的には検証していないけど、
なんとなく>>506がイメージしているものを想像して書いてみた。
Gauche には依存していないつもり。

(define (make-stack)
(let ((stack (cons '() '())))
(lambda(proc)
(proc stack))))

(define (push stack-obj elem)
(stack-obj
(lambda(stack)
(set-cdr! stack
(cons (car stack)
(cdr stack)))
(set-car! stack elem))))

(define (pop stack-obj)
(stack-obj
(lambda(stack)
(if (null? (car stack))
'()
(let ((elem (car stack)))
(set-car! stack (cadr stack))
(set-cdr! stack (cddr stack))
elem)))))

514 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:23:34 ]
スタックはconsで実装するつもりだったし、
なんか話がかみ合わないと思ったら・・そういうことか、理解しました
自分がやりたかったのは510氏のいうような意味でして
ちょっと調べてたら可変長引数なる便利なものがあるってわかったので
これで実装出来ました。もう少し処理を追加したら自分の目的には使えそうな感じ

(define (stack)
(let1 val '()
(lambda a
(let-optionals*
a
((b 'none)(c '()))
(cond ((eq? b 'none) val)
((eq? b 'top) (if (eq? val '()) '() (car val)))
((eq? b 'push) (set! val (cons c val)) c)
((eq? b 'pop) (if (eq? val '()) '() (let1 r (car val) (set! val (cdr val)) r))))))))
(define a (stack))
(a 'push 1)
(a 'push 2)
(a 'push)
(a)
(a 'pop)
(a)

515 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 22:43:02 ]
>>513
(規制されてて書き込みのタイミングが悪かったのですが・・)
そういえば、Schemeのライブラリは、こういう形のほうが多いですね
参考にさせてもらいます
ありがとうございました

516 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 23:03:47 ]
最近のスタックインターフェースは、
top, pop, pushと三つに分けるのが主流だよ。
もはやイディオムになっているといっていい。


517 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:08:39 ]
;; クロージャに閉じ込める
(define (with-stack f)
(let ((stack '()))
(f
;; push
(lambda (obj) (set! stack (cons obj stack)))
;; pop
(lambda ()
(if (null? stack)
'()
(let ((obj (car stack))) (set! stack (cdr stack)) obj)))
;; top
(lambda () (if (null? stack) '() (car stack))))))

(with-stack
(lambda (push pop top)
(push 1) (push 2) (push 3)
(write (top)) (write (pop))
(write (top)) (write (pop))
(write (pop))
(write (pop))))

518 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:10:58 ]
topってなんや?

519 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:11:52 ]
解決
あとemptyっていうのも重要っぽいね

520 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 02:34:25 ]
[]も使うようにしたほうがいいの?

処理系によっては [] を () と同じように使えて、多少見かけを区別することができます:

(let ([x (calculate-x a b c)]
[y (calculate-y d e f)])
body ...)

(cond [(predicate x)
(do-something) (do-something2)]
[(predicate y)
(do-another-thing)]
[else
(do-whatever)])

括弧の意味の多重化 (中段)
practical-scheme.net/wiliki/wiliki.cgi?Lisp%3aS%E5%BC%8F%E3%81%AE%E7%90%86%E7%94%B1



521 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 03:12:22 ]
どうせそんなのはppしたら消えてしまうでしょ。
意味がある試みとは思えない。


522 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 03:32:55 ]
つーかカッコが何種類も入り乱れるのは激しくウザい

523 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 04:59:08 ]
世間でC言語みたいなものが好まれるのは、
演算子を含む式と文とのバランスが良く、
メリハリが付くからだと思う。
LISPは書式が関数も式も文も全く同じ規則で
さらにそれを括る括弧に極端に縛られる。
C言語でも関数呼び出しだけで書いていけば
同じ印象になるが、C言語では関数のネストなんて
書こうと思わなければほとんどする必要がない。
要するに括弧の形を変えたところであまり効果はない。
S式ベースでうだうだ考えるよりは、括弧に縛られない
都合の良い構文フロントエンドを作った方がマシである。

524 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 05:20:32 ]
俺は好きでよく使っているけどなぁ。
処理系によっては()[]{}の3種類が使えるから、数学の式を書くときみたいな感覚で。


525 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 05:34:48 ]
・よく言われる演算子の有無
前置記法である事と関係する。
a.b.cは
(ref(ref a 'b)'c)
1  2    3

のような書き方になる。
見ての通り1を脳内スタックに積んで2を読み、
1を降ろして3と結合する、という思考を要求する。
また、aとb,cは同一に扱えない。
((ref a b c)とは書けず、何かしら歪になる)
演算子があれば
a.b.c
1 2 3

a().b().c()
1 2  3
どちらも1から3まで、左から右へと目を動かすだけで良い。
修正が発生しても一箇所で済む。
これはS式というより、前置記法では解決できない問題と認識している。

526 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 05:46:04 ]
前置記法を排除すればS式でも(a -> b -> c)と書ける。
ここで、aをマクロ的に加工して実装してしまう事も考えられる。
が、それが現実的ではない事も判っている。
自分で演算子を作り、管理するのと同じ事になる。

527 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 05:58:26 ]
また>>526の(a -> b -> c)のように、
S式内で独自言語を構築する場合、
独自言語の構文としての括弧もあるので、
S式のくくりの括弧がどうしても邪魔に見える。
ここまでやるならもうS式である意味がない。
a->b->cと書きたいならそのまま書けばいい。

528 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:25:55 ]
だから、どうせやるなら>>523に書いた通り、必要時にS式も扱えるような
ちゃんぽん言語でもLISPで作ったらどうかというわけ。
不毛な縛りの中で何かやるよりはよっぽど健全ではないかと思う。
S式はデータとしてならともかく、コードとして出てくる必然性はあまりない。

>>520とどっちが読みやすいだろうか?
let x=calculate-x(a, b, c), y=calculate-y(d, e, f)
in body ...;

if (predicate(x)) { do-something(); do-something2(); }
else if (predicate(y)) { do-another-thing(); }
else { do-whatever(); }


529 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 06:54:38 ]
入門者なんですが、shchemeでS式以外の書き方の標準構文ってあるんでしょうか?

人間のパターン認知力なのか、人間の適応力のすごさ、慣れなのか、よくわからないけど
今のままのほうがいい気がする
基本レベルの正規表現が使える人で、schemeを100時間触ってみて、それで真っ当な意見を聞きたいかも
みんな、「このまままでいいんじゃねえ?」って言いそう

採用する理由になった論文の疑似コードもみてみたいところだが

530 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 07:12:55 ]
>>525
refが関数なら、(define ref* (lambda x (fold ref (car x) (cdr x))) で
(ref* a 'b 'c) って書けるんじゃない。
つか一般に二項演算子があるならfoldしてやりゃ不定長でも扱えるでしょ。
マクロならマクロでくるんでやればいいだろうし。
まあquoteは必要だけど、それは別の話だよね。



531 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 07:43:20 ]
>>529
昔の Lisp の論文とかには M 式ってあったね。
en.wikipedia.org/wiki/M-expression
Scheme の方だと SRFI 49 で I 式っていうのが提案されてる。
srfi.schemers.org/srfi-49/srfi-49.html
正規表現云々は知らないが、どっちもあまり流行ってない。

532 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 10:10:46 ]
そういえば、syntax が安定するまでは yacc を使って試行錯誤して
安定したら手書きの parser を使うという話を聞いたことがある。
lisper は逆に yacc より更に柔軟な方向に進もうとするのか。

533 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 10:31:03 ]
リードマクロがあるからね。

534 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:54:13 ]
>>528
マクロを忘れてるぜ。
コードがS式だからマクロ変換子は単なるリスト操作をすれば済むんだろう。
Scheme のマクロは単なるリスト操作じゃないけど、S式は大前提だ。
リーダーマクロにしたところで、内部的にはやっぱりS式だしな。

535 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 12:13:45 ]
リードマクロってキャラクタストリームベースじゃなかったっけ?

536 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:58:23 ]
; M-x run-scheme で下のコードをC-x C-eすると、最後に添付するエラーになってしまいます
(define (foo x)
(if (= x 0) '()
(cond ((= (modulo x 15) 0) (cons "FizzBuzz" (foo (- x 1))))
((= (modulo x 5) 0) (cons "Buzz" (foo (- x 1))))
((= (modulo x 3) 0) (cons "Fizz" (foo (- x 1))))
(else (cons x (foo (- x 1)))))))

環境
"GNU Emacs 22.3.1 (x86_64-unknown-linux-gnu)
of 2009-03-10 on localhost.localdomain"
guile> "1.8.0"
ちなみにon emacsでloadすると、うまくいきます。
guile> (load "fizzbuzz.scm")
guile> (foo 21)
("Fizz" "Buzz" 19 "Fizz" 17 16 "FizzBuzz" 14 13 "Fizz" 11 "Buzz" "Fizz" 8 7 "Fizz" "Buzz" 4 "Fizz" 2 1)
また、gosh on emacsだと、こうなります
gosh> (32 31 #0="FizzBuzz" 29 28 #1="Fizz" 26 #2="Buzz" #1# 23 22 #1# #2# 19 #1# 17 16 #0# 14 13 #1# 11 #2# #1# 8 7 #1# #2# 4 #1# 2 1)
OS再起動してもダメでした

エラー(長いので、一部略)
guile> ... ...
Display all 1922 possibilities? (y or n)
...
Display all 1922 possibilities? (y or n)
$abs
EISCONN
ERROR: Unbound variable: s
ABORT: (unbound-variable)
"Fizz"


537 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:58:57 ]
Backtrace:
In current input:
307: 0* [foo 3]
304: 1 (if (= x 0) (quote ()) ...)

<unnamed port>:304:1: In procedure memoization in expression (if (= x 0) (quote ()) ...):
<unnamed port>:304:1: In line 303: Missing or extra expression in (if (= x 0) (quote ()) d ((= (modulo x 15) 0) (cons "FizzBuzz" (foo (- x 1)))) s "Buzz" (foo (- x 1))).
ABORT: (syntax-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:307:24: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:307:25: unexpected ")"
ABORT: (read-error)
guile>
Display all 1922 possibilities? (y or n)
$abs
%app
%cond-expand-features
%cond-expand-table
%get-pre-modules-obarray
%guile-build-info
ERROR: Unbound variable: s
ABORT: (unbound-variable)
4

Backtrace:
In current input:
308: 0* [foo 3]

538 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:59:36 ]

<unnamed port>:304:1: In procedure memoization in expression (if (= x 0) (quote ()) ...):
<unnamed port>:304:1: In line 303: Missing or extra expression in (if (= x 0) (quote ()) d ((= (modulo x 15) 0) (cons "FizzBuzz" (foo (- x 1)))) s "Buzz" (foo (- x 1))).
ABORT: (syntax-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:19: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:20: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:21: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:22: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:23: unexpected ")"
ABORT: (read-error)
guile>

539 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 22:58:47 ]
(print (foo 21)) or (write (foo 21))
トップレベルプリンタが同一オブジェクトを複数回出力しないだけの問題では?

540 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:04:38 ]
>>539
どういう意味ですか?
自分なりに解釈して、やってみたけど、ダメでした



541 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 04:02:54 ]
>>540
>>539 の言っているのは gosh の出力についてだね。
guile のエラーについては式が guile にちゃんと渡されてない感じがする。
プロンプトが複数回表示されてるあたり、
式が複数に分割されて渡されている形になってそうなんだけど。
gosh だと C-x C-e でちゃんと動いてるのかな。

542 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 06:02:16 ]
アドバイスをきっかけに解決しました
タブによるインデント構造をつくるとこのエラーになるみたいです
スペースに置換してみたら、通りました
おとといまでは、普通に使えていた気がしたので、謎です
特別な設定をしたとしたら、メニューバーのschme欄をちょっと触ったときなのかな
触ったあとに特別不都合は、なかった気がしたけど
>>541
> >>539 の言っているのは gosh の出力についてだね。
把握しました

> gosh だと C-x C-e でちゃんと動いてるのかな。
もちろん、そうです

ドキュメント関係とデバッグ関係が整備されていそうなguileで行きたいんですよね
言語に慣れていないレベルなので、文字列処理関係は、まだ先っぽいので

気に掛けてくださったみなさま、お世話になりました

543 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 07:18:20 ]
ああそっちの問題か
readlineが悪さをしてる予感
emacsで使うときはactivate-readlineを無効にしたらどうでしょう

544 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 09:56:12 ]
>>543
本当だ
cat ~/.guile
(use-modules (ice-9 readline))
(activate-readline)
の設定を外したら、tabインデントでもC-x C-eが通るようになりました

また、安直にcat ~/.gosh
(use-modules (ice-9 readline))
(activate-readline)
としていたんですが、これって効いていないんですね
goshに関しては、info関連をまだ目を通していないので、あれなんですけど

構文を多少読めるようになったので、readline.scmとguile関連のinfoを眺めてみることにします

545 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 16:32:24 ]
gaucheのインタラクティブモードで読み込まれるスクリプトは.gaucherc。
それとice-9モジュールはguileの物であってgaucheにはない。
.guileから外すのは(activate-readline)だけでいいと思う。
gaucheを使うのならttp://practical-scheme.net/gauche/man/gauche-refj_toc.htmlを読む事を勧めます。

guileのgaucheに対する利点:多くのOSでportやpackageが用意されている。リードマクロがある。親方GNU。
gaucheのguileに対する利点:速い。日本語のドキュメントが多い。マルチバイト文字がサポートされている。

546 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 22:37:55 ]
(activate-readline)を外すのが嫌だったので、とりあえず関数に割り当ててみました

scheme, lisp関連の設定って、みなさんは、どういうふつうにされているんでしょうか?
不都合がなければ、晒してほしい・・・

cat ~/.guile
; first setting
(use-modules (ice-9 readline))
(define (a) (activate-readline))
; adding
(use-modules (ice-9 popen))
(use-modules (ice-9 rdelim))
(define date (read-line (open-input-pipe "date -R")))
(define pwd (read-line (open-input-pipe "pwd")))
(define echo-home (read-line (open-input-pipe "echo $PATH")))

547 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 22:43:57 ]
activate-readlineはemacsからrun-schemeで使うときは不要。っていうか邪魔。
(or (string=? "dumb" (getenv "TERM")) (activate-readline))
とか書けばいいんじゃないかな
(run-schemeのときは環境変数TERMがdumbに設定されるから)

548 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 22:59:01 ]
ああそれからactivate-readlineは起動後の任意の段階で評価できるから
.guileに書かないでおいて、シェルから直にguileを起動しただけ
手動で評価してもいい。
$ guile
guile> (activate-readline)
guile>

scheme、lisp関連の設定といっても自分は.emacsくらいですね。
ttp://karetta.jp/book-node/gauche-hacks/004682などを参考にするといいと思います。

549 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:11:27 ]
>>543
なるほど、readline が \t を食っちゃうのか。
知らないと意外とはまりそうだな。覚えておこう。

550 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 23:26:15 ]
逆に言えばreadlineでシンボル補完が効きます



551 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:01:45 ]
ドキュメントとデバッグ環境でGuileを選ぶってのも珍しい気がする。
そういう場合はPLTとかに行きそうなもんだけど。

552 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:26:21 ]
>>547
コンソール時
echo $TERM
linux

gnome-terminal時 
echo $TERM
xterm

emacs時 echo $TERM
emacs
なのに、なぜemacs時だけ(activate-readline)が実行されないの?
>>551
scheme処女なもんで4つのinfoがあるguileなのかなと思って
PLTは、存じませんでした
候補として考えたのは、Gauche, guile(, tiny scheme)の2つ(3つ)ですね
ちょっとした疑問なんですが、guileにあるhelp関数ってGaucheにもあるんでしょうか?
あと日本人のguile率って少ないんでしょうか?
SchemeでぐぐるとGaucheがいっぱいひっかかりますね

553 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 00:47:53 ]
Gaucheは高機能な上、日本人のShiro Kawaiさん作なので日本語のドキュメントがたくさんある。
guileはGNU標準でポータビリティは高いんだけど動作が遅くてスタックが(標準では)少ない。
入門用ならばR5RS規格に最も厳格にマッチしている上にguile以上のポータビリティがあるScheme48もお勧め。
自分はGauche>>guile>Scheme48の順に使ってます。
マクロの種類で言えば
Gauche:syntax-rulesマクロ、伝統的マクロ
guile:syntax-rulesマクロ、syntax-caseマクロ、伝統的マクロ、リードマクロ
Scheme48:syntax-rulesマクロ、明示的改名マクロ
なのでguileが最も充実してますが。

554 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 04:34:29 ]
>>552
gaucheにはhelp関数は無いけどinfo関数というのがある。
ただ、表示されるのが「その関数を含むinfoの1ページ」なのでちょっと面倒。
emacsから使ってるなら、カーソルのある関数のinfoエントリを一発で*info*バッファに
表示するelispが昔MLに流れたことがあった気がする。


555 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 04:57:19 ]
describeもaproposも使えるけど
なんだかんだでhyperspecとslimeが使いやすいやね


556 名前:552 mailto:sage [2009/03/17(火) 05:23:33 ]
自己解決しました
コピペまんまだと、activate-readlineきいていました
"dumb"のところを"emacs"に変えればいいわけですね
当たり前と言えば、当たり前なんだけど

日本語WikipediaのSchemeの項目の最下部の外部リンクの「関数プログラミングは、なぜ必要か、うんぬん」の文章ってわけわからないっすね
あの疑似コード、わかりにくいw

プログラミングしていて、なんとなく関数言語がいうモジュール化がわかってきたかも
>>553
今、気づいたんですが、日本語WikipediaにSchemeの処理系の項目は、Gauche以外書かれていないんですね
そういう意味でもGaucheに流れる人が多いのかな
>>554
info関数なんてあるんですね
Gaucheのインストール失敗したのか、よくわかりませんが、info閲覧できないんですよね
まだ必要に迫られていないので、ちゃんと調べていませんが

>emacsから使ってるなら、カーソルのある関数のinfoエントリを一発で*info*バッファに
>表示するelispが昔MLに流れたことがあった気がする。
便利そうですね

>>555
slimeって聞きますね
もうちょっとしたら、導入してみます

557 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 08:05:53 ]
あれ、run-schemeで起動したguileで
guile> (getenv "TERM")
"dumb"
ってなりませんでしたか?
guile> (getenv "TERM")
"emacs"
なら"dumb"を"emacs"でいいですけど…

558 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 09:22:34 ]
>>557
shellモードもrun-schemeモードも"emacs"と返りますね

infoドキュメントでがんばって、勉強しているんですが
けっこう大変ですね

基本的なlet, set, lambda関連の記述の仕方は、わかるんですが
ちょっと複雑になると理解しにくい・・・

559 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 10:39:23 ]
>SchemeでぐぐるとGaucheがいっぱいひっかかりますね
絶望した!横文字をウェブ全体から検索した結果に絶望した!

560 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 13:28:37 ]
infoで勉強する心意気は結構ですけど
先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。
わからない所はこことかに具体的にドシドシ書きこむと
さらに後に続く人の為にもなるでしょう。



561 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 19:17:54 ]
>>560
> infoで勉強する心意気は結構ですけど
> 先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。

infoで勉強するのが今回の目的だったりするんですよね
あとguileは、なにができるだ(どういう機能があるの?)というのも速く知りたいから、
とりあえず、なぞっているのもあります

もちろん、Schemeの学習階段的には、日本語の入門サイトは有用ですね

英語圏の人は、infoだけで事足りるのか、プログラミング経験度を前提しているのかとか

562 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 22:17:23 ]
>infoだけで事足りるのか
そんな完璧な文書があると思うか?
あるわけねーだろ
完璧を目指すのはいいが少しずつ地道に改善していくしかない


ちなみに、アジャイルとかなんとか言われるようになる以前は
一発で完璧なものが作れると思ってる奴がたくさんいたとかいないとか

563 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 02:46:26 ]
>>562
完璧な文書だとは、思わないけど
十分な文書だと思うよ

564 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:35:17 ]
common lispの情報探そうとするとhatenaなどのblogにいきあたること多い
schemeは2chの過去スレが検索にかかることが多い

この違いは何?


565 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:46:13 ]
Googleの中の人に聞いて下さい。

566 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:48:47 ]
schemeしか知らないけど、lispでぐぐればいいんじゃない?
lisp --> common lisp
scheme --> scheme
という理解だけど

567 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 12:48:51 ]
&hl=en付けたら2chにもhatenaにもいきあたらないな

568 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 13:00:54 ]
>564
実用性があるか無いか、実アプリ開発に使ってるか否かの差だとオモ。
言い方を変えればSchemeは教育的効果は高いが…

569 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 13:30:55 ]
おっとBASICの悪口はそこまでだ

570 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:54:36 ]
schemeで、(car '())や(cdr '())の結果はどうなるんしょうか?
昔読んだLISPの本か何かでnilのcarやcdrはnilになるという
説明を見た気がするのですが、schemeにも当てはまるんでしょうか。



571 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:04:13 ]
r5rsでは空のリストにcar,cdrはエラーって定義されてるな

572 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:05:36 ]
R5RS 6.3.2

573 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 16:06:31 ]
r5rs-ja.pdfにありました。ありがとうございました。

574 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 21:02:29 ]
>>497
オレ、とある図書館でその本の順番待ちなんだが、
まさかオマエが止めてるのか?w


575 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:54:43 ]
なんだこいつ

576 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 23:33:46 ]
これをLIFOと言います

577 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 23:59:26 ]
後入れ中出しだっけ

578 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 00:29:47 ]
アッー!

579 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 01:54:40 ]
guile, gaucheよりelispのほうがデバッガが整備されているの?

>Shiro(2007/09/05 13:39:49 PDT): 慣れが半分、後は「バグを出しにくいコードの書き方」が半分でしょうか。出来る限り副作用無しで書いておくとバグの切り分けが非常に容易になります。
>たぶん、「ソースの動きを追う」という考え方自体、C/C++とSchemeで差があるんではないかと思います。
practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AE%E8%B3%AA%E5%95%8F%E7%AE%B1#H-1frlpc5

C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか?
個人的にデバッガを使って、「ソースをよく読み、ときどき書き」というのをしたいんですが

580 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 05:47:16 ]
>>579
そのすぐ下に書いてある通りでは。
デバッガを使わずとも、replで個々の手続きを呼べるので、色々な入力を与えて出力を
見るかな。入力と出力の関係がすぐに把握できない(手続き内でステップ実行したいと思う)
ようであればたぶん手続きが(あなたにとって)大きすぎる。




581 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 07:32:34 ]
で、何のソースを読みたいの?
抽象論はもう飽きたよ

582 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:30:31 ]
>C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか?
そういえばあんまり追ったことないかも・・・スタックトレースが1000行と出ちゃうから。面倒なんでデバッガ使わなくなった。"Type (debug) to enter the debugger."とか出されても、もう無視(w

583 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 08:34:34 ]
>>580
処理系への絶対的な信頼性ってこと?
効率的なデバッグ術の個人の差ってかなり開きがありそうだね
>>581
日本語サイトのサンプルとか、とりあえず、デバッグツールで読みたいなあと思って

バグでハマって、解決はしたけど、ものすごく時間がかかった場合は
バグの見つけ方のポイントを教えてくださいね

584 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 10:56:39 ]
初心者ですけど

(define (f x)
(let ((a (hoge1 x))
(b (hoge2 a))
(c (hoge3 b))
(d (hoge4 c)))
d))

;; (f "なんちゃら")

みたいな書き方をしています。

Emacsで、最後のコメントアウト行でC-c C-eで評価。
思ったような主力がでないときは、最後のdをcとかbとかに書き換えて、その段階での出力をみます。

手続き型に毒されたやり方でしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:10:57 ]
それをやるならlet*じゃないかね


586 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:33:22 ]
>>579
自分はC++でプログラム書く時も、
デバッガ使うのはcore dump(assert含む)した時くらい。
基本的にユニットテストやってる。
自分のことを全然信用してないから、
全自動で網羅的なチェックした方がよい。

もちろんテストコードの方が圧倒的に多いし、
assertも馬鹿みたいに書いてる。
コードを書いたらすぐにユニットテストも書いてるから、
何かテストしたい時には、デバッガ立ち上げて操作するより、
既存のユニットテストコードを基に新たに書く方が速いw

テスト、assertコードを書くのは設計の検討にもなってる。
設計をあらゆる角度から観察する必要があるから。
もちろんdtrace, profilerなんかも使いますが。

587 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 14:36:15 ]
>自分のことを全然信用してないから、
分かるわ〜
自分もいっつもデイジー・デイジー歌っちゃう

588 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 15:46:53 ]
そんなんじゃボーマンさんにスイッチ切られちゃうぞ。

589 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 19:56:25 ]
>>585
ご指摘のとおり、let* でした。

590 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 21:57:53 ]
そのテストツールの作り方の方針というか
みたいなものをまとめている本ってないでしょうか



591 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:28:14 ]
そのってどの?

592 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 23:32:39 ]
まずデバッガに依存するのをやめて徹底的に構造化プログラミングを意識するようにした方がいいんじゃね?

593 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 00:24:13 ]
具体的に何のコードをテストしたいのかを意識するべき。
そうでないと、ツールとか方針とかが正しいのか、そもそも必要なのかを検証できない。

594 名前:デフォルトの名無しさん [2009/03/21(土) 01:36:26 ]
>>592
デバッガ使ってうまくいっている人は使えばいいと思うよ。

595 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 01:53:44 ]
デバッグのしやすさをよく考えて作ったほうがいいよ。つまり
手続っぽく作るのも可能だけど、なるべく関数のスタイルを身につけたほうが
効率的だよ。関数のスタイルをとるなら、デバッグはassertやtraceさえ出来れ
ば、大体なんとかなるし。いわゆるデバッガが必要なのは、関数がでかくって、
その中で手続的に処理が乱雑になっちゃうからなのでは?

596 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 02:13:43 ]
そもそもの話はコードの読み方じゃなかったっけ。
まあ、それはreplで関数叩いて入出力確かめろ、ですでに結論出てるな。
とは言え、じゃあひどいコードはどうやったら効率よく読めますか、
とか訊かれると、どうしたもんかね、となるが。

597 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:43:54 ]
本屋でO'reilly Gaucheをみかけて、軽く立ち読みしたけど
良さそうな感じだね

598 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 08:10:07 ]
>>590
処理系のソースに付いてくるテストコード読みなよ。

599 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:33:23 ]
>>597
新しいGauche本が出たのかと喜んでオライリーを覗きに行ったら
ふぬああ本のことだったのか…

600 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:45:12 ]
2133?



601 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:57:45 ]
フ ムフム
ヌ クヌク
ア プ
ア ア

602 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:20:27 ]
フムフムヌクヌクアプアア ♪

www.youtube.com/watch?v=ir38tIOQdT0

603 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:27:25 ]
すまんがカッコ付きで話してくれんか

604 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:13:46 ]
(+ (* フム 2) (* ヌク 2) アプアア)

605 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:34:35 ]
Syntax Error

606 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 01:36:23 ]
>>605
お前が閉じろよ。

607 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:27:25 ]
私のカギカッコは渚でしか見つけられませんでした。

608 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 13:08:06 ]
))) ←波

609 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:44:13 ]
))) ←こんなん見て人生おかしくならないか?

610 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:04:11 ]
>>609
おれのヘッドホンは
beyerdynamics))))
だよ。



611 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:16:03 ]
(((((((((((パナウェーブ)))))))))))

612 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 03:00:39 ]
Lisp使い初めてから人生おかしくなったとか損したなんて人は
今まで一人も見たことがないな。



その前に周りにLisp使える人が一人も居ないお(´;ω;`)

613 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 03:03:56 ]
損はしていないが、Lisp使えるだけでアレゲな現場に投入された経験はある。
周りが変態ばかりで困った記憶がある。
かくいう俺もド変態だ。どうだまいったか。

614 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 05:11:32 ]
アレゲってエロゲでAI作るとか?

615 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 06:16:04 ]
ぬるぽ

616 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:07:38 ]
LISPにNullPointerExceptionあるの?

617 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:10:41 ]
規格上はない。
補足してトップレベルに復帰する処理系はある。

618 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:26:42 ]
おお、安心しました。

619 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:29:47 ]
値が束縛されてないシンボルを参照したりすると出るエラーがぬるぽに相当するんでは?

620 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:03:13 ]
それはUNBOUND-VARIABLEだよね。
NILのCDR取るとか規格の範囲内で起きるものじゃなくて、
MEMREFなどの低レベルAPIや処理系バグで起きる、
*((char *)0)な話かと思ったが。



621 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:13:24 ]
>>574
謝ってるのにオマエとか言う奴には貸したくないな。

622 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:58:32 ]
いやいや、アナタの本じゃないし
読んでなくても一度返すのがスジですよ。
そして列の最後尾に並び直すのです。
(セドラーから5000円だか7000円だかで新古本を買った者より)

623 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:32:59 ]
筋というか、普通はそういう規則じゃないの。
予約を入れた人がいなくても
貸し出し期間内に図書館にいって延長手続き(借り直し)するものだと思うんだけど。

624 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:53:18 ]
>>622
へー新古品なんてあるところにはあるんだなあ。
ところで訳書を出してたとこってたしかオンデマンド印刷とかで
幾つか出してるし、これもそれで復刊してくれないかなあ。


625 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:07:18 ]
某大手書店の最後のディヴィグ本をゲットして喜んでたのに
いつの間にか増刷されてamazonでさえ普通に新本が手に入るようになってて涙目w
手習いとかものまねも復刊されるかもね

626 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:15:26 ]
>>625
ま、そんなこともあるさ。 どんまいどんまい。

627 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:23:31 ]
筋ってw
ヤクザやさんがこんなところに居るとはw
規則なんだから返すに決まってるでしょ。
あればね…

ていうか本なくしちゃったw

628 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 23:30:41 ]
>> 627
細かいこと気にするなって。買って返せば無問題♪

629 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:11:21 ]
>>621とか>>627とか、こういう奴がいるから、
図書館の中の人が苦労するんだろうな、と思った。
釣りならいいけど、素でその態度なら頭おかしいだろ。

630 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:22:12 ]
わざわざ言うことかw



631 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:27:05 ]
絶版Lisp本ではものまね鳥と竹内先生の本が読みたいな。
あとLisp以外ではPrologの技芸。ヤフオクみたら29500円とかwwwwww
オンデマンドで売ってくれくれ。

632 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:44:01 ]
Prologの技芸ってたまに名前を聞くんだが、そんなに偉大な本だったのか・・・・・

633 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:49:05 ]
Prologの技芸持ってるけど読んでないぜ
そんなプレミア付きとは知らなんだ

634 名前: ◆7y/z31W.Wg mailto:sage [2009/03/25(水) 02:55:24 ]
>>633
よかったら読んだら売ってよ。1万なら買うよ。

635 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 02:56:26 ]
「Prologの技芸」はProlog版SICP。
SICPはアーキテクチャよりだけど、こっちは応用より。
内容グーで印刷ショボ。

636 名前: ◆7y/z31W.Wg mailto:sage [2009/03/25(水) 03:01:49 ]
間違ったヤフオクじゃなくてアマゾンだった。> 29500円

637 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 06:41:10 ]
これって業者がつり上げてんの?ひどい値段だなぁ。

638 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 09:28:43 ]
>Prolog版SICP
なるほど

639 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:06:13 ]
the art of prologの和訳本だよね

640 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 13:22:05 ]
MITの教科書か。既に新しい版が出てるみたいだね。




641 名前:デフォルトの名無しさん [2009/03/25(水) 14:53:33 ]
話ぶった切ってすまないけど、SchemeでProcessingみたいに
Arduinoを制御することができる処理系ってあるのかな?
GaucheとかPLTってどうなんだろ?
できればやりかた書いてあるリンク教えてください。

642 名前:デフォルトの名無しさん [2009/03/25(水) 15:20:28 ]
>>641
chicken scheme + avr-gcc + avrdude
1010.co.uk/arduino.html#2

643 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 15:55:03 ]
一方ポールグレアムはクラウドを制御した

644 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 16:08:31 ]
crowdコンピューター?

645 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:24:21 ]
生きのこる術は大衆言語。

646 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:02:14 ]
だが気を付けたまえ。

647 名前:デフォルトの名無しさん [2009/03/26(木) 17:47:48 ]
>>641
"Getting Started with Arduino"の6章"Talking to the Cloud"で
Proce55ingを使ってクラウド上のPhysical computingを制御してます。
実はRubyやPerlやPythonでも出来るので、
もしかしたらGaucheとかPLTでもできるかも・・・Arduinoはavrdude経由で操作するかと思いますが・・・
スクリプトでなければ>>642のようにavr-gccでArduino上のプログラムを
作成するのが良いでしょう。
そんな感じでクラウド側もPhysical computing側もSchemeは使えます。
といってもArduino上のというかAVR上のSchemeはまだないですね。
最近はメモリサイズが大分大きくなったようですが・・・

648 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:55:27 ]
>>647
>Arduino上のというかAVR上のSchemeはまだないですね。
つーかそもそもmegaの内蔵SRAM程度では厳しい。
外部コンパイルしてAVR上でVMを走らせる
みたいな使い方ならできるだろうけど。
マイコンでscheme動かすならアドレス空間大きめの
ものを選んだ方がいい。

649 名前:デフォルトの名無しさん [2009/03/27(金) 03:23:50 ]
>>648
PICでSchemeが動いているw

650 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:03:22 ]
atmegaでも無理なのか
ならschemeからマシン語のコードを吐くコンパイラというのならどうかな



651 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:10:45 ]
ハーバードアーキテクチャだからフラッシュとSRAMの扱いが違うんだよね
フラッシュにオンタイムで書き込むにはブートローダもどきがいる

652 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 15:07:29 ]
Schemeじゃないけどこんなのはあるよ。
簡単なλ計算のインタプリタをArduinoで動かしてる。

Project LambdaCan: Lambda Calculus in a Can
alum.wpi.edu/~tfraser/Software/Arduino/lambdacan.html

653 名前:デフォルトの名無しさん [2009/03/28(土) 23:38:51 ]
>>652
有り難う御座います。このスレでもλ計算の話は久しぶりですね。
とっても気に入りました。でも、素のλ計算はメモリを喰うので
この計算ぐらいが限界って例が書いてありますね。
簡約戦略がまずいとメモリオーバーしそうですねw

654 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 23:38:06 ]
関数型スレでスルーされてしまったのでコチラで聞いてみますが
lazy-kやunlambdaの式をλ式にしてくれる変換器ってないでしょうか
(もしあればCombinator Birdsのような式が直接計算出来るのが理想ですが)
というのも、W=C(BMR)=λab.bbb≠λab.abbな気がするので
検算してみたいんです。
後Combinator Birdsのページ、
W=SS(KI)がおそらく一番シンプルな答えですね

655 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:23:24 ]
なんか流れを止めてしまったみたいなので、654は撤回します
ごめんなさい

656 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:39:56 ]
過疎板の過疎スレで気にするような事じゃない

657 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:13:21 ]
>>655
いや、関係ないだろ

W=C(BMR)=λab.bbb≠λab.abbとW=SS(KI)ってどういう意味なの?
暗号にしかみえないw

658 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:25:41 ]
撤回するな!CLかSchemeで実装してみろ!
と焚きつけてみる

659 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:53:00 ]
良かった。それじゃせっかくなので解説してみます
λをlと表記すると
lab.abbってのは(lambda (a) (lambda (b) ((a b) b))と同じ意味(abbの部分は左結合)で、
これはWコンビネータのλ式の表現でもあります。
W=SS(KI)、つまり((S S) (KI))ってのは以下のS,Kを用いてWが表せますよ、という意味

;lxyz.xz(yz)
(define S (lambda (x) (lambda (y) (lambda (z) ((x z) (y z))))))
;lxy.x
(define K (lambda (x) (lambda (y) x)))
;lx.x
(define I (lambda (x) x))
(define turing-type-quine
(lambda (x)
(lambda (y)
(list y (list x
(list 'quote x)
(list 'quote y))))))
(define w (lambda (x) (lambda (y) ((x y) y))))
((((S S) (K I)) turing-type-quine) 2)
((w turing-type-quine) 2)

最後の2行は同じ結果になりますよね

Combinator Birdsでググるとトップに出てくるページには
この他にW=C(BMR)っていう定義が載っていて
これを簡約するとlab.bbbになるのではないか、というのが自分の疑問です。
というか、上のようなコードを書いて気づいたけど、
Scheme殿に計算してもらえば良かったわけだ
今から試してきます。気づかせてくれてさんきゅ

660 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:03:17 ]
(define C (lambda (x) (lambda (y) (lambda (z) ((x z) y)))))
(define B (lambda (x) (lambda (y) (lambda (z) (x (y z))))))
(define M (lambda (x) (x x)))
(define R (lambda (x) (lambda (y) (lambda (z) ((y z) x)))))
(define W (C ((B M) R)))
((W turing-type-quine) 2)

普通に出来た。
自分の計算ミスかー、ショック

ちなみにW=SS(KI)はこんな感じで計算できます。
lab.abb
=lab.(ab)b
=la.S(lb.ab)(lb.b)
=la.SaI
=la.(Sa)(KIa)
=S(la.Sa)(la.KIa)
=SS(KI)



661 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 00:49:42 ]
>>660
2割ぐらい理解したw
あとで再挑戦・再理解してみる
lambdaを3つ使うのを初めてみた
おれはlambdaを3つ使うコードを書くことがあるのだろうか

このロジック(表記法?)は、どういう用途で使えそうなの?

662 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 07:02:04 ]
意味はさっぱり分からんがラムダだらけで楽しそうだ

663 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:24:12 ]
>>661
オレ、660じゃないけど、べつに実用性とかじゃなくて最小の関数型言語の形のひとつ:
e.tir.jp/wiliki?%CB%DD%CC%F5%3A%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECLazy_K



664 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 16:00:20 ]
>>663
Thank you
知らない概念や処理系が、いっぱいあったけど
2割ぐらい理解した

感想は、うまく言葉にできない

665 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:15:59 ]
660ですが、ML系(たぶんHaskellも)の言語ではカリー化という機能があって
Schemeでいう以下の2つは同じ物として扱われる
 (lambda (x) (lambda (y) (lambda (z) ...
 (lambda (x y z) ...
3引数の関数なら書いたことあるでしょ?
そう考えたらそんなに複雑でもなく見えてくるかもね

666 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:45:19 ]
>>665
素朴な疑問なんですが
普段は、なんの言語を使っているんですか?
ちなみに自分はbash 5%, C/C++ 30%, gauche 10%, Python 30%, その他 25%
エディタはemacs?
差し支えなければ、教えてください

667 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:23:21 ]
聞かれていない自分も晒すと
gauche95%、sh3%、sed1%、C1%くらいだな。
1年半くらい前はsh70%、sed20%、C8%、(Scheme48+guile)2%くらいだったけど。

カリー化と可変長引数は両立がむずかしげでML系はカリー化を、Lisp系は可変長引数を取ったんだとおもう。
あとカリー化とthunkも相性が悪くて
正格評価のMLは、評価を遅延させる式を
():unitを受け取るなんちゃってthunkで実現してた気がする。

668 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:42:54 ]
>>667
gaucheを使っていて、不都合はないの?
他の言語を選ばずに、gaucheを選んだいくつかの理由ってなに?
lisp系じゃなくて、gaucheの理由も知りたいかも

669 名前:660 mailto:sage [2009/04/01(水) 20:57:38 ]
Gauche使ってる時間が50%ぐらいで、
OCaml&F# 30% C++ 15% Perl 5%ぐらい
エディタはVC付属エディタとemacs/viです

ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが


670 名前:デフォルトの名無しさん [2009/04/01(水) 21:04:07 ]


500 :Classical名無しさん :09/04/01 20:55 ID:qtulE/8k
よろしくお願いします。

【URL】 pc12.2ch.net/test/read.cgi/tech/1231856193/
【名前欄】 660
【メール欄】 sage
【本文】↓
Gauche使ってる時間が50%ぐらいで、
OCaml&F# 30% C++ 15% Perl 5%ぐらい
エディタはVC付属エディタとemacs/viです

ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが




671 名前:667 mailto:sage [2009/04/01(水) 21:20:19 ]
>>668
自分のScheme処理系の変遷は
1.scm。多倍長整数が使いたくなる。
2.Gambit-C。SRFI周りがオレ様過ぎる。
3.MzScheme。非メジャーCPU、非メジャーOSへのポートに挫折。
4.Scheme48。本格的にSchemeを使い始めるが非保健的マクロが独自、SLIBのサポートがビミョー。
5.Guile。機能的にはほぼ文句はないが、遅い。そして重い。
6.Chicken。非メジャーCPUで最適化バグがあったような気がする。
7.Gauche。現状フリーR5RS処理系でベスト。非メジャーCPU、非メジャーOSへのポートも楽。
という感じです。
ドキュメントも豊富、高機能で軽くて高速、とくに正規表現周りはcl-ppcreよりも使いやすいのも◎。
いままでC+sed+shでやってたことをgaucheだけで置き換えられるようになったのがいいですね。
速度重視とかマルチスレッドバリバリなことをしなくなったということもありますが。

672 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:52:45 ]
SGIが倒産したらしい

673 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:58:17 ]
そうか、そうか

674 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 23:00:18 ]
lisp系は自作に限るよ

675 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 03:41:44 ]
LispスレでSGIといったら創価じゃなくて
シリコン・グラフィックの方だろJK

676 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 03:47:31 ]
2度目の倒産なんだって?
なんかLispに関して大きいことやってたっけ?
OpenGLぐらいしかシランわ。

677 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:44:57 ]
ずっと自作のSchemeモドキを使っています。モドキというのは、あまり
使わない機能を削って代わりに部分継続やソフトタイピングを入れたり
してるためです。それなりに高速でデバッグ機能も充実していると思って
いますが、RnRSやSRFIの類は全く考慮せず作っているので公開していま
せん。ドキュメント書くのもめんどくさいし(論文は書いたけど)。

678 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:10:38 ]
>>672
エイプリルフールだと思ってた…

679 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:18:51 ]
勘違いしたかも。
SGI(非創価)ってLisperが作った会社だと思ってました。

680 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:20:30 ]
lispでモナディウスなみの速度は出せるのだろうか



681 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:33:15 ]
>>679
ジムクラーク? Lisper ではないね。専門は CG らしい。
ワークステーション屋で Lisper が作った会社ってあったっけ?
Sun のビルジョイはハッカーだけど Lisper じゃないし。

682 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:58:18 ]
昔、N-Worldって、SGI (Indy?)向けの3D CG作成アプリなかった?
Lispマシンから移植されたものだったと思う。Lispで動いていたはず。
プロトタイピング強いから、いろいろな分野の初期大型アプリで使われてるね。
数式処理、ウィンドウシステム、プログラミング可能エディタなど。
CG関係も昔はもっと多かった。

683 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:25:17 ]
sgiといえば、インディゴだな。doomでネット対戦に使わせてもらったよ。

684 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 19:27:02 ]
sigは破産申請したらしいね

685 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 20:34:16 ]
CGはもうからないのか

686 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:50:42 ]
>>682
ニチメンなんとか、ってやつのことかな。Shiroさんが詳しそう

687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:37:30 ]
前回の破産でCG方面からサーバー屋に商売変えしてたんじゃなかったっけ?

688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 00:39:09 ]
なんかMIPSの灯がどんどん消えてく気がするなぁ…

689 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:43:52 ]
/.Jによると、どこだかに買収されるんで、それに必要な手続きなんだと。


690 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 01:57:27 ]
>>681
そうゆう名前で呼ばれてかかどうかはおいといて、MIT 由来の
LISP マシンってワークステーション以外のなのものでもないが…




691 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 02:28:13 ]
>>685
技術の発展とともに、作業端末は高価なUNIXワークステーションではなく
安価なWindowsマシンが優位になり、未開の領域に強く柔軟なLispから
高速で大規模なプログラムに強い? C++に置き換わったとかじゃないの。

692 名前:681 mailto:sage [2009/04/03(金) 09:54:17 ]
>>690
あーそうね。シンボリクスとかがそうか。
Unixワークステーション屋で、と言うべきだったかな。

693 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 11:16:16 ]
carやcdrがちゃんと理解できん・・・
アセンブラの方が簡単かも。

694 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:14:13 ]
そんなに難しいかな?

単方向リンクリストの、先頭を取り出すか、それ以外を取り出すか、
だけなんだが。

695 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:16:17 ]
括弧とドットの表記法でつまづくか、ポインタでつまづくかのどっちかですよねー

696 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:42:44 ]
carは左って覚えれば良いと思うよ

697 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 12:48:44 ]
>>693
コンスは単なる2つのポインタの対
Lispよりも低レベルではcarとcdrは可換で線形リストとは何の関係もない
線形リストに利用しているのはLispより高レベルだけの話
アセンブラ的に考えればこう

698 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:05:28 ]
まずボックス表記を手で書いて
それからいろんな構造をconsだけで組み立てる
ドット対→線形単リスト→2分木みたいに徐々に複雑にしていくといい

699 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:14:01 ]
Common Lisp: A Gentle Introduction to Symbolic Computation 付録の sdraw 使うと図示してくれる

CL-USER> (sdraw '(1 2 3 (4 5)))

[*|*]--->[*|*]--->[*|*]--->[*|*]--->NIL
|      |      |      |
v     v     v     v
1     2     3     [*|*]--->[*|*]--->NIL
                  |     |
                  v     v
                  4     5

www.cs.cmu.edu/~dst/Lisp/sdraw/

700 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:17:57 ]
ちゃんと理解できないったって(と)の対応はわかりますよね?
Lispのリスト記法はドット記法の構文糖
任意のリスト記法はドット記法で表せる(逆は偽)
ドット記法の基本は( A . B )でホワイトスペース+ドット+ホワイトスペースがcarとcdrの間の仕切り
(開き/閉じ括弧の周りはホワイトスペースの省略可)
そしてドット記法を(A B C)みたいなに直すのは
ドット+開き括弧を見つけたら、それと、それに対応する閉じ括弧を消しゴムで消すだけ



701 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 13:22:22 ]
( A . B ) ≡ [ A | B ]

702 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:15:16 ]
(cons 'a 'b) => (a . b)
(cons 'a (cons 'b '())) => (a b)
'(a . (b . (c . ()))) => (a b c)

703 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:22:09 ]
'とかquoteが絡んでくると解りづらくなるから
任意のアルファベット1文字のシンボルと空リストは自己評価的という設定にしよう
(cons A B) => (A . B) ;; [ A | B ]
(cons A ()) => (A . ()) ≡ (A) ;; [ A | NIL ]
(cons (cons A B) ()) => ((A . B) . ()) ≡ ((A . B)) ;; [ [ A | B ] | NIL ]
(cons () (cons A ())) => (() . (A . ())) ≡ (() A) ;; [ NIL | [ A | NIL ] ]
(cons A (cons B C)) => (A . (B . C)) ≡ (A B . C) ;; [ A | [ B | C ] ]

704 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 14:24:40 ]
lispのリストはヘテロジニアスリストでさらにペアにもなるから難しいよな
ML系みたいにリストは空か値とリストを持つコンスって定義だとまだわかりやすいのに

705 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:27:28 ]
分かりにくくないだろw

706 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:48:41 ]
ふと思ったんですけど
効率の為にlistではなくvectorを使っているアルゴリズムって
静的にコンパイル+破壊的代入なしって条件なら
プログラマにはlistとして見せつつ
内部的にはvectorとして処理できませんかね?
たとえば(list 1 2 3 4 5)は
表面的にはコンスによる線形リストなんだけど内部的には#(1 2 3 4 5)であるオブジェクトを返すとか。
書き換えられない事が解っているn要素の線形リストは2ワードのセルをn個アロケートするより
nワード+αのベクタで記憶するほうがよさそう。
Haskellが文字列をリストとして実装してるのはそんな理由だったりするのでしょうか?

707 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:50:16 ]
それは「cdr coding」と呼ばれるもので散々実験済み。

708 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:52:55 ]
書き込んでから気づいたけど、
部分リストを複数オブジェクトで共有している場合
先頭部分の参照がはずれてもGCで回収できなくて逆に効率が悪くなりますね。
ベクタの最初の方だけGCできる方法を取れば別ですけど
そうするとベクタの情報が増えて結局コンスと大差なくなるかも

709 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:14:39 ]
>>707
おや、そうでしたか。不勉強でした。
見た所、線形リストを少しでも効率よく処理する為の物の様で
ベクタを置き換えるには至らなかったようですね。

710 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 16:35:18 ]
vector的利用がはっきりしているところでは、
vectorを使えばいいしね。
listで構造体を模倣してprototypingしても、
accessor使っておけば簡単に移行できるし。



711 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 17:59:01 ]
evalと大域変数でhashを模倣する初心者を見てニヤニヤするんですよねー

712 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 18:02:44 ]
それは君だけ。

713 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:15:13 ]
やべえ、サボってたらSeasoned Schemerわかんねえw
また後戻りか…英語もやってないし… λ.......






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef