Lisp Scheme Part25
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/01/13(火) 23:16:33Part24: 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
0002デフォルトの名無しさん
2009/01/13(火) 23:17:35ttp://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の話題が中心。
0003デフォルトの名無しさん
2009/01/13(火) 23:18:30後は誰か頼むw
0004デフォルトの名無しさん
2009/01/14(水) 00:08:31CLtL2: 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
0005デフォルトの名無しさん
2009/01/14(水) 00:08:56ttp://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/
0006デフォルトの名無しさん
2009/01/14(水) 00:09:24Structure 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入門書。全文がオンラインで読めます。
0007デフォルトの名無しさん
2009/01/14(水) 00:10:01『プログラミング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の力の源泉であるマクロプログラミングを解説。
0008デフォルトの名無しさん
2009/01/14(水) 00:10:14ttp://community.schemewiki.org/?scheme-faq-standards#implementations
0009デフォルトの名無しさん
2009/01/14(水) 00:10:24John 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
0010デフォルトの名無しさん
2009/01/14(水) 00:13:38独習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
0011デフォルトの名無しさん
2009/01/14(水) 00:14:18初心者が集うIRC(布教してくれる先生も大募集です)。
irc.scenecritique.com
port 6667
チャンネル #Lisp_Scheme
Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/
コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。
0012デフォルトの名無しさん
2009/01/14(水) 00:14:42Gauche: マルチバイト文字に対応した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
0013デフォルトの名無しさん
2009/01/14(水) 00:15:16Chez 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/
0014デフォルトの名無しさん
2009/01/14(水) 00:15:53Steel 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
0015デフォルトの名無しさん
2009/01/14(水) 00:17:40/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0016デフォルトの名無しさん
2009/01/14(水) 00:17:46awklisp: 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/
0017デフォルトの名無しさん
2009/01/14(水) 00:18:10Shibuya.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/
0018デフォルトの名無しさん
2009/01/14(水) 00:20:33(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/
0019デフォルトの名無しさん
2009/01/14(水) 00:22:31>>3
諦めんなよ!
>>8 >>15
お前らも手伝えよ!
0020デフォルトの名無しさん
2009/01/14(水) 00:36:460021デフォルトの名無しさん
2009/01/14(水) 00:55:070022デフォルトの名無しさん
2009/01/14(水) 01:00:04っT
0023デフォルトの名無しさん
2009/01/14(水) 01:37:21Little終わったので萩谷先生の関数プログラミング買った。
3月まではこれとものまね鳥読む。
0024デフォルトの名無しさん
2009/01/14(水) 04:37:00毎回20レス近く潰れるのは無駄な気がする
どうせ雑談しかしてないし、こんな長いと読まないっしょ
仕様書程度でいいんじゃないか
0025デフォルトの名無しさん
2009/01/14(水) 04:47:45Common Lisp→EuLisp
R6RS→R5RS
ですね 乙と違うんだからね
0026デフォルトの名無しさん
2009/01/14(水) 05:00:33「仕方ない。代わりに貼るか→この分量マジすか」
というコンボを喰らった身としては、同意せざるを得ない。
細かい内容は、テンプレ置き場でまとめれば良いと思う。
0027デフォルトの名無しさん
2009/01/14(水) 06:12:57〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ まピョーん☆
彡、 |∪| /
/ __ ヽノ /
(___)
0028デフォルトの名無しさん
2009/01/14(水) 06:49:51くらえ!つ nil
0029デフォルトの名無しさん
2009/01/14(水) 11:03:20WiLikiあたり借りる?
0030デフォルトの名無しさん
2009/01/14(水) 11:21:19>>2
0031デフォルトの名無しさん
2009/01/15(木) 00:50:240032デフォルトの名無しさん
2009/01/15(木) 07:52:330033デフォルトの名無しさん
2009/01/15(木) 08:45:23次はpractical common lisp読んだらいいのかな
schemeの対応する本はないのかな
0034デフォルトの名無しさん
2009/01/15(木) 09:04:480035デフォルトの名無しさん
2009/01/15(木) 10:10:36昔、飛ばし読みしちゃったので
今度は問題やりながら読んできます
0036デフォルトの名無しさん
2009/01/15(木) 17:23:59★100!と1000!の桁数の出し方★
http://codepad.org/lbITOona
0037デフォルトの名無しさん
2009/01/15(木) 22:59:45このほうがいい。10000!の桁数も楽々
(define (place-of n)
(+ 1 (inexact->exact (floor (* 0.4342944819032518 (log n))))))
http://codepad.org/8evfGr7x
0038デフォルトの名無しさん
2009/01/16(金) 19:14:11(setf 出力 入力)
(with-open-file 変数 ファイル)
だと、出力 入力の順番なのかな?
この辺の例をみてると
http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp11.html
(fun 主要なもの 補助的なもの さらに補助的なもの...)
と定義してるようにも見えるんだけど
0039デフォルトの名無しさん
2009/01/16(金) 23:10:26反例は例えば with-input-from-string は入力が先だし。
まぁ、主要なもの、対象とするものが前のほう、くらいだろうね。
0040デフォルトの名無しさん
2009/01/16(金) 23:53:23誰も言及しないのは何故。
0041デフォルトの名無しさん
2009/01/17(土) 01:26:160042デフォルトの名無しさん
2009/01/17(土) 01:40:010043デフォルトの名無しさん
2009/01/17(土) 01:40:49大前提をぶっ壊すところが
0044デフォルトの名無しさん
2009/01/17(土) 03:00:46S式の無いマクロならDylanがあるし、
プロトタイプベースのOOPならSelfとかがあるじゃん。
むしろ、そういう引用元の概念を、あの歳できっちり理解してるのが末恐ろしいよ。
0045デフォルトの名無しさん
2009/01/17(土) 04:16:340046デフォルトの名無しさん
2009/01/17(土) 15:28:41Ruby以上に世界中のハッカーにインパクトを与えそう。
0047デフォルトの名無しさん
2009/01/17(土) 16:11:52ニュータイプって感じだね。
0048デフォルトの名無しさん
2009/01/17(土) 20:20:320049デフォルトの名無しさん
2009/01/17(土) 21:30:310050デフォルトの名無しさん
2009/01/17(土) 23:55:38素直に理論面とかハードウェアの知識を学んでいったら楽しみだね。
まだだ、まだ終わらんよ!とか言わされちゃうのかなー
0051デフォルトの名無しさん
2009/01/18(日) 00:14:090052デフォルトの名無しさん
2009/01/18(日) 01:22:19アクシズ落とさないでね。
0053デフォルトの名無しさん
2009/01/18(日) 09:45:330054デフォルトの名無しさん
2009/01/18(日) 12:38:12なんのための「Wiki」pediaだよ
0055デフォルトの名無しさん
2009/01/18(日) 12:59:52直しておきますた ノシ
0056デフォルトの名無しさん
2009/01/18(日) 18:08:54goshだとexactな数値のlogがとれなかった
0057デフォルトの名無しさん
2009/01/18(日) 22:18:02他の処理系みた?
Gaucheで数値計算するから・・・
0058デフォルトの名無しさん
2009/01/18(日) 23:06:53普通にとれるだろ
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
0059デフォルトの名無しさん
2009/01/18(日) 23:13:576.559763032876794
gosh> (* 0.4342944819032518 (log 93326215443944152681699238856266700490715968264
38162146859296389521759999322991560894146397615651828625369792082722375825118521
0916864000000000000000000000000))
157.97000365471578
0060デフォルトの名無しさん
2009/01/18(日) 23:17:5151239862902059204420848696940480047998861019719605863166687299480855890132382966
99445909974245040870737599188236277271887325197795059509952761208749754624970436
01418278094646496291056393887437886487337119181045825783647849977012476632889835
95573543251318532395846307555740911426241747434934755342864657661166779739666882
02912073791438537195882498081268678383745597317461360853795345242215865932019280
90878297308431392844403281231558611036976801357304216168747609675871348312025478
58932076716913244842623613141250878020800026168315102734182797770478463586817016
43650241536913982812648102130927612448963599287051149649754199093422215668325720
80821333186116811553615836546984046708975602900950537616475847728421889679646244
94516076535340819890138544248798495995331910172335555660213945039973628075013783
76153071277619268490343526252000158885351473316117021039681759215109077880193931
78114194545257223865541461062892187960223838971476088506276862967146674697562911
23408243920816015378088989396451826324367161676217916890977991190375403127462228
99880051954444142820121873617459926429565817466283029555702990243241531816172104
65832036786906117260158783520751516284225540265170483304226143974286933061690897
0061デフォルトの名無しさん
2009/01/18(日) 23:18:1583448259932660433676601769996128318607883861502794659551311565520360939881806121
38558600301435694527224206344631797460594682573103790084024432438465657245014402
82188525247093519062092902313649327349756551395872055965422874977401141334696271
54228458623773875382304838656889764619273838149001407673104466402598994902222217
65904339901886018566526485061799702356193897017860040811889729918311021171229845
90164192106888438712185564612496079872290851929681937238864261483965738229112312
50241866493531439701374285319266498753372189406942814341185201580141233448280150
51399694290153483077644569099073152433278288269864602789864321139083506217095002
59738986355427719674282224875758676575234422020757363056949882508796892816275384
88633969099598262809561214509948717012445164612603790293091208890869420285106401
82154399457156805941872748998094254742173582401063677404595741785160829230135358
08184009699637252423056085590370062427124341690900415369010593398383577793941097
00277534720000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000)
+inf.0
0062デフォルトの名無しさん
2009/01/18(日) 23:21:43http://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
0063デフォルトの名無しさん
2009/01/18(日) 23:25:550064デフォルトの名無しさん
2009/01/18(日) 23:34:44http://codepad.org/MjooyHH4
0065デフォルトの名無しさん
2009/01/19(月) 11:15:03最後のいくつかの章で図がみえないから欲しかったのに
0066デフォルトの名無しさん
2009/01/19(月) 17:18:170067デフォルトの名無しさん
2009/01/19(月) 20:55:42>> 65 ここから落とせない? 著者公開してるけど.
0068デフォルトの名無しさん
2009/01/19(月) 21:32:16そこのは、例えばFigure 24.1
が見えないよ。他にも見えない図がいくつかあった
0069デフォルトの名無しさん
2009/01/19(月) 21:38:09http://www.lulu.com/content/3060872
こっちから買うかな
何冊かまとめ買いすれば送料安くなんないかな
0070デフォルトの名無しさん
2009/01/19(月) 22:35:330071デフォルトの名無しさん
2009/01/20(火) 00:18:36ttp://www.amazon.com/dp/0130305529/
高いな
0072デフォルトの名無しさん
2009/01/20(火) 22:57:560073デフォルトの名無しさん
2009/01/22(木) 03:10:070074デフォルトの名無しさん
2009/01/22(木) 13:05:510075デフォルトの名無しさん
2009/01/22(木) 14:23:070076デフォルトの名無しさん
2009/01/22(木) 16:32:13イロムサコン・フィヨンセ・コモンリスプ
0077デフォルトの名無しさん
2009/01/23(金) 01:35:12「君もリスプやらないか?」
0078デフォルトの名無しさん
2009/01/23(金) 02:00:30お前、俺のテイルジャンプで、メッセージパッシングしろ」
0079デフォルトの名無しさん
2009/01/23(金) 17:50:520080デフォルトの名無しさん
2009/01/23(金) 21:18:380081デフォルトの名無しさん
2009/01/23(金) 23:24:260082デフォルトの名無しさん
2009/01/25(日) 02:43:490083デフォルトの名無しさん
2009/01/25(日) 03:26:34あらたに統合環境を用意する積極的な理由ってのも無いんだよなー。
欲しいのはデバッガみたいだけど、
仮にデバッガが便利だとしても Scheme にふさわしいデバッガのモデル
は過去事例を研究したところで容易に決められるとは思わんのだよなー。
これだけ長い Lisp の歴史の中でいわゆる「デバッガ」が言及された
ことがそんなにないってのはただの偶然だとでも思ってんだろうか。
0084デフォルトの名無しさん
2009/01/25(日) 06:25:230085デフォルトの名無しさん
2009/01/25(日) 06:30:200086デフォルトの名無しさん
2009/01/25(日) 08:36:47文脈嫁。
>>83 は、GCを考案し、動的言語の先駆けとなったLisp に、デバッガの話が持ち上がらなかったのは、Lispにデバッガが不要だから、と云いたいんだろ。
0087デフォルトの名無しさん
2009/01/25(日) 08:47:360088デフォルトの名無しさん
2009/01/25(日) 09:10:02Schemeの話をLisp系と一般化しないでくれ。Emacs Lispのデバッガはなかなかいい、
CL系は昔から規格に最適化オプションで debug 指定ができたりと、デバッガは
売りにしてたよ。SchemeでもPLTやGuileはがんばってるじゃん。
0089デフォルトの名無しさん
2009/01/25(日) 09:43:29もともとsmalltalk実装のモデルになったような
統合プログラミング環境を持っていたのがLisp。
今はむしろLLみたいな軽い環境が流行りで、
外界とのインターフェースは昔より豊か。
0090デフォルトの名無しさん
2009/01/25(日) 16:54:110091デフォルトの名無しさん
2009/01/25(日) 17:19:030092デフォルトの名無しさん
2009/01/25(日) 17:42:27Kawa, JSchemeでググレカス
0093デフォルトの名無しさん
2009/01/25(日) 18:42:50Smalltalkより前にIDEを持っていたLispってどんなLispだよw
0094デフォルトの名無しさん
2009/01/25(日) 18:46:350095デフォルトの名無しさん
2009/01/25(日) 19:05:550096デフォルトの名無しさん
2009/01/25(日) 19:15:490097デフォルトの名無しさん
2009/01/25(日) 19:23:10TECO+MacLisp
後継のEmacsがSmalltalk-76と同時期。
0098デフォルトの名無しさん
2009/01/25(日) 21:57:10断絶があるのはなぜだろう。
0099デフォルトの名無しさん
2009/01/25(日) 21:58:240100デフォルトの名無しさん
2009/01/26(月) 00:28:22別にどんな主張をしようが構わないが、
「デバッガ」っていう重要なカテゴリ以下を私物化してるのがちょっと……。
あれのどこがGaucheのデバッガの話なのよ?
何で、自分のページとか作って、そこでやらないんだろうね?
0101デフォルトの名無しさん
2009/01/26(月) 11:20:530102デフォルトの名無しさん
2009/01/27(火) 13:43:07ジョジョオ〜
0103デフォルトの名無しさん
2009/01/27(火) 21:30:00common lispの上にscheme作っちゃえばいいのに
0104デフォルトの名無しさん
2009/01/27(火) 23:30:150105デフォルトの名無しさん
2009/01/27(火) 23:39:46俺も使うから。
0106デフォルトの名無しさん
2009/01/28(水) 02:43:480107デフォルトの名無しさん
2009/01/28(水) 03:34:23作らないところが寂しいよな
>もっとお手頃価格でACL売ってくれ。
なんであんなに高いんだろうね?
年間売り上げみてみたいよ。
株主になっても一票そこに投じられそうもないのが悲しいやね
0108デフォルトの名無しさん
2009/01/28(水) 13:46:02あそこは数学も物理も凄いんでしょ?
0109デフォルトの名無しさん
2009/01/28(水) 14:21:330110デフォルトの名無しさん
2009/01/28(水) 16:10:27かわりにロシアンパブ行ってきます。
0111デフォルトの名無しさん
2009/01/28(水) 21:13:51あとまあ、これもある意味予想通りではあるが、LispやScheme、Haskellと言ったあたりは、
結局のところ「語られる」言語であって、「使われる」言語ではないようだ。
HaskellにしろCommon Lispにしろ、近年ではライブラリも相当揃ってきており、
パフォーマンスの面から言っても実用言語として遜色ないものになりつつあるので、個人的には残念なのだが。
0112デフォルトの名無しさん
2009/01/28(水) 21:22:150113デフォルトの名無しさん
2009/01/28(水) 21:52:500114デフォルトの名無しさん
2009/01/28(水) 22:17:450115デフォルトの名無しさん
2009/01/28(水) 22:35:5021世紀になって10年たとうというのにひどいBASICのプログラムが載ってたんだわ
高校生に勉強させるなら
COMETでもMIPSでもいいからアセンブラでやらせるか
BFで難易度高めにするか
LispやHaskelやForthで教養を身につけさせるかすればいいのに
あるいはスパコンのためにFortranを教えるか
0116デフォルトの名無しさん
2009/01/28(水) 22:50:30次々と新たな処理系が開発されるのは、既にある処理系を使いたくないのかもな。
勉強のためだとしても、なんで人のソースを読むことより自分で書くことを選ぶのか。
それが問題だと思うよ。
0117デフォルトの名無しさん
2009/01/28(水) 22:52:420118デフォルトの名無しさん
2009/01/28(水) 22:58:360119デフォルトの名無しさん
2009/01/29(木) 20:26:190120デフォルトの名無しさん
2009/01/29(木) 22:59:040121デフォルトの名無しさん
2009/01/29(木) 23:03:380122デフォルトの名無しさん
2009/01/30(金) 00:02:26あれはなんの冗談なんだろうと思ったな。
釣りじゃないのか、とか日付を確認したりとか。
徐々にその事実が恐ろしくなっていった。
>LispやHaskelやForthで教養を身につけさせるかすればいいのに
お前は俺かw
0123デフォルトの名無しさん
2009/01/30(金) 00:06:090124デフォルトの名無しさん
2009/01/30(金) 06:22:020125デフォルトの名無しさん
2009/01/31(土) 00:58:370126デフォルトの名無しさん
2009/01/31(土) 01:03:150127デフォルトの名無しさん
2009/01/31(土) 05:02:340128デフォルトの名無しさん
2009/01/31(土) 05:15:40……ところで、ここ何のスレだっけ?
0129デフォルトの名無しさん
2009/01/31(土) 15:23:31なんでだろ
0130デフォルトの名無しさん
2009/01/31(土) 16:48:380131デフォルトの名無しさん
2009/02/01(日) 13:40:24を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>
何が問題なのでしょうか
0132デフォルトの名無しさん
2009/02/01(日) 13:44:27またどうせバージョン違うんだろ
0133デフォルトの名無しさん
2009/02/01(日) 14:06:25glibcにOpenBSD由来のstrlcpy(3)はありません。
http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/
から持ってきてリンクしてください。
デストリによってはパッケージで提供されているかも知れませんが。
0134デフォルトの名無しさん
2009/02/01(日) 14:12:090135デフォルトの名無しさん
2009/02/03(火) 04:35:42(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と同じ動作にするにはどう書けば良いでしょうか?
0136デフォルトの名無しさん
2009/02/03(火) 06:59:00「'」(クォート)をつかわず、 (list foo bar) としたら良いのでは。
あるいは `(,foo ,bar) (先頭はバッククォートね)かな。
0137デフォルトの名無しさん
2009/02/03(火) 09:54:45えらい偏った学び方したんだな
quoteはLISPの基礎
0138デフォルトの名無しさん
2009/02/03(火) 13:39:03偏ってない。変数とシンボルを混同するのはLISPの名物。
変数とimmutableな文字列なら、混同することはあまりないのだが。
最近思うんだが、LISPは動的スコープに戻したほうがいいんじゃないか?
変数は常に(eval シンボル)と等価で、関数は常にS式と等価。
静的スコープではこれが成立しない。
0139デフォルトの名無しさん
2009/02/03(火) 14:13:370140デフォルトの名無しさん
2009/02/03(火) 16:24:19'multiple-value-bindについてるクオートがよくわからない.
(defmacro mvbind (&rest args)
(let ((name 'multiple-value-bind))
`(,name ,@args)))
0141デフォルトの名無しさん
2009/02/03(火) 17:07:30(let ((foo 2)
(bar 3))
(mapcar (lambda (arg)
(display (eval arg))) '(foo bar)))
0142デフォルトの名無しさん
2009/02/03(火) 17:31:30かなり偏ってるね
混同するのが名物とか、変な偏見も持ってそうだが
多分>>140-141もお前じゃないか?
きちんとした処理系で基礎から勉強し直した方がいいと思うね
0143デフォルトの名無しさん
2009/02/03(火) 18:38:40そうだね。前スレ372-390でも話題になってたよね。
(list foo bar)
== (list `,foo `,bar)
== `(,foo ,bar)
quasiquoteの分配則では気をつけないとね。
0144デフォルトの名無しさん
2009/02/03(火) 18:43:430145デフォルトの名無しさん
2009/02/03(火) 18:48:15>結果が同じだし
微妙な違いは理解してるのか?
同じ臭いがするんだよ>>138-141はよ。
0146デフォルトの名無しさん
2009/02/03(火) 19:05:170147デフォルトの名無しさん
2009/02/03(火) 19:11:520148デフォルトの名無しさん
2009/02/03(火) 19:15:57それよりmapcarの使い所を間違えてないかね?
処理系変えるとうまく動かないかもよ。
quoteはちゃんと理解した方がいいよ。
>>140
どんだけ頓珍漢なことやってるのかって
最初は気付かないもんだよ。
0149135
2009/02/03(火) 20:15:17もう一度 quote の部分を見直しましたが
まだいまいちわかっていないので
もう一度じっくり読んでみます。
>>148
mapcar の使い方を確認しようと
Revised5 Report on the Algorithmic Language Scheme
を見てみたところ mapcar は乗っていなかったので
map を使うことにしました。
0150デフォルトの名無しさん
2009/02/03(火) 21:12:28'(foo bar)
== (list 'foo 'bar)
となる。
これと>>143を比べると違うことは明白。
(list 'foo 'bar)ではlistの要素はシンボルになっている。>>135
(list foo bar)ではlistの要素は変数になっている。>>136,>>143
0151デフォルトの名無しさん
2009/02/03(火) 21:34:33(equal? '(foo bar) (list 'foo 'bar)) => #t
だけど
(eq? '(foo bar) (list 'foo 'bar)) => #f ; ほとんどの場合
quoteはquoteでlistとは別物(返り値も含めて、書き換え可能かどうか等も)
返ってくる値がequalなだけ
0152デフォルトの名無しさん
2009/02/03(火) 23:03:12評価順序は未規定
だから
(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では関数の引数の評価順さえ未規定
0153デフォルトの名無しさん
2009/02/03(火) 23:52:11>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定
うわ…これ今ごろ知ったよ、ありがとう。つかこの仕様で誰が得するんだろ。
慌てて調べたけど、Gauche は独自仕様で常にリスト内の順番どおり、なのね。
ちょっと安心。
0154デフォルトの名無しさん
2009/02/04(水) 00:06:160155デフォルトの名無しさん
2009/02/04(水) 12:25:14各要素に並行にfがメッセージパッシングされて。
>>138
funarg問題の時代までタイムスリップかよ。
0156デフォルトの名無しさん
2009/02/04(水) 13:04:44(lambda (f g) '(lambda (x) (f (g x))))
こうすればいいんじゃないの?
(lambda (f g) `(lambda (x) (,f (,g x))))
0157デフォルトの名無しさん
2009/02/04(水) 22:50:12quoteが大嫌いな人はPythonやRubyを使う
そんな気がする
0158デフォルトの名無しさん
2009/02/05(木) 00:05:31そんな嫌いになるなんて、これが本当のくぉーつ嫌いってやつか・・・
0159デフォルトの名無しさん
2009/02/05(木) 00:51:16ひたすらlistでS式をこさえてたっけw
0160デフォルトの名無しさん
2009/02/05(木) 03:32:580161デフォルトの名無しさん
2009/02/05(木) 03:40:100162デフォルトの名無しさん
2009/02/05(木) 03:53:31とっくにバッククオートあるよw
0163デフォルトの名無しさん
2009/02/05(木) 04:06:48fexpr形式やmacro形式はあってもバッククォートは無かったぞ
0164デフォルトの名無しさん
2009/02/05(木) 08:52:25現在とは少し記号法が違うが、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
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.5.2566
0165デフォルトの名無しさん
2009/02/05(木) 10:11:520166デフォルトの名無しさん
2009/02/05(木) 10:29:33Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし
0167デフォルトの名無しさん
2009/02/05(木) 10:39:220168デフォルトの名無しさん
2009/02/05(木) 10:57:09ならLisp-85作った人が入れ忘れたんだね
0169デフォルトの名無しさん
2009/02/05(木) 11:05:5280年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。
0170デフォルトの名無しさん
2009/02/05(木) 11:51:350171デフォルトの名無しさん
2009/02/05(木) 16:28:07その関数の引数f,gにシンボルxを引数として渡すと死ねる。
0172デフォルトの名無しさん
2009/02/05(木) 18:05:140173デフォルトの名無しさん
2009/02/05(木) 18:47:23gosh> (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
0174デフォルトの名無しさん
2009/02/05(木) 20:23:370175デフォルトの名無しさん
2009/02/05(木) 21:49:55R6RSは再定義禁止だっけ
0176デフォルトの名無しさん
2009/02/05(木) 21:59:07(define f (letrec ((f ...)) f))
と書けば安全かも
0177デフォルトの名無しさん
2009/02/06(金) 08:10:380178デフォルトの名無しさん
2009/02/06(金) 16:01:07で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?
0179デフォルトの名無しさん
2009/02/06(金) 17:53:52SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね
0180デフォルトの名無しさん
2009/02/06(金) 18:39:030181デフォルトの名無しさん
2009/02/06(金) 19:54:300182デフォルトの名無しさん
2009/02/06(金) 20:48:410183デフォルトの名無しさん
2009/02/06(金) 21:37:03ほれ
0184デフォルトの名無しさん
2009/02/06(金) 23:02:05と避ける
0185デフォルトの名無しさん
2009/02/07(土) 08:31:34ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは
`(foo ,bar)
とはかけなくて、
(` (foo (, bar)))
と書いていたような。
0186デフォルトの名無しさん
2009/02/07(土) 13:41:36(QUOTE X) == (' X)
って書いてたな
0187デフォルトの名無しさん
2009/02/07(土) 14:53:09としてるんですが、関数に別名与えるもっと良い方法はありますか?
0188デフォルトの名無しさん
2009/02/07(土) 15:21:52(define % remainder)
0189デフォルトの名無しさん
2009/02/07(土) 17:06:46気づきませんでした。
ありがとうございます。
0190デフォルトの名無しさん
2009/02/07(土) 19:07:140191デフォルトの名無しさん
2009/02/07(土) 20:08:34CLにはあるかもしれませんけどSchemerだから知らないです。
シンボルのリストを引数に与えるのであれば
グローバル束縛されているクロージャをevalで取り出してeq?して調べられるけど
グローバル変数のリストはどうやって得ればいいかわかりません。
それにローカル束縛も含めるとなると不可能じゃないでしょうか。
0192デフォルトの名無しさん
2009/02/07(土) 20:28:400193デフォルトの名無しさん
2009/02/07(土) 22:01:310194デフォルトの名無しさん
2009/02/07(土) 22:44:150195デフォルトの名無しさん
2009/02/07(土) 22:53:19特にないんじゃないの?
文字列を扱うとめちゃくちゃメモリ食うってのがHaskellの弱点かもしれんけど
今時のマシンだったら何の問題も無いし。
0196デフォルトの名無しさん
2009/02/07(土) 22:56:480197デフォルトの名無しさん
2009/02/07(土) 23:04:030198デフォルトの名無しさん
2009/02/07(土) 23:39:04[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バトル http://www.newspace21.com/mix/btl.php
0199デフォルトの名無しさん
2009/02/07(土) 23:41:500200デフォルトの名無しさん
2009/02/07(土) 23:49:28Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?
0201デフォルトの名無しさん
2009/02/08(日) 00:02:400202デフォルトの名無しさん
2009/02/08(日) 07:17:520203デフォルトの名無しさん
2009/02/08(日) 08:13:10(defun for-eval-then-quote (var)
`(list 'quote ,var))
(setq x 1)
(for-eval-then-quote x)
-> '1
0204デフォルトの名無しさん
2009/02/08(日) 12:37:31えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)
0205デフォルトの名無しさん
2009/02/08(日) 13:23:49間違えました
(eval (for-eval-then-quote x))
->'1
0206デフォルトの名無しさん
2009/02/09(月) 01:08:08言語の発展はゆるやかだ
とか言ってたのどこのどいつだ
0207デフォルトの名無しさん
2009/02/09(月) 01:52:43それ言語じゃなくてライブラリの発展だと思うんだが……。
0208デフォルトの名無しさん
2009/02/09(月) 02:14:28これ読め。
http://pc11.2ch.net/test/read.cgi/tech/1203096230/251
0209デフォルトの名無しさん
2009/02/10(火) 12:06:52[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バトル http://www.newspace21.com/mix/btl.php
0210デフォルトの名無しさん
2009/02/10(火) 13:48:310211デフォルトの名無しさん
2009/02/10(火) 15:30:330212デフォルトの名無しさん
2009/02/11(水) 05:14:36自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))
0213デフォルトの名無しさん
2009/02/11(水) 23:55:21R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?
0214デフォルトの名無しさん
2009/02/12(木) 00:02:23ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。
0215デフォルトの名無しさん
2009/02/12(木) 03:21:33いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー
0216デフォルトの名無しさん
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
あたりを読んでから買えばいいんじゃないでしょうか。
0217デフォルトの名無しさん
2009/02/12(木) 05:46:35SICP読んでみて、自分に合いそうなら買うのがいいとおも。
http://mitpress.mit.edu/sicp/
0218デフォルトの名無しさん
2009/02/12(木) 10:05:250219デフォルトの名無しさん
2009/02/12(木) 10:48:560220デフォルトの名無しさん
2009/02/12(木) 11:11:470221デフォルトの名無しさん
2009/02/12(木) 11:20:35SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。
0222デフォルトの名無しさん
2009/02/12(木) 12:06:25on lispはじっくり読んだが
SICPは問題もやらずに流し読み
0223デフォルトの名無しさん
2009/02/12(木) 20:13:48Scheme を使って解説してる本。
0224デフォルトの名無しさん
2009/02/12(木) 20:19:01え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。
序盤の関数 f(x) の話とか、大学の数学が懐かしいです。
0225デフォルトの名無しさん
2009/02/12(木) 20:22:09SICPをやってもアルゴリズムを勉強したとは言えない。
0226デフォルトの名無しさん
2009/02/12(木) 20:22:39何を解説してるの? w
0227デフォルトの名無しさん
2009/02/12(木) 20:28:22っ人生
0228デフォルトの名無しさん
2009/02/12(木) 20:36:31本のタイトル
0229デフォルトの名無しさん
2009/02/12(木) 20:44:04降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識
0230デフォルトの名無しさん
2009/02/13(金) 01:35:070231デフォルトの名無しさん
2009/02/13(金) 07:26:27なれません。
0232デフォルトの名無しさん
2009/02/13(金) 07:45:20なれます。
就活に有利です。
0233デフォルトの名無しさん
2009/02/13(金) 11:01:41さあ、30歳になるまで貞操を守る作業に戻るんだ
0234デフォルトの名無しさん
2009/02/13(金) 14:39:580235デフォルトの名無しさん
2009/02/13(金) 14:51:530236デフォルトの名無しさん
2009/02/13(金) 15:01:35読めなかったら数学勉強してから再挑戦しましょう
0237デフォルトの名無しさん
2009/02/13(金) 19:19:400238デフォルトの名無しさん
2009/02/13(金) 19:34:560239デフォルトの名無しさん
2009/02/13(金) 19:49:080240デフォルトの名無しさん
2009/02/13(金) 19:50:510241デフォルトの名無しさん
2009/02/13(金) 19:52:390242デフォルトの名無しさん
2009/02/13(金) 19:54:25和田って俺のことだけど。
0243デフォルトの名無しさん
2009/02/13(金) 20:28:130244デフォルトの名無しさん
2009/02/13(金) 22:31:020245デフォルトの名無しさん
2009/02/13(金) 22:34:170246デフォルトの名無しさん
2009/02/13(金) 22:52:020247デフォルトの名無しさん
2009/02/13(金) 22:55:250248デフォルトの名無しさん
2009/02/13(金) 23:02:420249デフォルトの名無しさん
2009/02/13(金) 23:07:080250デフォルトの名無しさん
2009/02/13(金) 23:14:11ってことは、幼稚園で、チュー済ませたタイプか。
0251デフォルトの名無しさん
2009/02/13(金) 23:45:230252デフォルトの名無しさん
2009/02/14(土) 00:48:590253デフォルトの名無しさん
2009/02/14(土) 00:54:550254デフォルトの名無しさん
2009/02/14(土) 01:00:190255デフォルトの名無しさん
2009/02/14(土) 01:05:570256デフォルトの名無しさん
2009/02/14(土) 01:13:100257デフォルトの名無しさん
2009/02/14(土) 01:27:060258デフォルトの名無しさん
2009/02/14(土) 01:28:03それは金属であって宝石ではない(゚д゚)!
0259デフォルトの名無しさん
2009/02/14(土) 01:28:140260デフォルトの名無しさん
2009/02/14(土) 01:32:500261デフォルトの名無しさん
2009/02/14(土) 05:43:570262デフォルトの名無しさん
2009/02/14(土) 09:40:030263デフォルトの名無しさん
2009/02/14(土) 09:44:220264デフォルトの名無しさん
2009/02/14(土) 10:01:490265デフォルトの名無しさん
2009/02/14(土) 11:41:330266デフォルトの名無しさん
2009/02/14(土) 11:43:250267デフォルトの名無しさん
2009/02/14(土) 11:45:160268デフォルトの名無しさん
2009/02/14(土) 12:36:37チョコはいくつもらえましたか
0269デフォルトの名無しさん
2009/02/14(土) 12:38:380270デフォルトの名無しさん
2009/02/14(土) 12:44:260271デフォルトの名無しさん
2009/02/14(土) 12:46:020272デフォルトの名無しさん
2009/02/14(土) 12:50:040273デフォルトの名無しさん
2009/02/14(土) 13:14:52http://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.
これおもしろそうね。
0274デフォルトの名無しさん
2009/02/14(土) 18:38:380275デフォルトの名無しさん
2009/02/14(土) 18:39:220276デフォルトの名無しさん
2009/02/14(土) 22:52:520277デフォルトの名無しさん
2009/02/14(土) 23:11:190278デフォルトの名無しさん
2009/02/14(土) 23:18:170279デフォルトの名無しさん
2009/02/15(日) 00:06:170280デフォルトの名無しさん
2009/02/15(日) 00:43:260281デフォルトの名無しさん
2009/02/15(日) 00:50:070282デフォルトの名無しさん
2009/02/15(日) 00:58:250283デフォルトの名無しさん
2009/02/15(日) 01:02:230284デフォルトの名無しさん
2009/02/15(日) 01:44:310285デフォルトの名無しさん
2009/02/15(日) 17:10:570286デフォルトの名無しさん
2009/02/15(日) 20:27:36何が?
俺は好きだよ?
0287デフォルトの名無しさん
2009/02/15(日) 23:07:400288デフォルトの名無しさん
2009/02/15(日) 23:40:170289デフォルトの名無しさん
2009/02/15(日) 23:54:060290デフォルトの名無しさん
2009/02/15(日) 23:59:140291あぼ〜ん
2009/02/16(月) 00:38:220292デフォルトの名無しさん
2009/02/16(月) 02:11:17navi2chちょっといじればいいだけ
0293デフォルトの名無しさん
2009/02/18(水) 03:08:12http://www.turbozen.com/sourceCode/TinyLisp/
http://programming.nu/
0294デフォルトの名無しさん
2009/02/18(水) 04:15:12((1 2 3) (1 2 3) (1 2 3))
こういう処理にするにはどうすればできますか?
(map + '(1 2 3) '(1 2 3) '(1 2 3))
0295デフォルトの名無しさん
2009/02/18(水) 04:25:470296デフォルトの名無しさん
2009/02/18(水) 04:36:47ありがとうございます!
0297デフォルトの名無しさん
2009/02/19(木) 10:24:17wikiのテンプレに書き加えておいて。
0298デフォルトの名無しさん
2009/02/20(金) 00:27:38があったとして、list1 の各要素を順番に実行していく方法を教えてください。
0299デフォルトの名無しさん
2009/02/20(金) 00:38:32こういう話?
それともこんなのをお望み?
(mapcar #'(lambda (x) (apply (car x) (cdr x))) list1)
0300デフォルトの名無しさん
2009/02/20(金) 00:44:13とかでもいいのか。
0301デフォルトの名無しさん
2009/02/20(金) 01:01:05messageというのが関数なのか?
(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")
0303デフォルトの名無しさん
2009/02/20(金) 05:52:44(let ((list1 '((display "X") (display "Y"))))
(map eval list1))
⇒XY(#<void> #<void>)
0304デフォルトの名無しさん
2009/02/21(土) 01:33:52-> (1 2 3)
となりますが
(cons '(1 2) 3)
-> ((1 2) . 3)
になりますよね
今は (append '(1 2) '(3)) と書いてますが
(cons 1 '(2 3)) に比べて冗長だと感じます
もっと良い書き方はありますか?
0305デフォルトの名無しさん
2009/02/21(土) 01:51:170306デフォルトの名無しさん
2009/02/21(土) 03:11:26(wahacons '(1 2) 3)
0307デフォルトの名無しさん
2009/02/21(土) 05:12:06仕様ですか…。
>>306
関数を書いてしまえば良かったんですね
ありがとうございます
0308デフォルトの名無しさん
2009/02/21(土) 06:25:59quasiquoteは?
> (define x '(1 2))
x
> `(,x 3)
((1 2) 3)
0309デフォルトの名無しさん
2009/02/21(土) 06:28:27> `(,@x 3)
(1 2 3)
0310デフォルトの名無しさん
2009/02/21(土) 23:02:450311デフォルトの名無しさん
2009/02/22(日) 00:35:490312デフォルトの名無しさん
2009/02/22(日) 01:21:09速いなら実装を参考にしよう、とか建設的な意見が出る訳でもなく、
単にSchemeイラネ、だし。
0313デフォルトの名無しさん
2009/02/22(日) 04:20:150314デフォルトの名無しさん
2009/02/22(日) 09:18:440315デフォルトの名無しさん
2009/02/22(日) 09:36:45Luaってのはどういう言語かもよく知らないんだが、
処理系は結構よくできているみたいで遅くはないよ。
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&box=1
0316デフォルトの名無しさん
2009/02/22(日) 14:35:160317デフォルトの名無しさん
2009/02/22(日) 14:36:35[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バトル http://www.newspace21.com/mix/btl.php
0318デフォルトの名無しさん
2009/02/22(日) 14:38:190319デフォルトの名無しさん
2009/02/22(日) 20:43:410320デフォルトの名無しさん
2009/02/22(日) 21:09:19遅くないのは知ってるけど、向こうの話題の発端がそういう話だった。
俺の場合、VCSのmonotoneで組み込まれてて知ったんだけど、
かなり評価高い言語だよね。Adobeとかも採用してるとか。
0321デフォルトの名無しさん
2009/02/22(日) 21:14:550322デフォルトの名無しさん
2009/02/22(日) 22:30:290323デフォルトの名無しさん
2009/02/22(日) 22:38:44CL/scheme はしらんが、どこぞのメーカは
ゲーム開発ベッドで専用 Lisp 使ってなかったっけ?
0324デフォルトの名無しさん
2009/02/22(日) 22:56:50LispやSchemeをゲーム制作に生かしている企業とかはあるみたいだけど、
誰でも分かり易いライブラリだの、特化した処理系だのはないんじゃない?
一応、SDLとかOpenGLとか使ってゲーム作るのは、大抵の処理系で出来ると思うけど。
というか、HSPが話題っていつの話だ。
0325デフォルトの名無しさん
2009/02/22(日) 23:41:31これね。
http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
0326デフォルトの名無しさん
2009/02/23(月) 02:25:210327デフォルトの名無しさん
2009/02/23(月) 02:48:480328デフォルトの名無しさん
2009/02/23(月) 03:01:43実装が多いのが弱点ではないかと。
0329デフォルトの名無しさん
2009/02/23(月) 03:04:340330デフォルトの名無しさん
2009/02/23(月) 06:21:260331デフォルトの名無しさん
2009/02/23(月) 09:01:550332デフォルトの名無しさん
2009/02/23(月) 09:49:25Cより速くなる事は無いと思うけど…
Cで「人間が」書くより速くなる事ならあるかもしれないけど
0333デフォルトの名無しさん
2009/02/23(月) 10:13:08だから
非人間的な行動(コード)だろ?人間が書くCのコードより速いってことじゃ?
0334デフォルトの名無しさん
2009/02/23(月) 12:45:31ただし、継続が使えないとか制限が多いし、コンパイル時間がめっちゃかかる。
>>332
> Cより速くなる事は無いと思うけど…
> Cで「人間が」書くより速くなる事ならあるかもしれないけど
こんなこというやつ初めて見た。
0335デフォルトの名無しさん
2009/02/23(月) 13:00:300336デフォルトの名無しさん
2009/02/23(月) 14:49:32を語るなら、それって実質的にCコンパイラの最適化の差に帰着するじゃん。
コンパイラによってはCから (ほぼ)最小のアセンブリを生成できることだってできるし、
そうすると何をもって「Cのソース」とするのかって話になって、
「Cのソースを吐くんだからCより速いはずがない」 っていう議論は空虚じゃない?
まぁ言い出しておいてアレだけどスレチだな。すまん
0337デフォルトの名無しさん
2009/02/23(月) 15:49:25「同じ問題を解くのに俺様の書いたCよりXXにあるStalinのコードの方が速かった!」
「でも俺様のCのコードがヘボいことはありえない!そんなことは考えられない!」<- これが間違い
「Stalinはどんな魔法を使ってるんだ!スゲーよStalin!」
一部で盛り上がるけどスルーする人も多い。
同じ速度を出すのにStalinを使った方が簡潔に短時間で書けるというのはあると思う。
だからあれほどコンパイル時間がかかってもユーザーは気にしないんじゃないかな。
0338デフォルトの名無しさん
2009/02/23(月) 17:31:09研究とか勉強の材料としてはすごいけど、プロダクションでは使えないから
盛り上がるのは一部にとどまる。
俺は盛り上がった派だけどw
最適化の解説の論文は勉強になった
0339デフォルトの名無しさん
2009/02/23(月) 21:26:10見た目から括弧を無くしていくことって出来ますか?
例えば括弧のない1 + 2を3と評価するとか
for リスト do 処理 done
みたいな構文がmapの意味で動くようにしてみたい
0340デフォルトの名無しさん
2009/02/23(月) 21:34:29まえにどっかでみたことがある。srfiなんとか だったと思う。
0341デフォルトの名無しさん
2009/02/24(火) 01:17:57マクロは関係なかった気がするんだけど、違ったっけ?
0342デフォルトの名無しさん
2009/02/24(火) 06:02:54http://srfi.schemers.org/srfi-49/srfi-49.html
最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
http://lispuser.net/memo/lisp/2006-03-30-23-58.html
0343デフォルトの名無しさん
2009/02/24(火) 12:45:190344デフォルトの名無しさん
2009/02/24(火) 15:44:53「schemeのマクロを使って」も
マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
ただしこの3つをなくするのはRnRSではできない。
処理系によってはリーダマクロをサポートしているのでそれを使うと可。
0345デフォルトの名無しさん
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の拡張で優先順位を計算して括弧を省略ってページなら見つけましたが
そういった話でしょうか?
0346デフォルトの名無しさん
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
0347デフォルトの名無しさん
2009/02/24(火) 20:44:040348デフォルトの名無しさん
2009/02/24(火) 20:44:55> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
> これ非常に興味あるんですが、どういうことでしょうか?
そうゆう reader を作ればいいじゃね?
作るだけだったら誰でも作れると思うし…
0349デフォルトの名無しさん
2009/02/24(火) 20:45:29俺は344じゃないけど、344の言ってることは違う。
344が言ってるのは、「一番その側のカッコがあれば」 ということ。
いちばん外側のカッコは、どう頑張ってもRnRSでは省略不可能。
しかし、一番外側のカッコとマクロ名を許容すれば、
そのマクロの引数を全部自力で解釈すれば、そういうことは可能ということ。
文字通り、言語をもう1つ作るようなもんだけど。
0350デフォルトの名無しさん
2009/02/24(火) 20:46:54○ 一番外側
0351デフォルトの名無しさん
2009/02/24(火) 21:16:51これ面白いなぁ。
引き算は
(calc 1 - 2 - 3)
こう展開されてしまうから
(- 1 (- 2 3))
正しい値にならないね
けど、面白いからちょっと考えてみます
>>349
なるほど、勉強になります。
「マクロ使用を囲う括弧と、マクロ名さえあれば」
というのは、344氏の例でいけば、
一番外側の()とマクロ名であるcalcっていう意味なわけですね
そして、それより内側であれば、がんばり次第で自由自在だ、と。
0352デフォルトの名無しさん
2009/02/24(火) 21:51:260353デフォルトの名無しさん
2009/02/25(水) 02:20:27知的好奇心満たしたいだけなら何も言わんが。
0354デフォルトの名無しさん
2009/02/25(水) 07:19:11Schemeを勉強しようと思っています。
そこで皆様のアドバイスをお願いしたいのですが、どのScheme処理系がお勧めでしょうか?
あまりにもたくさんありすぎて判断できません。
OSはWindows XPです。よろしくお願いします。
0355デフォルトの名無しさん
2009/02/25(水) 08:44:21windows上で勉強目的なら統合環境のほうが楽だろうしPLT schemeで良いんじゃないかな。
さもないなら、linux上でemacs+gauche(日本語の本があるから)とかでも良いように思うん
だけどね。
0356デフォルトの名無しさん
2009/02/25(水) 15:03:43stalinがダメなら
記述力と速度を同時に達成できるのって
ocamleぐらい?
0357デフォルトの名無しさん
2009/02/25(水) 16:11:06記述力も同時に達成できるのはC++しかないんだぜ
0358デフォルトの名無しさん
2009/02/25(水) 16:19:51comp.lang.lisp
でreadable なlisp -> C 変換の話がでてたはずなのに見つからない
0359デフォルトの名無しさん
2009/02/25(水) 16:55:360360デフォルトの名無しさん
2009/02/25(水) 17:34:58テンプレートで遊ぶ分にはそうだけどな
0361デフォルトの名無しさん
2009/02/25(水) 18:16:370362デフォルトの名無しさん
2009/02/25(水) 18:20:23前にoneconleyできない関係で何度も代入評価されてる
「そんなエラー絶対みつかんないだろう」ってエラーがboost関係で報告されてた
0363デフォルトの名無しさん
2009/02/25(水) 19:39:11どっちかっていうと実用的な理由
・タイプ量を減らしたい
・括弧がネストすると、対応が激しくおいづらい
0364デフォルトの名無しさん
2009/02/25(水) 19:48:59むしろ()がある方がタイプ量が減るし、移動が楽ってぐらいになる
逆にエディタの支援が無いとなるとなるほどそれは確かに致命的だ
0365デフォルトの名無しさん
2009/02/25(水) 20:09:55言語の話とは別のような・・
俺もemacsは使ってるが
>()があるほうがタイプ量が減る
それはない
letよりlet1のほうが読みやすいし打ちやすい
0366デフォルトの名無しさん
2009/02/25(水) 20:26:16実用的な理由で括弧を消すのはないだろー。
前者の理由なら、そのために高階関数やマクロがある。
後者の理由なら、そのためにエディタの支援機能がある。
というか、インデントで対応を追うのが普通。
まあ、実際にやってみて、構文を増やす度に複雑化する、
仕様やリーダーマクロのメンテにうんざりしてみれば、
その辺良く分かるとは思うけど。
0367デフォルトの名無しさん
2009/02/25(水) 20:34:54ならエディタは関係あるじゃないか
0368デフォルトの名無しさん
2009/02/25(水) 20:52:060369デフォルトの名無しさん
2009/02/25(水) 20:56:541. insert-parentheses を使ってるかどうか
2. show-paren-mode を使ってるかどうか
3. transient-mark-mode を使ってるかどうか
0370デフォルトの名無しさん
2009/02/25(水) 20:57:00プログラムのコードのタイプ量は減るだろうけど、
編集作業全体のタイプ量は驚きの増加量、って感じになる気がするよ。
S式単位での編集を使わないと、移動に掛かる手間が段違い。
0371デフォルトの名無しさん
2009/02/25(水) 21:03:440372デフォルトの名無しさん
2009/02/25(水) 21:06:15ごきぶりみたいにいうな にがわらひ
370みたいなべてらんもいるけど、C-F C-B C-N C-Pもままならずマウスな初心者も
いるから。
viでもlispモードは普通にあるよ。
0373デフォルトの名無しさん
2009/02/25(水) 21:36:25むしろ1匹しかいない絶滅危惧種扱いの所が多いよ。
0374デフォルトの名無しさん
2009/02/25(水) 22:18:10多いね。日本も亜米利加もね。
0375デフォルトの名無しさん
2009/02/25(水) 23:15:14viper-modeで、viとEmacs両方のキーバインドを同程度に使う変態。
0376デフォルトの名無しさん
2009/02/25(水) 23:19:420377デフォルトの名無しさん
2009/02/25(水) 23:22:130378デフォルトの名無しさん
2009/02/25(水) 23:27:08viper-modeかぁ。15年以上起動したことがない。笑い
0379デフォルトの名無しさん
2009/02/25(水) 23:31:02___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 /
| | | |
0380デフォルトの名無しさん
2009/02/25(水) 23:56:13viperモードたまに使うけど、完全に終了させる方法教えて下さい。
viper-go-away しても別のファイル開いたらまたviperになってて、
仕方ないからemacs毎再起動してる。
0381デフォルトの名無しさん
2009/02/26(木) 02:13:24せっかくなので、ソースコードを読んで原因を探ってきました。
viper-go-awayを呼ぶと、viper.elのviper-remove-hooksで、
仕掛けていた各メジャーモードのフックを解除していくのですが、
コードを見ればお分かりの通り、とても素敵なバグがありまして、
find-file-hooksとかは完全スルーです。
なので、自分でコードを修正するか、本家にフィードバックするか、
俺のようにVIPER常駐野郎になるか選んでください。
0382デフォルトの名無しさん
2009/02/26(木) 04:40:02デフォルトのメジャーモードを元に戻さないってバグもあって、
これが本筋っぽい。CVS最新版では修正されてる。
↓を.emacsに追加でひとつ。
(defadvice viper-go-away (after revert-default-major-mode activate)
(setq default-major-mode 'fundamental-mode))
0383デフォルトの名無しさん
2009/02/26(木) 08:37:29common lispの問題なんだろうか
schemeで書かれてるならbugは少なくなるんだろうか
0384デフォルトの名無しさん
2009/02/26(木) 11:34:140385デフォルトの名無しさん
2009/02/26(木) 19:45:52最初から"Common Lisp"で書かれていたら違っていたかも
Maxima使ってないからよくわからないけど
0386デフォルトの名無しさん
2009/02/26(木) 23:21:25(define (f x)
(define g 10)
(+ x g))
(define (g x)
(let ((h 10))
(+ x h)))
0387デフォルトの名無しさん
2009/02/26(木) 23:29:49> A <body> containing internal definitions can always be converted
> into acompletely equivalent letrec expression.
0388デフォルトの名無しさん
2009/02/26(木) 23:45:33(letrec ((h 10))
(+ x h)))
となら同じ、が正しいのでは?
letとletrecは違う
この例はたまたまコンビネータ式が束縛されているに過ぎない
(正確には式が束縛されているわけではないけど)
0389デフォルトの名無しさん
2009/02/26(木) 23:53:51最終的な機械語に落とす段階では同じコードになる
0390388
2009/02/26(木) 23:57:230391デフォルトの名無しさん
2009/02/27(金) 00:01:31ありがとうございます
自分の知らない、
何か違う意味があるんだろうと思って質問したんですが
letrecと同じ意味なんですね
0392デフォルトの名無しさん
2009/02/27(金) 00:01:490393デフォルトの名無しさん
2009/02/27(金) 00:04:11>>386の例ではletで問題ない。
0394デフォルトの名無しさん
2009/02/27(金) 00:11:24了解です。Schemeってシンプルですね。ありがとうございます
0395デフォルトの名無しさん
2009/02/27(金) 00:20:22編集ミスった。
acompletely→a completely
否定のa-に見えてしまう すまん
0396デフォルトの名無しさん
2009/02/27(金) 10:00:520397デフォルトの名無しさん
2009/02/27(金) 21:31:01遅くなったけどありがとう。これでviperモードと仲良く暮らせそうです。
0398デフォルトの名無しさん
2009/02/28(土) 08:07:260399デフォルトの名無しさん
2009/02/28(土) 09:35:380400デフォルトの名無しさん
2009/02/28(土) 09:36:030401デフォルトの名無しさん
2009/02/28(土) 18:05:35って今ごろ気付いたorz
0402デフォルトの名無しさん
2009/02/28(土) 23:49:13ニコニコ動画辺りに上げてくれないかあ
0403デフォルトの名無しさん
2009/03/01(日) 20:33:59マイリスト Shibuya.lispテクニカルトーク#2‐ニコニコ動画(ββ)
http://www.nicovideo.jp/mylist/11305224
0404デフォルトの名無しさん
2009/03/01(日) 20:48:540405デフォルトの名無しさん
2009/03/01(日) 20:57:15マジでありがとう!!
0406デフォルトの名無しさん
2009/03/02(月) 01:21:33学会で代用してるからなのだろうか
0407デフォルトの名無しさん
2009/03/02(月) 01:33:04勉強会ならあるけどな。
0408デフォルトの名無しさん
2009/03/02(月) 05:19:41あー、配信のときとは別テイクで音声がずいぶん聞きやすくなってる!
ありがとうございます。
0409デフォルトの名無しさん
2009/03/02(月) 10:57:50HaskellとかOCamlだと人がそんなにまだ多くないし(Lispに比べれば)、
ゲーム作りましたみたいな大きいネタとか、その筋なら誰でも知ってる大先生とか
そういうのないからねぇ。
さがせば>>407が書いてるみたいに勉強会とかあるからメイリングリストとか
入ってみれば? 今時捨てアドのひとつやふたついくらでも作れるし。
0410デフォルトの名無しさん
2009/03/02(月) 17:06:35やはり、川合さんとか、処理系製作者が3人もいるくらいだからね。
common lispは人は少ないよ。Qiやclojure,newLispに至っては壊滅的。
そーいえば、abclがバージョンアップしてたな。
0411デフォルトの名無しさん
2009/03/02(月) 17:12:46#lisp 250
#haskell 550
#ocaml 50
#scala 50
#clojure 100
#ruby 250
くらいみたいだね。haskellがなんでこんなに多いんだ?
0412デフォルトの名無しさん
2009/03/02(月) 18:35:370413デフォルトの名無しさん
2009/03/02(月) 22:33:36自分はLispが全然書けないけど、どんだけ短くなるのか見てみたいです。
どなたお願いします〜
0414デフォルトの名無しさん
2009/03/03(火) 00:34:29Qiというものを始めて知りましたが、Haskellっぽくて面白そうですね。
ところで皆さんはこういった面白い実装の情報をどこで得てるんでしょうか?
英語のメーリングリストなのかな?とは思ってるんですが・・・
0415デフォルトの名無しさん
2009/03/03(火) 01:00:31それはねぇ。。。こまめに調べてるだけよ。ふふふ。。。lisperがあつまる日本語のチャット
も情報源だよ。
うんQiはHaskellっぽいね。
0416デフォルトの名無しさん
2009/03/03(火) 01:13:41これがメリケンだ!?
0417デフォルトの名無しさん
2009/03/03(火) 02:06:13made with secret alien technologyのシャツが無いなんて信じられん
0418デフォルトの名無しさん
2009/03/03(火) 03:44:570419デフォルトの名無しさん
2009/03/03(火) 03:50:50高速化って書いてるから期待したのに
0420デフォルトの名無しさん
2009/03/03(火) 04:18:51(use srfi-1)
(define request '((hoge . 1) (fuga . 2) (piyo . 3)))
(filter (lambda (x) (member (car x) '(hoge fuga))) request)
とか
0421デフォルトの名無しさん
2009/03/03(火) 08:26:08Planet LispってRSSあるよ。
0422デフォルトの名無しさん
2009/03/03(火) 09:50:56おおっ、有り難うございます!! さっそくGoogle Readerに追加しました。
0423デフォルトの名無しさん
2009/03/03(火) 12:07:00(map (cut assoc <> request) '(hoge fuga))
0424デフォルトの名無しさん
2009/03/03(火) 12:13:580425デフォルトの名無しさん
2009/03/03(火) 13:20:03(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)
とくに簡潔ではないな。
0426デフォルトの名無しさん
2009/03/03(火) 21:48:35(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))
0427デフォルトの名無しさん
2009/03/03(火) 22:07:54(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))))))
0428デフォルトの名無しさん
2009/03/03(火) 22:08:27(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))))))
0429デフォルトの名無しさん
2009/03/03(火) 23:19:22おお、神よ。なるほど、(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];;
0430デフォルトの名無しさん
2009/03/03(火) 23:23:52サンクス。今の自分じゃ全然理解できないけどorz
0431デフォルトの名無しさん
2009/03/03(火) 23:25:520432デフォルトの名無しさん
2009/03/03(火) 23:28:26`(,mujunritu ,haityuritu)または(list mujunritu haityuritu)
'(mujunritu haityuritu)との違いわかるかな
0433前きたquote判ってない人
2009/03/03(火) 23:55:18別人です。あれからROMしかしてないですよ。
0434デフォルトの名無しさん
2009/03/05(木) 00:52:37Lisp属の初心者には、このあたりは難しすぎます
調べるのは本当に大変でしたが、何とか見つかりました
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^)/
しかし、関数はおいといて、この考えでたぶん、大丈夫ですよね?
0435デフォルトの名無しさん
2009/03/05(木) 01:20:53つ「eval」
0436デフォルトの名無しさん
2009/03/05(木) 02:00:080437デフォルトの名無しさん
2009/03/05(木) 02:12:510438デフォルトの名無しさん
2009/03/05(木) 02:50:43プログラム内でそのシンボルに何が束縛されているかとは基本的に全く関係ない。
0439デフォルトの名無しさん
2009/03/05(木) 07:25:510440デフォルトの名無しさん
2009/03/05(木) 12:06:53名前として使われる。また、プログラムを実行するには変数の位置を
表現できれば名前のような冗長な情報は必要ない。
よって名前は実行前のある時点でアドレスに変換されていると考えるべき。
evalやCLのsymbol-functionみたいな実行時にシンボルからその位置情報へ
変換する仕組みを作るとなると、処理系のインタプリタやコンパイラ相当を
必要時に起動するのと全く事になり、非常に馬鹿げたコストが掛かる。
0441デフォルトの名無しさん
2009/03/05(木) 12:13:45evalはともかくquoteはこの件と関係ない
0442デフォルトの名無しさん
2009/03/05(木) 13:16:24文章として突っ込みどころ多すぎw
内容的にも、後段のsymbol-functionについては、
特殊オペレータのfunctionと勘違いしているとしか思えない。
(defun foo ()
(print 'foo))
(flet ((foo () (print 'foolet)))
(foo)
(funcall (function foo))
(funcall (symbol-function 'foo))))
FOOLET
FOOLET
FOO
0443デフォルトの名無しさん
2009/03/07(土) 12:49:38やっと>>422の言っていることがわかった
symbol-functionってグローバルな関数定義しか参照しないんだな
0444デフォルトの名無しさん
2009/03/07(土) 13:48:24やっぱ Common Lisp 最強だな!
0445デフォルトの名無しさん
2009/03/07(土) 14:16:03(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の結果を使う。
0446デフォルトの名無しさん
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もそんなにコストかからんぜ、ってこと?
0447デフォルトの名無しさん
2009/03/07(土) 17:43:08442,445はCommon Lispのコードっていうのは分かってる?
> ・evalは静的スコープにはふさわしくない
これは俺も何が言いたいのかさっぱりわからんというか、
はっきり言って間違い。反証はScheme。
0448デフォルトの名無しさん
2009/03/07(土) 19:15:47はLisp1.5世代の人の意見なのかな。
0449デフォルトの名無しさん
2009/03/07(土) 20:28:140450デフォルトの名無しさん
2009/03/07(土) 21:07:27避けるところだと思うよ。避けないとすれば腕の悪い人という印象しかないな。少な
くとも他の方法を探すだろう。
0451デフォルトの名無しさん
2009/03/08(日) 10:41:580452デフォルトの名無しさん
2009/03/08(日) 15:39:34データ
[]
program
()
のカッコをわけたらlispの意味ないとは思わなかったんだろうか
0453デフォルトの名無しさん
2009/03/08(日) 16:21:06マクロでできることはevalでもできるみたいな言い方だな
第一印象はそんなものだろうけど
それをいつまでも引きずっていていいのかな?
0454デフォルトの名無しさん
2009/03/08(日) 16:40:180455デフォルトの名無しさん
2009/03/08(日) 16:49:100456デフォルトの名無しさん
2009/03/08(日) 17:11:360457デフォルトの名無しさん
2009/03/08(日) 18:36:31これで動くよ
何が言いたいのかわからんが
0458デフォルトの名無しさん
2009/03/08(日) 19:00:31>>443
>symbol-functionってグローバルな関数定義しか参照しないんだな
と同じことがevalにも言えるということ。
evalは外側のローカル変数xの定義を参照できないから
>>457では、事前にxのところを値で置き換えたものをevalに渡している。
0459デフォルトの名無しさん
2009/03/08(日) 19:58:27関数の引数として渡されたコンテクストで評価するしかない。
それを知らせる手段として(current-environment)みたいなものが
処理系にあればやりたいことは実現できるんじゃないか。
0460デフォルトの名無しさん
2009/03/08(日) 20:13:48Common Lispでは、
(defvar x 1)
(print (eval '(+ x x)))
2
(let ((x 10))
(print (eval '(+ x x))))
20
Schemeのevalは渡された環境への変更に制限もあるよね。
;; R5RSとR6RSで少し違う
0461デフォルトの名無しさん
2009/03/08(日) 21:10:14(print (eval '(+ x x))))
*** - EVAL: variable X has no value
0462デフォルトの名無しさん
2009/03/08(日) 21:15:34最初のdefvarでxをスペシャル変数にしてるから。
schemeで同じことをする場合はfluid-letを使う。
(define x 1)
(display (eval '(+ x x)))
2
(fluid-let ((x 10))
(display (eval '(+ x x))))
20
x
1
0463デフォルトの名無しさん
2009/03/09(月) 08:01:39たとえば、
http://en.wikipedia.org/w/api.php?action=query&meta=siteinfo&siprop=namespaces
と同じことをしたいのですが(これはGETメソッド)、
(let* ((url (string->url "http://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)
でいけると思ったのですが、エラーメッセージが帰ってきます。
どこがまずいのでしょうか?
0464デフォルトの名無しさん
2009/03/09(月) 08:57:46せっかくなのでR5RSかR6RS準拠のパーサを書いてみようと思ったんだが
全体のBNFのリストってどこかにまとまってる?
仕様書をざっと見した感じでは、
ばらばらにちょっとずつBNFが載っているように感じるんだが
仕様書ってのはこんな感じのもん?
0465デフォルトの名無しさん
2009/03/09(月) 09:02:30まぁLispでBNFもくそもないが。
0466デフォルトの名無しさん
2009/03/09(月) 17:51:26構文の定義はこんな感じのレイヤになってる。
(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はその木構造だけを見る。
0467デフォルトの名無しさん
2009/03/09(月) 18:22:02>>466で言うと(1)と(2)が一体。
ただ演算子多重定義出来る言語じゃないと、
見た目がシンプルにならない。
0468デフォルトの名無しさん
2009/03/09(月) 20:48:06それは知ってるんだが、要点はそこじゃなくて(2)と(3)が分離してるってとこ。仕様からして。
>>464 は言語構文のBNF定義がまとまってないってことに違和感を覚えたわけだろ。
(1)-(3)までまとめて書くことはできると思うがきれいになるかな?
0469デフォルトの名無しさん
2009/03/09(月) 21:39:11内部表現的には変える必要ない上に、
read/evalの分離構造ともマッチしているから、
あえて混ぜる必要はないと思う。
>>449
そういえばEuLispにはevalがなかったな。
おもしろい試みだったけどあっさりと廃れたね。
YooTooはまだ更新されているみたいだけど。
R6RSのmoduleも一部影響受けてるね。
0470デフォルトの名無しさん
2009/03/10(火) 06:01:07このコードで動きます。
(let* ((url (string->url "http://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だと認識してくれないようです。
0471デフォルトの名無しさん
2009/03/10(火) 23:41:18ありがとう。こういうもんか
特に466の説明はとてもわかりやすい。
R5RSのほうはBNFついてそうだから
こっちやってみよかな
しかし、PDFって扱いにくいわ
<hoge>って表記をテキストでコピペするとhhogeiになるし
<で検索できんから不便
0472デフォルトの名無しさん
2009/03/11(水) 05:03:58"foo.txt" -> "foo"
"foo.bar.txt -> "foo.bar"
といった風に取得したいのですが
自分で書くなら
一文字ずつ後ろから文字比較して . が来るまで探して
その部分を削除。とするんですが
もし既にあるなら書くのも悲しいので
どなたかご存知ありませんか?
0473デフォルトの名無しさん
2009/03/11(水) 05:37:460474デフォルトの名無しさん
2009/03/11(水) 05:49:52http://www.lispworks.com/documentation/HyperSpec/Body/f_pn_hos.htm
0475デフォルトの名無しさん
2009/03/11(水) 06:47:07レスありがとうございます。
環境を書いていませんでした申し訳ありません。
R5RSで行うにはどうすれば良いでしょうか?
0476デフォルトの名無しさん
2009/03/11(水) 07:39:050477デフォルトの名無しさん
2009/03/11(水) 08:52:040478472
2009/03/11(水) 09:17:26ありませんか…。
仕方がないので自分で書いてみました。
もうちょっとすっきり書けないもんかと思うんですが
今の自分にはこれが限界でした。
(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)))))
0479デフォルトの名無しさん
2009/03/11(水) 11:47:54SRFI 13 使えばいいんじゃね
(let ((i (string-index-right s #¥.)))
(if i
(substring s 0 i)
s))
0480デフォルトの名無しさん
2009/03/11(水) 14:19:19(my-basename "foo.txt") => "foo.txt"
(my-basename "foo.txt" #t) => "foo"
(my-basename "/foo/bar.txt") => "bar.txt"
みたいな
472の例はgaucheではpath-sans-extensionという手続きが割り当てられている
0481デフォルトの名無しさん
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
を可能にしたいのです。
0482デフォルトの名無しさん
2009/03/11(水) 16:09:20処理系は?
0483デフォルトの名無しさん
2009/03/11(水) 16:16:34gaucheです
0484デフォルトの名無しさん
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使わないとだめかも。
0485デフォルトの名無しさん
2009/03/11(水) 19:37:09それだとクラス内に辞書を確保して、
setterとgetterをスロット操作のようにエミュレートするってことですね。
なるほど〜
ありがとうございます。
ところで、Gauche本やリファレンスを見てもMOPの使い方がいまいち分からないのですが、
MOPを使うとどのようなソースになるのでしょうか?
よかったら教えてください。
よろしくお願いします。
0486472
2009/03/11(水) 22:12:20こういうライブラリがあるんですね、紹介ありがとうございます。
ただ、これだけのためにライブラリ入れるのも何なんで
もう少し難しい文字列処理が必要になったら入れることにします。
>>480
そうですね、確かに言われてみれば。
名前は変えることにします。
0487デフォルトの名無しさん
2009/03/12(木) 01:34:42(expand S)とすると
(fun x (fun y (fun z ((x z) (y z)))))
が返ってくるような関数orマクロを作ろうとしたら
実質インタプリタを作るようなもんでしょうか?
もし楽な方法(特定の処理系の拡張機能etc)等があるのであれば知りたいです
0488デフォルトの名無しさん
2009/03/12(木) 08:19:24git
svn
cvs
0489デフォルトの名無しさん
2009/03/12(木) 08:23:19darcs
0490デフォルトの名無しさん
2009/03/12(木) 08:28:28git
0491デフォルトの名無しさん
2009/03/12(木) 09:14:180492デフォルトの名無しさん
2009/03/12(木) 11:02:23組合せ問題、経路問題などの、記号処理問題をリストを使って解決するのに
相応しい言語を教えてください。
環境はできるだけ特定のOSに限定されない方が結構です。
グラフ表示は別の専門家が扱うのでロジック部分のみです。
0493492
2009/03/12(木) 11:15:29つもりでした。直前にこのスレを確認していたのでpasteされたURLがここになって
いました。
このスレの方々は それはSchemeだ! っておしゃいますよねw
0494デフォルトの名無しさん
2009/03/12(木) 11:16:25boost::graph
0495デフォルトの名無しさん
2009/03/12(木) 11:54:50「リストを使って解決するのに相応しい」って、その質問がすでにLISPを想定しているとしか。その名も、LISt Processer。
昔は人工知能を書くために使われていたので、ターゲット分野的にもぴったり。
LISPをはずすなら、Haskellかなぁ。
ただ、Haskellはマルチバイト文字の処理周りが痛いらしい。
0496デフォルトの名無しさん
2009/03/12(木) 12:03:130497デフォルトの名無しさん
2009/03/12(木) 16:25:52今図書館で借りっぱなしで催促の電話が何度もかかってる。
忙しくて読めなかったんです。
この場を借りて予約入れてる人に謝るよ。
0498デフォルトの名無しさん
2009/03/12(木) 16:33:29(require :pythononlisp)
(py::py "import noodletimer;noodletimer.noodletimer")
0499デフォルトの名無しさん
2009/03/12(木) 16:43:28Qiをdumpしてlispから呼ばせるにはコードいじれって書いてある
自動でできないものなんだろうか
0500デフォルトの名無しさん
2009/03/14(土) 03:25:49これは、慣れだね
生産効率性については、まだよくわからないけど
0501デフォルトの名無しさん
2009/03/14(土) 05:23:24練習問題 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))))))
0502デフォルトの名無しさん
2009/03/14(土) 06:56:30(define (remove x ls)
(cond
((eq? x (car ls)) (cdr ls))
(else (cons (car ls) (remove x (cdr ls))))))
0503502
2009/03/14(土) 08:50:42ls の中に x が二回以上出る場合はこうだ。
(define (remove x ls)
(cond
((null? ls) '())
((eq? x (car ls)) (remove x (cdr ls)))
(else (cons (car ls) (remove x (cdr ls))))))
0504デフォルトの名無しさん
2009/03/14(土) 08:58:47突っ込もうと思っていました
最初のは、(remove 5 '(1 2 3 2))でもコケますね
ヒントで実装までできました
ありがとうございました
0505デフォルトの名無しさん
2009/03/14(土) 19:18:21http://www.unixuser.org/~euske/doc/python/python-lisp-j.html
0506デフォルトの名無しさん
2009/03/14(土) 20:54:29スタックのデータはグローバル変数に置くのが普通ですか?
出来たらクロージャとかに閉じ込めたいのですが
引数を2個にして1個目でpush/pop判断だとpopの時は引数が一つ無駄だし
個別にクロージャを使うと環境が別々になるし。
Gaucheのオブジェクト指向拡張とかだと綺麗にかけるんでしょうかね
他に思いつくのは、モジュールを作って
そこにスタック本体のデータを置くとかですが
どれが良いと思いますか
環境はGauche0.8.14です
0507デフォルトの名無しさん
2009/03/14(土) 21:08:090508デフォルトの名無しさん
2009/03/14(土) 21:21:08(define pop cdr)
(define push cons)
じゃまずいですか?
0509デフォルトの名無しさん
2009/03/14(土) 21:40:07例外処理の項目の数値が未だに信じられない
0510デフォルトの名無しさん
2009/03/14(土) 21:52:51スタックをリストとして直接触らせたくないってことなんじゃね?
まぁ、Gauche の OO 関連はそんなに効率が良くないので、
クロージャに閉じ込める方がまだ無駄は少いかもね。
0511デフォルトの名無しさん
2009/03/14(土) 22:01:34> まぁ、Gauche の OO 関連はそんなに効率が良くないので、
> クロージャに閉じ込める方がまだ無駄は少いかもね。
くわしく
なにと比べて?
効率って生産効率?
0512デフォルトの名無しさん
2009/03/14(土) 22:06:56想像だけど、破壊的更新をしたいじゃないの?
オブジェト志向なら、
a = stack.pop()
stack.push(b)
…
とか書くわけジャン。
0513デフォルトの名無しさん
2009/03/14(土) 22:14:32速度とかメモリ効率とか。
メソッドのディスパッチも基本的には実行時にしか出来ないし。
どうでもいいけど、アンカ間違ってるぞ。
速度的には検証していないけど、
なんとなく>>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)))))
0514デフォルトの名無しさん
2009/03/14(土) 22:23:34なんか話がかみ合わないと思ったら・・そういうことか、理解しました
自分がやりたかったのは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)
0515デフォルトの名無しさん
2009/03/14(土) 22:43:02(規制されてて書き込みのタイミングが悪かったのですが・・)
そういえば、Schemeのライブラリは、こういう形のほうが多いですね
参考にさせてもらいます
ありがとうございました
0516デフォルトの名無しさん
2009/03/14(土) 23:03:47top, pop, pushと三つに分けるのが主流だよ。
もはやイディオムになっているといっていい。
0517デフォルトの名無しさん
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))))
0518デフォルトの名無しさん
2009/03/15(日) 00:10:580519デフォルトの名無しさん
2009/03/15(日) 00:11:52あとemptyっていうのも重要っぽいね
0520デフォルトの名無しさん
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)])
括弧の意味の多重化 (中段)
http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3aS%E5%BC%8F%E3%81%AE%E7%90%86%E7%94%B1
0521デフォルトの名無しさん
2009/03/15(日) 03:12:22意味がある試みとは思えない。
0522デフォルトの名無しさん
2009/03/15(日) 03:32:550523デフォルトの名無しさん
2009/03/15(日) 04:59:08演算子を含む式と文とのバランスが良く、
メリハリが付くからだと思う。
LISPは書式が関数も式も文も全く同じ規則で
さらにそれを括る括弧に極端に縛られる。
C言語でも関数呼び出しだけで書いていけば
同じ印象になるが、C言語では関数のネストなんて
書こうと思わなければほとんどする必要がない。
要するに括弧の形を変えたところであまり効果はない。
S式ベースでうだうだ考えるよりは、括弧に縛られない
都合の良い構文フロントエンドを作った方がマシである。
0524デフォルトの名無しさん
2009/03/15(日) 05:20:32処理系によっては()[]{}の3種類が使えるから、数学の式を書くときみたいな感覚で。
0525デフォルトの名無しさん
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式というより、前置記法では解決できない問題と認識している。
0526デフォルトの名無しさん
2009/03/15(日) 05:46:04ここで、aをマクロ的に加工して実装してしまう事も考えられる。
が、それが現実的ではない事も判っている。
自分で演算子を作り、管理するのと同じ事になる。
0527デフォルトの名無しさん
2009/03/15(日) 05:58:26S式内で独自言語を構築する場合、
独自言語の構文としての括弧もあるので、
S式のくくりの括弧がどうしても邪魔に見える。
ここまでやるならもうS式である意味がない。
a->b->cと書きたいならそのまま書けばいい。
0528デフォルトの名無しさん
2009/03/15(日) 06:25:55ちゃんぽん言語でも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(); }
0529デフォルトの名無しさん
2009/03/15(日) 06:54:38人間のパターン認知力なのか、人間の適応力のすごさ、慣れなのか、よくわからないけど
今のままのほうがいい気がする
基本レベルの正規表現が使える人で、schemeを100時間触ってみて、それで真っ当な意見を聞きたいかも
みんな、「このまままでいいんじゃねえ?」って言いそう
採用する理由になった論文の疑似コードもみてみたいところだが
0530デフォルトの名無しさん
2009/03/15(日) 07:12:55refが関数なら、(define ref* (lambda x (fold ref (car x) (cdr x))) で
(ref* a 'b 'c) って書けるんじゃない。
つか一般に二項演算子があるならfoldしてやりゃ不定長でも扱えるでしょ。
マクロならマクロでくるんでやればいいだろうし。
まあquoteは必要だけど、それは別の話だよね。
0531デフォルトの名無しさん
2009/03/15(日) 07:43:20昔の Lisp の論文とかには M 式ってあったね。
http://en.wikipedia.org/wiki/M-expression
Scheme の方だと SRFI 49 で I 式っていうのが提案されてる。
http://srfi.schemers.org/srfi-49/srfi-49.html
正規表現云々は知らないが、どっちもあまり流行ってない。
0532デフォルトの名無しさん
2009/03/15(日) 10:10:46安定したら手書きの parser を使うという話を聞いたことがある。
lisper は逆に yacc より更に柔軟な方向に進もうとするのか。
0533デフォルトの名無しさん
2009/03/15(日) 10:31:030534デフォルトの名無しさん
2009/03/15(日) 11:54:13マクロを忘れてるぜ。
コードがS式だからマクロ変換子は単なるリスト操作をすれば済むんだろう。
Scheme のマクロは単なるリスト操作じゃないけど、S式は大前提だ。
リーダーマクロにしたところで、内部的にはやっぱりS式だしな。
0535デフォルトの名無しさん
2009/03/15(日) 12:13:450536デフォルトの名無しさん
2009/03/15(日) 21:58:23(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"
0537デフォルトの名無しさん
2009/03/15(日) 21:58:57In 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]
0538デフォルトの名無しさん
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>
0539デフォルトの名無しさん
2009/03/15(日) 22:58:47トップレベルプリンタが同一オブジェクトを複数回出力しないだけの問題では?
0540デフォルトの名無しさん
2009/03/16(月) 02:04:38どういう意味ですか?
自分なりに解釈して、やってみたけど、ダメでした
0541デフォルトの名無しさん
2009/03/16(月) 04:02:54>>539 の言っているのは gosh の出力についてだね。
guile のエラーについては式が guile にちゃんと渡されてない感じがする。
プロンプトが複数回表示されてるあたり、
式が複数に分割されて渡されている形になってそうなんだけど。
gosh だと C-x C-e でちゃんと動いてるのかな。
0542デフォルトの名無しさん
2009/03/16(月) 06:02:16タブによるインデント構造をつくるとこのエラーになるみたいです
スペースに置換してみたら、通りました
おとといまでは、普通に使えていた気がしたので、謎です
特別な設定をしたとしたら、メニューバーのschme欄をちょっと触ったときなのかな
触ったあとに特別不都合は、なかった気がしたけど
>>541
> >>539 の言っているのは gosh の出力についてだね。
把握しました
> gosh だと C-x C-e でちゃんと動いてるのかな。
もちろん、そうです
ドキュメント関係とデバッグ関係が整備されていそうなguileで行きたいんですよね
言語に慣れていないレベルなので、文字列処理関係は、まだ先っぽいので
気に掛けてくださったみなさま、お世話になりました
0543デフォルトの名無しさん
2009/03/16(月) 07:18:20readlineが悪さをしてる予感
emacsで使うときはactivate-readlineを無効にしたらどうでしょう
0544デフォルトの名無しさん
2009/03/16(月) 09:56:12本当だ
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を眺めてみることにします
0545デフォルトの名無しさん
2009/03/16(月) 16:32:24それと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に対する利点:速い。日本語のドキュメントが多い。マルチバイト文字がサポートされている。
0546デフォルトの名無しさん
2009/03/16(月) 22:37:55scheme, 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")))
0547デフォルトの名無しさん
2009/03/16(月) 22:43:57(or (string=? "dumb" (getenv "TERM")) (activate-readline))
とか書けばいいんじゃないかな
(run-schemeのときは環境変数TERMがdumbに設定されるから)
0548デフォルトの名無しさん
2009/03/16(月) 22:59:01.guileに書かないでおいて、シェルから直にguileを起動しただけ
手動で評価してもいい。
$ guile
guile> (activate-readline)
guile>
scheme、lisp関連の設定といっても自分は.emacsくらいですね。
ttp://karetta.jp/book-node/gauche-hacks/004682などを参考にするといいと思います。
0549デフォルトの名無しさん
2009/03/16(月) 23:11:27なるほど、readline が \t を食っちゃうのか。
知らないと意外とはまりそうだな。覚えておこう。
0550デフォルトの名無しさん
2009/03/16(月) 23:26:150551デフォルトの名無しさん
2009/03/17(火) 00:01:45そういう場合はPLTとかに行きそうなもんだけど。
0552デフォルトの名無しさん
2009/03/17(火) 00:26:21コンソール時
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がいっぱいひっかかりますね
0553デフォルトの名無しさん
2009/03/17(火) 00:47:53guileはGNU標準でポータビリティは高いんだけど動作が遅くてスタックが(標準では)少ない。
入門用ならばR5RS規格に最も厳格にマッチしている上にguile以上のポータビリティがあるScheme48もお勧め。
自分はGauche>>guile>Scheme48の順に使ってます。
マクロの種類で言えば
Gauche:syntax-rulesマクロ、伝統的マクロ
guile:syntax-rulesマクロ、syntax-caseマクロ、伝統的マクロ、リードマクロ
Scheme48:syntax-rulesマクロ、明示的改名マクロ
なのでguileが最も充実してますが。
0554デフォルトの名無しさん
2009/03/17(火) 04:34:29gaucheにはhelp関数は無いけどinfo関数というのがある。
ただ、表示されるのが「その関数を含むinfoの1ページ」なのでちょっと面倒。
emacsから使ってるなら、カーソルのある関数のinfoエントリを一発で*info*バッファに
表示するelispが昔MLに流れたことがあった気がする。
0555デフォルトの名無しさん
2009/03/17(火) 04:57:19なんだかんだでhyperspecとslimeが使いやすいやね
0556552
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って聞きますね
もうちょっとしたら、導入してみます
0557デフォルトの名無しさん
2009/03/17(火) 08:05:53guile> (getenv "TERM")
"dumb"
ってなりませんでしたか?
guile> (getenv "TERM")
"emacs"
なら"dumb"を"emacs"でいいですけど…
0558デフォルトの名無しさん
2009/03/17(火) 09:22:34shellモードもrun-schemeモードも"emacs"と返りますね
infoドキュメントでがんばって、勉強しているんですが
けっこう大変ですね
基本的なlet, set, lambda関連の記述の仕方は、わかるんですが
ちょっと複雑になると理解しにくい・・・
0559デフォルトの名無しさん
2009/03/17(火) 10:39:23絶望した!横文字をウェブ全体から検索した結果に絶望した!
0560デフォルトの名無しさん
2009/03/17(火) 13:28:37先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。
わからない所はこことかに具体的にドシドシ書きこむと
さらに後に続く人の為にもなるでしょう。
0561デフォルトの名無しさん
2009/03/17(火) 19:17:54> infoで勉強する心意気は結構ですけど
> 先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。
infoで勉強するのが今回の目的だったりするんですよね
あとguileは、なにができるだ(どういう機能があるの?)というのも速く知りたいから、
とりあえず、なぞっているのもあります
もちろん、Schemeの学習階段的には、日本語の入門サイトは有用ですね
英語圏の人は、infoだけで事足りるのか、プログラミング経験度を前提しているのかとか
0562デフォルトの名無しさん
2009/03/17(火) 22:17:23そんな完璧な文書があると思うか?
あるわけねーだろ
完璧を目指すのはいいが少しずつ地道に改善していくしかない
ちなみに、アジャイルとかなんとか言われるようになる以前は
一発で完璧なものが作れると思ってる奴がたくさんいたとかいないとか
0563デフォルトの名無しさん
2009/03/18(水) 02:46:26完璧な文書だとは、思わないけど
十分な文書だと思うよ
0564デフォルトの名無しさん
2009/03/18(水) 12:35:17schemeは2chの過去スレが検索にかかることが多い
この違いは何?
0565デフォルトの名無しさん
2009/03/18(水) 12:46:130566デフォルトの名無しさん
2009/03/18(水) 12:48:47lisp --> common lisp
scheme --> scheme
という理解だけど
0567デフォルトの名無しさん
2009/03/18(水) 12:48:510568デフォルトの名無しさん
2009/03/18(水) 13:00:54実用性があるか無いか、実アプリ開発に使ってるか否かの差だとオモ。
言い方を変えればSchemeは教育的効果は高いが…
0569デフォルトの名無しさん
2009/03/18(水) 13:30:550570デフォルトの名無しさん
2009/03/18(水) 15:54:36昔読んだLISPの本か何かでnilのcarやcdrはnilになるという
説明を見た気がするのですが、schemeにも当てはまるんでしょうか。
0571デフォルトの名無しさん
2009/03/18(水) 16:04:130572デフォルトの名無しさん
2009/03/18(水) 16:05:360573デフォルトの名無しさん
2009/03/18(水) 16:06:310574デフォルトの名無しさん
2009/03/18(水) 21:02:29オレ、とある図書館でその本の順番待ちなんだが、
まさかオマエが止めてるのか?w
0575デフォルトの名無しさん
2009/03/18(水) 22:54:430576デフォルトの名無しさん
2009/03/18(水) 23:33:460577デフォルトの名無しさん
2009/03/18(水) 23:59:260578デフォルトの名無しさん
2009/03/19(木) 00:29:470579デフォルトの名無しさん
2009/03/19(木) 01:54:40>Shiro(2007/09/05 13:39:49 PDT): 慣れが半分、後は「バグを出しにくいコードの書き方」が半分でしょうか。出来る限り副作用無しで書いておくとバグの切り分けが非常に容易になります。
>たぶん、「ソースの動きを追う」という考え方自体、C/C++とSchemeで差があるんではないかと思います。
http://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にとってソースの動きを追うってどんな感じなんですか?
個人的にデバッガを使って、「ソースをよく読み、ときどき書き」というのをしたいんですが
0580デフォルトの名無しさん
2009/03/19(木) 05:47:16そのすぐ下に書いてある通りでは。
デバッガを使わずとも、replで個々の手続きを呼べるので、色々な入力を与えて出力を
見るかな。入力と出力の関係がすぐに把握できない(手続き内でステップ実行したいと思う)
ようであればたぶん手続きが(あなたにとって)大きすぎる。
0581デフォルトの名無しさん
2009/03/19(木) 07:32:34抽象論はもう飽きたよ
0582デフォルトの名無しさん
2009/03/19(木) 08:30:31そういえばあんまり追ったことないかも・・・スタックトレースが1000行と出ちゃうから。面倒なんでデバッガ使わなくなった。"Type (debug) to enter the debugger."とか出されても、もう無視(w
0583デフォルトの名無しさん
2009/03/19(木) 08:34:34処理系への絶対的な信頼性ってこと?
効率的なデバッグ術の個人の差ってかなり開きがありそうだね
>>581
日本語サイトのサンプルとか、とりあえず、デバッグツールで読みたいなあと思って
バグでハマって、解決はしたけど、ものすごく時間がかかった場合は
バグの見つけ方のポイントを教えてくださいね
0584デフォルトの名無しさん
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とかに書き換えて、その段階での出力をみます。
手続き型に毒されたやり方でしょうか?
0585デフォルトの名無しさん
2009/03/19(木) 14:10:570586デフォルトの名無しさん
2009/03/19(木) 14:33:22自分はC++でプログラム書く時も、
デバッガ使うのはcore dump(assert含む)した時くらい。
基本的にユニットテストやってる。
自分のことを全然信用してないから、
全自動で網羅的なチェックした方がよい。
もちろんテストコードの方が圧倒的に多いし、
assertも馬鹿みたいに書いてる。
コードを書いたらすぐにユニットテストも書いてるから、
何かテストしたい時には、デバッガ立ち上げて操作するより、
既存のユニットテストコードを基に新たに書く方が速いw
テスト、assertコードを書くのは設計の検討にもなってる。
設計をあらゆる角度から観察する必要があるから。
もちろんdtrace, profilerなんかも使いますが。
0587デフォルトの名無しさん
2009/03/19(木) 14:36:15分かるわ〜
自分もいっつもデイジー・デイジー歌っちゃう
0588デフォルトの名無しさん
2009/03/19(木) 15:46:530589デフォルトの名無しさん
2009/03/19(木) 19:56:25ご指摘のとおり、let* でした。
0590デフォルトの名無しさん
2009/03/20(金) 21:57:53みたいなものをまとめている本ってないでしょうか
0591デフォルトの名無しさん
2009/03/20(金) 23:28:140592デフォルトの名無しさん
2009/03/20(金) 23:32:390593デフォルトの名無しさん
2009/03/21(土) 00:24:13そうでないと、ツールとか方針とかが正しいのか、そもそも必要なのかを検証できない。
0594デフォルトの名無しさん
2009/03/21(土) 01:36:26デバッガ使ってうまくいっている人は使えばいいと思うよ。
0595デフォルトの名無しさん
2009/03/21(土) 01:53:44手続っぽく作るのも可能だけど、なるべく関数のスタイルを身につけたほうが
効率的だよ。関数のスタイルをとるなら、デバッグはassertやtraceさえ出来れ
ば、大体なんとかなるし。いわゆるデバッガが必要なのは、関数がでかくって、
その中で手続的に処理が乱雑になっちゃうからなのでは?
0596デフォルトの名無しさん
2009/03/21(土) 02:13:43まあ、それはreplで関数叩いて入出力確かめろ、ですでに結論出てるな。
とは言え、じゃあひどいコードはどうやったら効率よく読めますか、
とか訊かれると、どうしたもんかね、となるが。
0597デフォルトの名無しさん
2009/03/21(土) 21:43:54良さそうな感じだね
0598デフォルトの名無しさん
2009/03/22(日) 08:10:07処理系のソースに付いてくるテストコード読みなよ。
0599デフォルトの名無しさん
2009/03/22(日) 20:33:23新しいGauche本が出たのかと喜んでオライリーを覗きに行ったら
ふぬああ本のことだったのか…
0600デフォルトの名無しさん
2009/03/22(日) 20:45:120601デフォルトの名無しさん
2009/03/22(日) 20:57:45ヌ クヌク
ア プ
ア ア
0602デフォルトの名無しさん
2009/03/22(日) 22:20:27http://www.youtube.com/watch?v=ir38tIOQdT0
0603デフォルトの名無しさん
2009/03/22(日) 22:27:250604デフォルトの名無しさん
2009/03/23(月) 01:13:460605デフォルトの名無しさん
2009/03/23(月) 01:34:350606デフォルトの名無しさん
2009/03/23(月) 01:36:23お前が閉じろよ。
0607デフォルトの名無しさん
2009/03/23(月) 12:27:250608デフォルトの名無しさん
2009/03/23(月) 13:08:060609デフォルトの名無しさん
2009/03/23(月) 21:44:130610デフォルトの名無しさん
2009/03/23(月) 22:04:11おれのヘッドホンは
beyerdynamics))))
だよ。
0611デフォルトの名無しさん
2009/03/23(月) 22:16:030612デフォルトの名無しさん
2009/03/24(火) 03:00:39今まで一人も見たことがないな。
その前に周りにLisp使える人が一人も居ないお(´;ω;`)
0613デフォルトの名無しさん
2009/03/24(火) 03:03:56周りが変態ばかりで困った記憶がある。
かくいう俺もド変態だ。どうだまいったか。
0614デフォルトの名無しさん
2009/03/24(火) 05:11:320615デフォルトの名無しさん
2009/03/24(火) 06:16:040616デフォルトの名無しさん
2009/03/24(火) 09:07:380617デフォルトの名無しさん
2009/03/24(火) 09:10:41補足してトップレベルに復帰する処理系はある。
0618デフォルトの名無しさん
2009/03/24(火) 09:26:420619デフォルトの名無しさん
2009/03/24(火) 09:29:470620デフォルトの名無しさん
2009/03/24(火) 10:03:13NILのCDR取るとか規格の範囲内で起きるものじゃなくて、
MEMREFなどの低レベルAPIや処理系バグで起きる、
*((char *)0)な話かと思ったが。
0621デフォルトの名無しさん
2009/03/24(火) 19:13:24謝ってるのにオマエとか言う奴には貸したくないな。
0622デフォルトの名無しさん
2009/03/24(火) 19:58:32読んでなくても一度返すのがスジですよ。
そして列の最後尾に並び直すのです。
(セドラーから5000円だか7000円だかで新古本を買った者より)
0623デフォルトの名無しさん
2009/03/24(火) 20:32:59予約を入れた人がいなくても
貸し出し期間内に図書館にいって延長手続き(借り直し)するものだと思うんだけど。
0624デフォルトの名無しさん
2009/03/24(火) 22:53:18へー新古品なんてあるところにはあるんだなあ。
ところで訳書を出してたとこってたしかオンデマンド印刷とかで
幾つか出してるし、これもそれで復刊してくれないかなあ。
0625デフォルトの名無しさん
2009/03/24(火) 23:07:18いつの間にか増刷されてamazonでさえ普通に新本が手に入るようになってて涙目w
手習いとかものまねも復刊されるかもね
0626デフォルトの名無しさん
2009/03/24(火) 23:15:26ま、そんなこともあるさ。 どんまいどんまい。
0627デフォルトの名無しさん
2009/03/24(火) 23:23:31ヤクザやさんがこんなところに居るとはw
規則なんだから返すに決まってるでしょ。
あればね…
ていうか本なくしちゃったw
0628デフォルトの名無しさん
2009/03/24(火) 23:30:41細かいこと気にするなって。買って返せば無問題♪
0629デフォルトの名無しさん
2009/03/25(水) 01:11:21図書館の中の人が苦労するんだろうな、と思った。
釣りならいいけど、素でその態度なら頭おかしいだろ。
0630デフォルトの名無しさん
2009/03/25(水) 01:22:120631デフォルトの名無しさん
2009/03/25(水) 02:27:05あとLisp以外ではPrologの技芸。ヤフオクみたら29500円とかwwwwww
オンデマンドで売ってくれくれ。
0632デフォルトの名無しさん
2009/03/25(水) 02:44:010633デフォルトの名無しさん
2009/03/25(水) 02:49:05そんなプレミア付きとは知らなんだ
よかったら読んだら売ってよ。1万なら買うよ。
0635デフォルトの名無しさん
2009/03/25(水) 02:56:26SICPはアーキテクチャよりだけど、こっちは応用より。
内容グーで印刷ショボ。
0637デフォルトの名無しさん
2009/03/25(水) 06:41:100638デフォルトの名無しさん
2009/03/25(水) 09:28:43なるほど
0639デフォルトの名無しさん
2009/03/25(水) 11:06:130640デフォルトの名無しさん
2009/03/25(水) 13:22:050641デフォルトの名無しさん
2009/03/25(水) 14:53:33Arduinoを制御することができる処理系ってあるのかな?
GaucheとかPLTってどうなんだろ?
できればやりかた書いてあるリンク教えてください。
0642デフォルトの名無しさん
2009/03/25(水) 15:20:28chicken scheme + avr-gcc + avrdude
http://1010.co.uk/arduino.html#2
0643デフォルトの名無しさん
2009/03/25(水) 15:55:030644デフォルトの名無しさん
2009/03/25(水) 16:08:310645デフォルトの名無しさん
2009/03/25(水) 22:24:210646デフォルトの名無しさん
2009/03/25(水) 23:02:140647デフォルトの名無しさん
2009/03/26(木) 17:47:48"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はまだないですね。
最近はメモリサイズが大分大きくなったようですが・・・
0648デフォルトの名無しさん
2009/03/26(木) 18:55:27>Arduino上のというかAVR上のSchemeはまだないですね。
つーかそもそもmegaの内蔵SRAM程度では厳しい。
外部コンパイルしてAVR上でVMを走らせる
みたいな使い方ならできるだろうけど。
マイコンでscheme動かすならアドレス空間大きめの
ものを選んだ方がいい。
0649デフォルトの名無しさん
2009/03/27(金) 03:23:50PICでSchemeが動いているw
0650デフォルトの名無しさん
2009/03/27(金) 08:03:22ならschemeからマシン語のコードを吐くコンパイラというのならどうかな
0651デフォルトの名無しさん
2009/03/27(金) 22:10:45フラッシュにオンタイムで書き込むにはブートローダもどきがいる
0652デフォルトの名無しさん
2009/03/28(土) 15:07:29簡単なλ計算のインタプリタをArduinoで動かしてる。
Project LambdaCan: Lambda Calculus in a Can
http://alum.wpi.edu/~tfraser/Software/Arduino/lambdacan.html
0653デフォルトの名無しさん
2009/03/28(土) 23:38:51有り難う御座います。このスレでもλ計算の話は久しぶりですね。
とっても気に入りました。でも、素のλ計算はメモリを喰うので
この計算ぐらいが限界って例が書いてありますね。
簡約戦略がまずいとメモリオーバーしそうですねw
0654デフォルトの名無しさん
2009/03/29(日) 23:38:06lazy-kやunlambdaの式をλ式にしてくれる変換器ってないでしょうか
(もしあればCombinator Birdsのような式が直接計算出来るのが理想ですが)
というのも、W=C(BMR)=λab.bbb≠λab.abbな気がするので
検算してみたいんです。
後Combinator Birdsのページ、
W=SS(KI)がおそらく一番シンプルな答えですね
0655デフォルトの名無しさん
2009/03/31(火) 19:23:24ごめんなさい
0656デフォルトの名無しさん
2009/03/31(火) 21:39:560657デフォルトの名無しさん
2009/03/31(火) 22:13:21いや、関係ないだろ
W=C(BMR)=λab.bbb≠λab.abbとW=SS(KI)ってどういう意味なの?
暗号にしかみえないw
0658デフォルトの名無しさん
2009/03/31(火) 22:25:41と焚きつけてみる
0659デフォルトの名無しさん
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殿に計算してもらえば良かったわけだ
今から試してきます。気づかせてくれてさんきゅ
0660デフォルトの名無しさん
2009/03/31(火) 23:03:17(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)
0661デフォルトの名無しさん
2009/04/01(水) 00:49:422割ぐらい理解したw
あとで再挑戦・再理解してみる
lambdaを3つ使うのを初めてみた
おれはlambdaを3つ使うコードを書くことがあるのだろうか
このロジック(表記法?)は、どういう用途で使えそうなの?
0662デフォルトの名無しさん
2009/04/01(水) 07:02:040663デフォルトの名無しさん
2009/04/01(水) 09:24:12オレ、660じゃないけど、べつに実用性とかじゃなくて最小の関数型言語の形のひとつ:
http://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
0664デフォルトの名無しさん
2009/04/01(水) 16:00:20Thank you
知らない概念や処理系が、いっぱいあったけど
2割ぐらい理解した
感想は、うまく言葉にできない
0665デフォルトの名無しさん
2009/04/01(水) 19:15:59Schemeでいう以下の2つは同じ物として扱われる
(lambda (x) (lambda (y) (lambda (z) ...
(lambda (x y z) ...
3引数の関数なら書いたことあるでしょ?
そう考えたらそんなに複雑でもなく見えてくるかもね
0666デフォルトの名無しさん
2009/04/01(水) 19:45:19素朴な疑問なんですが
普段は、なんの言語を使っているんですか?
ちなみに自分はbash 5%, C/C++ 30%, gauche 10%, Python 30%, その他 25%
エディタはemacs?
差し支えなければ、教えてください
0667デフォルトの名無しさん
2009/04/01(水) 20:23:21gauche95%、sh3%、sed1%、C1%くらいだな。
1年半くらい前はsh70%、sed20%、C8%、(Scheme48+guile)2%くらいだったけど。
カリー化と可変長引数は両立がむずかしげでML系はカリー化を、Lisp系は可変長引数を取ったんだとおもう。
あとカリー化とthunkも相性が悪くて
正格評価のMLは、評価を遅延させる式を
():unitを受け取るなんちゃってthunkで実現してた気がする。
0668デフォルトの名無しさん
2009/04/01(水) 20:42:54gaucheを使っていて、不都合はないの?
他の言語を選ばずに、gaucheを選んだいくつかの理由ってなに?
lisp系じゃなくて、gaucheの理由も知りたいかも
0669660
2009/04/01(水) 20:57:38OCaml&F# 30% C++ 15% Perl 5%ぐらい
エディタはVC付属エディタとemacs/viです
ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
0670デフォルトの名無しさん
2009/04/01(水) 21:04:07500 :Classical名無しさん :09/04/01 20:55 ID:qtulE/8k
よろしくお願いします。
【URL】 http://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コンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
0671667
2009/04/01(水) 21:20:19自分の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だけで置き換えられるようになったのがいいですね。
速度重視とかマルチスレッドバリバリなことをしなくなったということもありますが。
0672デフォルトの名無しさん
2009/04/01(水) 22:52:450673デフォルトの名無しさん
2009/04/01(水) 22:58:170674デフォルトの名無しさん
2009/04/01(水) 23:00:180675デフォルトの名無しさん
2009/04/02(木) 03:41:44シリコン・グラフィックの方だろJK
0676デフォルトの名無しさん
2009/04/02(木) 03:47:31なんかLispに関して大きいことやってたっけ?
OpenGLぐらいしかシランわ。
0677デフォルトの名無しさん
2009/04/02(木) 07:44:57使わない機能を削って代わりに部分継続やソフトタイピングを入れたり
してるためです。それなりに高速でデバッグ機能も充実していると思って
いますが、RnRSやSRFIの類は全く考慮せず作っているので公開していま
せん。ドキュメント書くのもめんどくさいし(論文は書いたけど)。
0678デフォルトの名無しさん
2009/04/02(木) 09:10:38エイプリルフールだと思ってた…
0679デフォルトの名無しさん
2009/04/02(木) 14:18:51SGI(非創価)ってLisperが作った会社だと思ってました。
0680デフォルトの名無しさん
2009/04/02(木) 14:20:300681デフォルトの名無しさん
2009/04/02(木) 16:33:15ジムクラーク? Lisper ではないね。専門は CG らしい。
ワークステーション屋で Lisper が作った会社ってあったっけ?
Sun のビルジョイはハッカーだけど Lisper じゃないし。
0682デフォルトの名無しさん
2009/04/02(木) 16:58:18Lispマシンから移植されたものだったと思う。Lispで動いていたはず。
プロトタイピング強いから、いろいろな分野の初期大型アプリで使われてるね。
数式処理、ウィンドウシステム、プログラミング可能エディタなど。
CG関係も昔はもっと多かった。
0683デフォルトの名無しさん
2009/04/02(木) 18:25:170684デフォルトの名無しさん
2009/04/02(木) 19:27:020685デフォルトの名無しさん
2009/04/02(木) 20:34:160686デフォルトの名無しさん
2009/04/02(木) 23:50:42ニチメンなんとか、ってやつのことかな。Shiroさんが詳しそう
0687デフォルトの名無しさん
2009/04/03(金) 00:37:300688デフォルトの名無しさん
2009/04/03(金) 00:39:090689デフォルトの名無しさん
2009/04/03(金) 01:43:520690デフォルトの名無しさん
2009/04/03(金) 01:57:27そうゆう名前で呼ばれてかかどうかはおいといて、MIT 由来の
LISP マシンってワークステーション以外のなのものでもないが…
0691デフォルトの名無しさん
2009/04/03(金) 02:28:13技術の発展とともに、作業端末は高価なUNIXワークステーションではなく
安価なWindowsマシンが優位になり、未開の領域に強く柔軟なLispから
高速で大規模なプログラムに強い? C++に置き換わったとかじゃないの。
0693デフォルトの名無しさん
2009/04/03(金) 11:16:16アセンブラの方が簡単かも。
0694デフォルトの名無しさん
2009/04/03(金) 12:14:13単方向リンクリストの、先頭を取り出すか、それ以外を取り出すか、
だけなんだが。
0695デフォルトの名無しさん
2009/04/03(金) 12:16:170696デフォルトの名無しさん
2009/04/03(金) 12:42:440697デフォルトの名無しさん
2009/04/03(金) 12:48:44コンスは単なる2つのポインタの対
Lispよりも低レベルではcarとcdrは可換で線形リストとは何の関係もない
線形リストに利用しているのはLispより高レベルだけの話
アセンブラ的に考えればこう
0698デフォルトの名無しさん
2009/04/03(金) 13:05:28それからいろんな構造をconsだけで組み立てる
ドット対→線形単リスト→2分木みたいに徐々に複雑にしていくといい
0699デフォルトの名無しさん
2009/04/03(金) 13:14:01CL-USER> (sdraw '(1 2 3 (4 5)))
[*|*]--->[*|*]--->[*|*]--->[*|*]--->NIL
| | | |
v v v v
1 2 3 [*|*]--->[*|*]--->NIL
| |
v v
4 5
http://www.cs.cmu.edu/~dst/Lisp/sdraw/
0700デフォルトの名無しさん
2009/04/03(金) 13:17:57Lispのリスト記法はドット記法の構文糖
任意のリスト記法はドット記法で表せる(逆は偽)
ドット記法の基本は( A . B )でホワイトスペース+ドット+ホワイトスペースがcarとcdrの間の仕切り
(開き/閉じ括弧の周りはホワイトスペースの省略可)
そしてドット記法を(A B C)みたいなに直すのは
ドット+開き括弧を見つけたら、それと、それに対応する閉じ括弧を消しゴムで消すだけ
0701デフォルトの名無しさん
2009/04/03(金) 13:22:220702デフォルトの名無しさん
2009/04/03(金) 14:15:16(cons 'a (cons 'b '())) => (a b)
'(a . (b . (c . ()))) => (a b c)
0703デフォルトの名無しさん
2009/04/03(金) 14:22:09任意のアルファベット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 ] ]
0704デフォルトの名無しさん
2009/04/03(金) 14:24:40ML系みたいにリストは空か値とリストを持つコンスって定義だとまだわかりやすいのに
0705デフォルトの名無しさん
2009/04/03(金) 15:27:280706デフォルトの名無しさん
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が文字列をリストとして実装してるのはそんな理由だったりするのでしょうか?
0707デフォルトの名無しさん
2009/04/03(金) 15:50:160708デフォルトの名無しさん
2009/04/03(金) 15:52:55部分リストを複数オブジェクトで共有している場合
先頭部分の参照がはずれてもGCで回収できなくて逆に効率が悪くなりますね。
ベクタの最初の方だけGCできる方法を取れば別ですけど
そうするとベクタの情報が増えて結局コンスと大差なくなるかも
0709デフォルトの名無しさん
2009/04/03(金) 16:14:39おや、そうでしたか。不勉強でした。
見た所、線形リストを少しでも効率よく処理する為の物の様で
ベクタを置き換えるには至らなかったようですね。
0710デフォルトの名無しさん
2009/04/03(金) 16:35:18vectorを使えばいいしね。
listで構造体を模倣してprototypingしても、
accessor使っておけば簡単に移行できるし。
0711デフォルトの名無しさん
2009/04/03(金) 17:59:010712デフォルトの名無しさん
2009/04/03(金) 18:02:440713デフォルトの名無しさん
2009/04/03(金) 22:15:13また後戻りか…英語もやってないし… λ.......
0714デフォルトの名無しさん
2009/04/04(土) 10:17:19初心者が初心者に教えてる姿は危なっかしくて思わず突っ込みたくなる。
話を聞いてると、初心者にはカリー化が珍しいのか興味を示していた。
ただ、もうそろそろこのうざい雰囲気がなくなればいいのにと切に願う。さっさと成長しろ。
0715デフォルトの名無しさん
2009/04/04(土) 10:22:120716デフォルトの名無しさん
2009/04/04(土) 10:54:12なぜそう邪険に扱う。教え導くのも初学者を脱した人の使命でしょ。
0717デフォルトの名無しさん
2009/04/04(土) 11:06:50ドライクリーニングは危ないから誰もやらない。
0718デフォルトの名無しさん
2009/04/04(土) 11:54:04成長しろってどのくらいのレベルになればいいんだ?
下のサイトで言うどのレベルよ
Scheme:Schemeプログラマのレベル10
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
0719デフォルトの名無しさん
2009/04/04(土) 12:28:21その通り。邪険にすれば衰退しかありえない。
0720デフォルトの名無しさん
2009/04/04(土) 13:09:490721デフォルトの名無しさん
2009/04/04(土) 13:26:520722デフォルトの名無しさん
2009/04/04(土) 14:33:240723デフォルトの名無しさん
2009/04/04(土) 14:39:420724デフォルトの名無しさん
2009/04/04(土) 14:47:510725デフォルトの名無しさん
2009/04/04(土) 15:01:470726デフォルトの名無しさん
2009/04/04(土) 15:36:31SICPスレでLispからPythonへの移行の話が出てる。
どうして私は信仰を捨てたか、という文章が興味深かった。
こんな話。
↓
自分はApple II時代からのLisperで
Lispで開発してきてほかの言語を使う人に実質負けたことがなかった。
Lispは圧倒的に効率がよいから。
でもなぜかLispユーザーが少ないのはどうしてなんだぜ?
Lisp求人無いのは何故なんだよな?
Googleに入ってみたら特にLispが開発効率良いってものでもなかった。
だからそれまで持っていたLisp信仰を捨てた。
Novicも今はPython使ってる。
0727デフォルトの名無しさん
2009/04/04(土) 15:54:330728デフォルトの名無しさん
2009/04/04(土) 16:02:320729デフォルトの名無しさん
2009/04/04(土) 16:11:09http://web.archive.org/web/20060621010832/www.gembook.jp/tsum/page.pys?wiki=How+I+lost+my+faith
0730デフォルトの名無しさん
2009/04/04(土) 16:58:470731デフォルトの名無しさん
2009/04/04(土) 17:11:31PerlにもC#にもなりきれないPythonでは、問題を先送りにしただけじゃないか
0732デフォルトの名無しさん
2009/04/04(土) 17:26:23捨てようが捨てまいがそれはどうでもいいけど、その心の影響は消えないからね。
簡単に言えば、手続型ばかりやってると関数ポインタみたいなことに到達するのは
時間がかかるけど、lispはそんなもの最初にやるからね。
map的発想ってのもそうだな。最初に付き合うかどうかって違いが実は大きい。
0733デフォルトの名無しさん
2009/04/04(土) 17:29:08道具だけが最初にないかの違いでもある。
pythonやrubyもlisp的な観点で教えたほうが幅が広いとおもうが、どうもjava屋とかC/C++屋的
な発想でやっちゃうよな。あれははっきりいうけど愚かだと思ってるね。
0734デフォルトの名無しさん
2009/04/04(土) 17:32:24よく初心者にポインタが難しいって聞きます。
Lispやっていれば将来Cのポインタもすんなり理解できるということですか?
0735デフォルトの名無しさん
2009/04/04(土) 17:33:53Lispを捨てたわけじゃないぞ。Pythonも生産的だと認めて使うようになった、というのが正しい。
0736デフォルトの名無しさん
2009/04/04(土) 17:43:41関数型プログラミングとしてしか使わないならlispなんて要らない
0737デフォルトの名無しさん
2009/04/04(土) 17:45:03「これは難しいよ〜」と言われて紹介されるのが被害を助長させてると思う。
理解して無くてもなんとかなる。
0738デフォルトの名無しさん
2009/04/04(土) 17:45:350739デフォルトの名無しさん
2009/04/04(土) 18:00:08「これは難しいよ〜」と言われて紹介されるのが被害を助長させてると思う。
理解して無くてもなんとかなる。
0740デフォルトの名無しさん
2009/04/04(土) 18:04:58昔からある言語なんだし、後発言語はlispの影響を受けているわけで
優位差というものは、ほとんどないでしょ
0741デフォルトの名無しさん
2009/04/04(土) 18:11:010742デフォルトの名無しさん
2009/04/04(土) 18:13:24「Pythonで財をなしたのはGoogleだけ」なんてことになったら目も当てられない
0743デフォルトの名無しさん
2009/04/04(土) 18:30:440744デフォルトの名無しさん
2009/04/04(土) 18:38:130745デフォルトの名無しさん
2009/04/04(土) 18:49:03力を入れても収益になる見込みが低いからじゃね?
企業なんてそんなもんだ。
0746デフォルトの名無しさん
2009/04/04(土) 19:06:13LispView(OpenViewのCLOSバインディング)は面白かった。
まあ儲からないものを続けるわけにはいかない。
0747デフォルトの名無しさん
2009/04/04(土) 19:06:150748デフォルトの名無しさん
2009/04/04(土) 19:27:320749デフォルトの名無しさん
2009/04/04(土) 19:34:110750デフォルトの名無しさん
2009/04/04(土) 20:56:090751デフォルトの名無しさん
2009/04/05(日) 01:54:440752デフォルトの名無しさん
2009/04/05(日) 02:00:09未実装です。次期バージョンにご期待ください。
0753デフォルトの名無しさん
2009/04/05(日) 03:15:08マクロを使いこなせれば違うのだろうか
0754デフォルトの名無しさん
2009/04/05(日) 03:25:570755デフォルトの名無しさん
2009/04/05(日) 03:48:180756デフォルトの名無しさん
2009/04/05(日) 06:16:500757デフォルトの名無しさん
2009/04/05(日) 06:18:330758デフォルトの名無しさん
2009/04/05(日) 09:12:20ってばっちゃが言ってた
0759デフォルトの名無しさん
2009/04/05(日) 11:09:480760デフォルトの名無しさん
2009/04/05(日) 12:08:020761デフォルトの名無しさん
2009/04/05(日) 12:11:33それをこのスレで聞くの?
純粋な関数型言語をやりたいなら、Haskellでもやっとけばいいじゃない。
0762デフォルトの名無しさん
2009/04/05(日) 12:21:57無理せず、両方やればよいと思う。
まぁ、>>761のいうように、「これぞ関数型言語」というのがやりたいのならHaskellじゃね?
0763デフォルトの名無しさん
2009/04/05(日) 12:44:590764デフォルトの名無しさん
2009/04/05(日) 12:49:16お答えありがとうございます。
純粋関数型言語にこだわりはないのでとりあえずScheme触ってみます。
0765デフォルトの名無しさん
2009/04/05(日) 13:59:43lambdaで下のプログラミングってどうやって書くの?
再帰的には使えないんだよね?
;1からnまでの和を計算する
;とりあえず、n = 50とする
(define (foo x)
(if (= x 1)
1
(+ x (foo (- x 1)))))
; これはなしで
(define (foo x)
(/ (* x (+ x 1)) 2))
(foo 50)
0766デフォルトの名無しさん
2009/04/05(日) 14:07:400767デフォルトの名無しさん
2009/04/05(日) 14:41:300768デフォルトの名無しさん
2009/04/05(日) 14:46:22書くとしたらどうなるのかなと
0769デフォルトの名無しさん
2009/04/05(日) 15:12:04fが重複していて、なんなのか、よくわからなかったけど
((lambda (like-func-a)
(like-func-a like-func-a 50))
(lambda (like-func-b x)
(if (= x 1)
1
(+ x (like-func-b like-func-b (- x 1))))))
こうすると多少、みやすくなるのかな?
このコードをdefineに置き換えて、できるだけで忠実に書くとどうなるの?
0770デフォルトの名無しさん
2009/04/05(日) 18:07:09haskellとlispのどっちがお勧めでしょうか
0771デフォルトの名無しさん
2009/04/05(日) 19:56:40maximaが何で作られているか調べてみ。 そしたら結論でるよ。
haskellに数式処理の簡単に扱えるライブラリがあればそっちのほうが
数式に馴染みやすい扱いができる。
lispで数値計算をするときは、最適化するために、型宣言のことやプロファイラを
あつかってボトルネックを潰して行っくって作業なしでは難しいかも。型宣言や
最適化の工夫はグレアムおじちゃんのANSI common lispをお勧めしとく。on lisp
じゃないよ。
maximaからlispは直接操作も可能だしあなたがやりたいことは実力さえつければ
可能です。
0772デフォルトの名無しさん
2009/04/05(日) 20:00:41速さは保証しないけどね。lispでかかれたかなり癖のあるコードだがlapack
まで一応ついてる
0773デフォルトの名無しさん
2009/04/05(日) 20:06:000774デフォルトの名無しさん
2009/04/05(日) 20:22:220775デフォルトの名無しさん
2009/04/05(日) 20:59:57なんでそんなこと知りたいのか知らんけど、
Haskell にベタ移植するとこんな感じじゃね
(\f -> f f 50)(\f x -> if x==1 then 1 else (x+f f (x-1)))
もちろん型推論には失敗する。
cannot construct the infinite type: a = a -> t -> b
0776デフォルトの名無しさん
2009/04/05(日) 21:37:25(letrec ((y (lambda (f) (lambda(x) ((f (y f)) x)))))
((y (lambda (f) (lambda (x) (if (= x 1) 1 (+ x (f (- x 1))))))) 50))
=>1275
0777デフォルトの名無しさん
2009/04/05(日) 21:40:00反則な気がしますが、letrecをlambdaだけで定義できるでしょうか?
0778デフォルトの名無しさん
2009/04/05(日) 21:51:03前者はともかく、後者を満たすのは無理っぽいと考えてます
0779デフォルトの名無しさん
2009/04/05(日) 21:52:43> letrecをlambdaだけで定義できるでしょうか?
無理。 set! とかも必要。
0780デフォルトの名無しさん
2009/04/05(日) 21:57:47多変数相互再帰はlambdaだけで書けるからletrecもlambdaだけでできる
過去スレにあったと思う。
もっともMLの型推論を通せるかどうかはしりません。
自分が読んだ本には、型付きラムダ計算ではfixという演算子を導入すると書いてあった。
0781デフォルトの名無しさん
2009/04/05(日) 22:04:510782デフォルトの名無しさん
2009/04/05(日) 22:08:41昔そのfix云々を見てMLの限界を感じたので
この程度ならLISPに後付けで型推論つけても同じなんだと
引数が面倒ですが
0783765
2009/04/05(日) 22:17:09レベル高い話になり過ぎてますよ
(like-func-a like-func-a 50)と(like-func-b like-func-b (- x 1))がわからないんですけど
(lambda (like-func-a)
(like-func-a like-func-a 50))って何よ?
765の問題をlambdaで再帰的に書くには、こう書くみたいに覚えるしかないの?
0784デフォルトの名無しさん
2009/04/05(日) 22:17:48f 1 = 1
f x = x+f (x-1)
main = print $ f 50
fix (ここではyオペレータ) があれば define や let 類が無くても再帰できるぜー
y f x = f (y f) x
main = print $ y (\f x -> if x==1 then 1 else x+f (x-1)) 50
というのが fix 。
0785デフォルトの名無しさん
2009/04/05(日) 22:27:45λ計算でオブジェクトに名前をつける唯一の方法は、引数にすること。
なので、自分自身を引数にするのです。
0786デフォルトの名無しさん
2009/04/05(日) 22:49:44>>766を分解すると
(1) (lambda (f) (f f 50))
(2) (lambda (f x) (if (= x 1) 1 (+ x (f f (- x 1)))))
(1)は引数を1つとる関数で、その引数を「引数を2つ取る関数」
と見なし呼び出す。呼び出す際、引数にそれ自身も渡す。
(1)は一度読んだら役割を終えるので、
(1)の呼び出しは(2)のための初期化に相当する。
(2)は渡された自身を使って再帰ができる。
0787デフォルトの名無しさん
2009/04/05(日) 23:35:13((lambda (f) (f ((lambda (x) x) f) 50))
(lambda (f x) (if (= x 1) 1 (+ x (f ((lambda (x) x) f) (- x 1))))))
のような形にすれば通るっぽい
0788デフォルトの名無しさん
2009/04/06(月) 00:38:35役割を終えるというのと初期化に相当するというのがよくわからない
>>787
> ((lambda (f) (f ((lambda (x) x) f) 50))
> (lambda (f x) (if (= x 1) 1 (+ x (f ((lambda (x) x) f) (- x 1))))))
ちょっとわかりやすくなったかも
複雑になったとも言えるけど
((lambda (x) (+ x x)) 5) => 10 ;理解できる
((lambda (x) x) "ab") => "ab" ;理解できる
(string? ((lambda (x) x) "ab")) => #t ;理解できる
((lambda (x) x) 5) => 5 ;理解できる
(integer? ((lambda (x) x) 5)) => #t ;理解できる
((lambda x x) 5) => (5)
(list? ((lambda x x) 5)) => #t ;理解できる
((lambda x x x x) 5) => (5)
((lambda (x) x x) 5) => 5
((lambda x 2) 5) => 2 ;理解できる
((lambda) 5) => error
みたいにチマチマlambdaについて理解しようとしているんだけど
理解できるようになるのかなw
0789デフォルトの名無しさん
2009/04/06(月) 00:44:27((lambda (f) (f f)) (lambda (g) (display "called!\n")(g g)))
無限末尾再帰だから評価するには注意が必要だけど、これなら少し分かりやすいかな。
(f f)は、fを引数にしてfを呼び出している。
一番目のfは関数呼び出し、二番目のfはその呼び出しへの引数。
(g g)は、gを引数にしてgを呼び出している。
一番目のgは関数呼び出し、二番目のgはその呼び出しへの引数。
評価してみて、なぜそういう動作をするのか、考えてみて。
(lambda (g) (display "called!\n")(g g)) を無限末尾再帰にするためには、gに何を渡せばよい?
答えは、「(lambda (g) (display "called!\n")(g g)) に、それと同じ (lambda (g) (display "called!\n")(g g)) を渡す」。
単純な答えすぎて騙されているみたいだけど、そうとしか考えられない。
で、その答え「(lambda (g) (display "called!\n")(g g)) に、それと同じ (lambda (g) (display "called!\n")(g g)) を渡す」をやっているのが、(f f)の部分。
0791デフォルトの名無しさん
2009/04/06(月) 06:36:11>騙されているみたいだけど、そうとしか考えられない
0792デフォルトの名無しさん
2009/04/06(月) 07:14:22let fix f = f (fix f)
let arithProgSum n = fix (\f -> \x -> \y -> \z -> if x == y then z else f x (1 + y) (1 + y + z)) n 0 0
と書けば
arithProgSum 3 == 6, arithProgSum 4 == 10, ...
もうスレチはこれで終わりにしようぜ。ヤレヤレ。
0793792
2009/04/06(月) 07:39:50let arithProgSum n = fix (\f -> \x -> \y -> if x == 0 then y else f (x - 1) (x + y)) n 0
でいいね。スマソ
0794デフォルトの名無しさん
2009/04/06(月) 17:17:51とりあえずC/C++で書いたGUIプログラムの下請けとして呼び出すリスト処理部分に使いたいと考えていますが、将来的にはGUI部分もSchemeあるいはCommon Lispで書いてみたいです。
自分で考えてみた限りでは、
・多言語との相性もある程度よいが、必要なものは全部自分で作らないといけないScheme
・最初から最後まで自己完結するCommon Lisp。他の言語の下請けにはなりにくい。
という印象です。
関数型言語を勉強するのにはSchemeがいいけれど、Common Lispじゃないと色々とめんどくさいのかな、という気がします。
そこで本題なんですが、Schemeをあるていど勉強したあとにCommon Lispへ移行(もしくはその逆)するのは、どの程度のハードルがあるのでしょうか。
(defineをdefunに直せば同じソースコードが通るほどに似ているのか、まったく別物だと思って勉強した方がいいのか、というようなことなのですが・・・)
長文失礼しました。
0795デフォルトの名無しさん
2009/04/06(月) 17:28:39非emcas使いは、どうするのがいいの?
それでも(最終的には)emacs?
0796デフォルトの名無しさん
2009/04/06(月) 17:47:06使ってる人はけっこういるのでしょうか
0797デフォルトの名無しさん
2009/04/06(月) 18:11:12理由もわからずに道具を使いだすと信者化するんで
メモ帳で十分とか、まがりなりにも自分の信念を持ってるほうがいいと思う
0798デフォルトの名無しさん
2009/04/06(月) 18:19:54「非emacs使い」なのならなぜ最初にvi(m)のlispモードを考えない?
0799デフォルトの名無しさん
2009/04/06(月) 19:03:02頭おかしい考え方だと思った
0800デフォルトの名無しさん
2009/04/06(月) 19:55:41windowsな人ならそう思うかもな。でも、lispをwindowsでするのは
無駄な労力がかかるから、それもあって798はviが浮んだんだろう。
unix系ならばあながちおかしくはない発想なのです。いちおう
vimならばlispの環境はあるからなぁ。
0801795
2009/04/06(月) 20:27:07なんら宗教上の理由は、ありませんよw
vimを薦めている方は、なにか宗教上の理由を感じるんですが、違いますか?
Linux上ならemacs一択でいいんでしょうかね?
またWindows上(のcygwinなど)でschme(, lisp)を使うのは、適していないんでしょうか?
>>800
いちおう、存在する程度では、困るんですけど
0802デフォルトの名無しさん
2009/04/06(月) 20:53:480803デフォルトの名無しさん
2009/04/06(月) 21:14:470804デフォルトの名無しさん
2009/04/06(月) 21:15:120805デフォルトの名無しさん
2009/04/06(月) 21:20:140806デフォルトの名無しさん
2009/04/06(月) 21:29:090807デフォルトの名無しさん
2009/04/06(月) 21:32:48胸をはって「使っている」といえるほどではありませんが、Windows + Meadow + mzschemeで、とくに支障ないです(.emacsをちょっと書く必要があるけど)。
Linux + emacs + mzschemeと同じ環境、同じコードで書けるし。
0808デフォルトの名無しさん
2009/04/06(月) 21:38:45いつの間にやら俺も毒されて
0809デフォルトの名無しさん
2009/04/06(月) 21:52:59よくしらんけど、vimって宗教がらみ?clispみたいなの?
0810デフォルトの名無しさん
2009/04/06(月) 22:02:00schemeだったら、807もかいているように、mzschemeとかあるからなんとかなる。
windows上のemacsはpath表現ではまることがあるから注意が必要。IDEまであるからね。
Dr.schemeさんは。
common lispでもwindowsで動くものはでてはきてるけど、外部のライブラリを使うとき
に困ることがあるかもしれない。
emacsのほうがあとあと楽だと思うけど、グレアムみたいにviつかいで有名なのもいるから
CUIのみでやる場合は選択としておかしくはないかな。screen+zsh+vimという組み合せは
CUIではかなり強力になるから。windowsならばどうだろうね。cygwinでは同じことはでき
そうだが。ほかはeclisp(笑)というlisperのためのIDE(4/1ではないか。をい!)でも
common lispならばcupsというのがありますね。
0811デフォルトの名無しさん
2009/04/06(月) 22:04:25まで読んだ
0812795
2009/04/06(月) 22:17:27>>801
有名な方でvi使いの方がいらっしゃるんですね
vimとか、ネタかと思っていました
みなさま、レス、ありがとうございます
勉強の方向性として参考にさせていただきます
とりあえず、パッケージにguileがあったので、試しにこれを触ってみます
0813デフォルトの名無しさん
2009/04/06(月) 22:29:26common lispで現状の選択ならばclispやsbcl+ltkを使えば良いよ。一番気楽。
schemeほどの美しさはないけど、気に入ったなら良い選択だ。
lisp方言は似てるから、微妙な違いはあっても片方を学んでおけばなんとかなりますよ。:p
0814デフォルトの名無しさん
2009/04/06(月) 22:36:06vi は宗教と言うより made with secret alian technology なだけだと思うけどな。
Lispnik なら理解出来なくとも価値観を共有出来ると思ってたが、まぁ良いよ。
0815デフォルトの名無しさん
2009/04/06(月) 23:37:14けどそういうのに慣れてない人には、
jEditとか他の選択肢でもいいんじゃね?
シンタックス支援があれば何でもいい。
0816デフォルトの名無しさん
2009/04/07(火) 00:09:10javaでいうEclipseみたいなものは便利だけど、勉強しないと補完されないと完成しないコードを書く癖が付くよ。
0817デフォルトの名無しさん
2009/04/07(火) 00:13:390818デフォルトの名無しさん
2009/04/07(火) 00:23:06俺も同じ考えだな
初心者はIDEやデバッガは使わない方がいいと思う
0819デフォルトの名無しさん
2009/04/07(火) 00:51:33プラットフォームにもよるんだけどさ
unix系(mac含む)ならemacs+common lisp+slime環境はマジでおすすめ(+HyperSpec)
windowsでならeclipse+CUPSがおすすめ(meadow+commonlispでもいいかもしれんがasdf環境の設置が面倒くさいんだ)
schemeはわからん、slime並に統合された環境ってschemeとペアになってる開発環境に依存しすぎてるら(emacsライクなエディタがscheme自身でかかれてたりする)
0820デフォルトの名無しさん
2009/04/07(火) 00:53:440821デフォルトの名無しさん
2009/04/07(火) 00:59:19うんうん。そうおもう。どういですよ。おにぃちゃん。
windowsでというと如何してもcygwinに頼ることもあるかもしれんけど、
あれをやるなら、仮想環境でubuntuでも入れてそこで、emacs + cl +slimeを
やったほうが手間がかからないかな。学習のみじゃなくて、本気でやりたいなら
脱winをおすすめするよ。macならunix系だからwinほど障害がないから問題はない。
どうしてもwinラヴなら、まだ、eclipseにたよったほうがいい。
0822デフォルトの名無しさん
2009/04/07(火) 01:01:160823デフォルトの名無しさん
2009/04/07(火) 01:11:08いろんな言語が触れるのはunix系の強みだと思う。
まだ、CUIの扱いがunix準拠なら救われるけど、そうじゃない上に弱点だから
windowsではどうしても多様なものがでにくい。その特殊性ゆえに移植が難しい
のが影響してるんだと思うよ。lispだけじゃなくて動的言語の強みが消えやすいし。
0824デフォルトの名無しさん
2009/04/07(火) 07:07:21Unixという名の統合環境がないと動かないLisp処理系が結構多いから・・・
0825デフォルトの名無しさん
2009/04/07(火) 10:09:180826794
2009/04/07(火) 10:23:07ありがとうございます!
Mac OS X上でemacs使っているので、slime+sbclでCommon Lispから入ってみようと思います。
それはそうと、Common Lispにも、SchemeのSICPのような「聖典」的なものはあるのでしょうか?
HyperSpecが相当するのでしょうか?
0827デフォルトの名無しさん
2009/04/07(火) 10:39:460828デフォルトの名無しさん
2009/04/07(火) 10:58:300829デフォルトの名無しさん
2009/04/07(火) 11:46:340830デフォルトの名無しさん
2009/04/07(火) 12:43:39うん。ちょっとまえの記憶でもうしわけないけど、銭谷版はslimeも付いてるけど、
古いバージョンで、今のsbclやcmucl、clojure clと組みあわせて使ったときに動作が
ちがうかもしれないので、なるべく、本家で配布しているslimeを使ってやってください
>>829
Lispboxも設定済みmeadow学習用なら問題なしよ。asdfを本格的に使う段階になっ
てくる時から試行錯誤の連続になるかもしれない。
0831デフォルトの名無しさん
2009/04/07(火) 14:26:26どういう点に注意すればいいのかご教示くだされば幸いです。
よろしくお願いします。
0832デフォルトの名無しさん
2009/04/07(火) 14:34:41> Common Lispにも、SchemeのSICPのような「聖典」的なものはあるのでしょうか?
CLtL2とかPAIPあたりがそういう位置づけかな。
0833デフォルトの名無しさん
2009/04/07(火) 14:57:20>Individuals and interactions over processes and tools
>Working software over comprehensive documentation
0834デフォルトの名無しさん
2009/04/07(火) 16:13:39SICP が Scheme にとっての聖典ってのは誤解だよ。
Scheme を使ってプログラミングの考え方を解説してるけど、
言語自体の説明はほとんど無いし、
Scheme の最低限の機能しか使ってない。
Scheme のバイブルはTSPLだと思うなぁ。
0835デフォルトの名無しさん
2009/04/07(火) 17:52:43知ってるひとおらんか?
0836デフォルトの名無しさん
2009/04/07(火) 21:29:51.psをttp://www.ps2pdf.com/convert.htmで.pdfにするのはどうですか?
ついでに、ttp://www.daansystems.com/lispide/のzipの中にはCLtL2とHyperSpec
の.chmが入っています。
0837デフォルトの名無しさん
2009/04/07(火) 23:00:29Jargon filesに"One of the bibles of the LISP/Scheme world."って書いてあるから、
それをうけてるんじゃないのか。別に「誤解」というほどのものでもないだろう。
0838デフォルトの名無しさん
2009/04/07(火) 23:22:55ありがと。 やってみたら作れた。
0839デフォルトの名無しさん
2009/04/07(火) 23:35:42お礼にのせておくね。
http://www.lispmachine.net/
0840デフォルトの名無しさん
2009/04/07(火) 23:47:46http://lispm.dyndns.org/news?ID=NEWS-2009-02-22-1
Erik Naggumのサイトでもps形式のものが公開されてるけど、章ごとにばらばらのファイルなので
いまいち使いにくい。
0841デフォルトの名無しさん
2009/04/07(火) 23:54:04割と親切な人も多いから、謙虚に、かつエスパーを要求しなければ、
結構色々教えてくれると思う。
ただ、最終的には、自分で動かないとやってられない言語でもあるので、
そういう覚悟は必要のはず。手厚いサポートとか期待するだけ無駄。
0842デフォルトの名無しさん
2009/04/08(水) 08:34:210843デフォルトの名無しさん
2009/04/08(水) 13:49:19すごい。リアルタイムでうごくゲームだ。
0844デフォルトの名無しさん
2009/04/08(水) 14:32:28結局アレグロの独占なんですね
0845794=826
2009/04/08(水) 15:02:14人工知能関係はまったく勉強したことがないのでPAIPにはちょっと身構えてしまいますが、
839さんや840さんに紹介していただいたサイトには初心者向けの文書もいくつか載っていたので、
複数見比べながら勉強していくことにします。
0846デフォルトの名無しさん
2009/04/08(水) 16:13:370847デフォルトの名無しさん
2009/04/08(水) 19:49:020848デフォルトの名無しさん
2009/04/08(水) 20:08:48とりあえず、簡単なものをlambda再帰してみた
;; fibonacii lambda version
((lambda (f) (f f 1 1))
(lambda (g x y)
(if (> x 2147483648)
'()
(cons x (g g y (+ x y))))))
;; fizzbuzz lambda version
(reverse
((lambda (f) (f f 100))
(lambda (g x)
(cond ((= x 0) '())
((= (modulo x 15) 0) (cons "FizzBuzz" (g g (- x 1))))
((= (modulo x 5) 0) (cons "Buzz" (g g (- x 1))))
((= (modulo x 3) 0) (cons "Fizz" (g g (- x 1))))
(else (cons x (g g (- x 1))))))))
でも、>>776の(lambda(x) ((f (y f)) x))は未だに理解できていないが
(lambda (x) x)はxを返すのは、わかるんだけど
(lambda (x) (x))は、何を返すの?
0849デフォルトの名無しさん
2009/04/08(水) 21:00:04(define f (lambda () (lambda (x) (+ x 1))))
(((lambda (x) (x)) f) 2)
λ式の関数適用ってλx.M Nの形だから
(lambda(x) (x))は、理論的にはラムダ式ではないな
間違ってたらつっこみ希望
0850デフォルトの名無しさん
2009/04/08(水) 21:53:50頭が回りませんでした
こう書けばよかったんですね
(define f (lambda () ((lambda (x) (+ x 1)) 2)))
((lambda (x) (x)) f)
; (lambda (x) ((x)))だと、こうして渡すとちゃんと受け取ってくれるのか
(define f (lambda () (lambda () ((lambda (x) (+ x 1)) 2))))
((lambda (x) ((x))) f)
> λ式の関数適用ってλx.M Nの形だから
> (lambda(x) (x))は、理論的にはラムダ式ではないな
抽象度が高くて、わからないっす
λ式の関数適用ってλx.M NのN形のの意味がわかりません
x,M,Nは、何の意味は、なんですか?
xは変数(関数も含む?),M,Nは自然数ですか?w
(lambda (x) (x))の扱い方が理解できたので、満足しました
解説、ありがとうございました
0851デフォルトの名無しさん
2009/04/08(水) 22:08:49む、いわれてみれば、不思議だ。
そもそも、(f)という無引数の関数評価自体、ラムダ計算的にはどういうことなんだろう?
たぶん、lisp内の関数適用用一般関数applyを入れて(f)は(λx.apply x)fと考える、よって、(lambda(x) (x))は(λx.(λy.apply y)x)⇒(λy.apply y)みたいに考えるべきなのかな。
教えて、エロイ人。
0852デフォルトの名無しさん
2009/04/08(水) 22:30:19だからthunkとthunkの返す値を同一視する。
正格評価のLispやOCamlだとそうはいかないから
Lispではthunkという概念を導入し、OCamlでは無引数の関数がない。たぶん
あんまり詳しくないんで間違っていたらツッコミ希望。
0853デフォルトの名無しさん
2009/04/08(水) 22:54:540854デフォルトの名無しさん
2009/04/08(水) 22:59:230855デフォルトの名無しさん
2009/04/08(水) 23:00:05(apply 関数 リスト)
引数が0個なら、空リストに関数を適用する。
(apply 関数 '())
つまり長さが0だろうが何だろうがリストが1個必要なことには変わりない。
一方、λ計算の関数適用にも引数が1個必要だがそれはリストでなくても良い。
0856デフォルトの名無しさん
2009/04/08(水) 23:00:250857デフォルトの名無しさん
2009/04/08(水) 23:06:30・デフォルトでは簡約されない
・しかし一度簡約すると決めたら簡約できなくなるまで簡約するぞ
なんで
無引数の関数みたいに「一段階だけ簡約します」みたいなものがないってことかな
というか「簡約の段階」ってのは実装上の問題であって
言語内に持ち合わせていないってほうが近いのかな
0858デフォルトの名無しさん
2009/04/08(水) 23:32:12(f)という表記を
λx.M Nに当てはめるとλx.f ()と考えれば良いわけだ
car/cdr/cons自体はλ式で表現出来るから
()に当たるλ式を適当に一つ決めれば
(lambda (x) (x))は
(lambda (x) (x '()のλ式表現'))とすればよいね
>>850
M,Nもλ式。自然数もλ式で表現する
ラムダ計算でググったらwikiに3行で定義がかいてある
0859デフォルトの名無しさん
2009/04/08(水) 23:33:270860デフォルトの名無しさん
2009/04/09(木) 00:19:120861デフォルトの名無しさん
2009/04/09(木) 00:45:470862デフォルトの名無しさん
2009/04/09(木) 13:49:35(λx. M N)は(M N)のλ抽象でしょう
それとカリー化λ計算は全ての関数は一つの引数を受け取るという前提だから
(x) ≡ xであって(x ())では無いと思う
0863デフォルトの名無しさん
2009/04/09(木) 13:56:28副作用も扱うから1以上に強制する意味もないだろうし
何の基盤もないのに無理矢理当てはめようとしてもうまくいかない
0864デフォルトの名無しさん
2009/04/09(木) 14:30:00#f
(equal? (+) +)
#f
0865デフォルトの名無しさん
2009/04/09(木) 15:03:190866デフォルトの名無しさん
2009/04/09(木) 15:11:04Lisp式で直接純粋λ計算を扱うのには向いてないだけ
リストを扱うのは得意だからλ式の簡約の実装には向いているはず
(S式でλ式を表現するのは容易だし)
0867デフォルトの名無しさん
2009/04/09(木) 15:23:37(x) ≡ (apply x '())
零の発見みたいだな
nilもそうだが、applyの発見もおもしろい
0868デフォルトの名無しさん
2009/04/09(木) 15:26:59純粋λ計算がLispの式を表現するのに向いてない、かな
0869デフォルトの名無しさん
2009/04/09(木) 17:50:26確かにあれは構文木というものを教えるのに向いてない気がする
0870デフォルトの名無しさん
2009/04/09(木) 18:08:59構文木そのものをλ項として表現しないといけない。
構文木を受け取り、一段階だけ簡約した構文木を返す関数の連鎖みたいなメンドイことになりそう。
そこまでいくとForthを
「全てのワードは1つのスタックを受け取り1つのスタックを返す関数である参照透明な言語」とみなすくらいの労力がいるんじゃなかろうか。
0871デフォルトの名無しさん
2009/04/09(木) 18:24:38単純なものは簡単に書けるけど、
(もちろんProlog系や、Perl系のスクリプト言語でも)
プリティプリントの実装と、
使う評価方式の仕様策定が意外と面倒だし、
場合によっては複数の評価方式を実装しないと、
簡約具合をいろいろ試すのに実用的にならない。
0872デフォルトの名無しさん
2009/04/09(木) 20:01:38Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
そうすれば、Haskellにはうんぬんとか余計なことを考えなくて済む。
0873デフォルトの名無しさん
2009/04/09(木) 20:05:40> Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
具体的になんのことを指しているの?
0874デフォルトの名無しさん
2009/04/09(木) 20:59:06defineやletrecやset!を封印したScheme
0875デフォルトの名無しさん
2009/04/09(木) 23:26:280876デフォルトの名無しさん
2009/04/09(木) 23:31:400877デフォルトの名無しさん
2009/04/10(金) 03:27:58Yコンビネータなくても再帰定義できるλ式もどきじゃないのかな。
Call by valueの評価器作るのはわりと簡単なんだけど、
それじゃYコンビネータは扱えないし。
0878デフォルトの名無しさん
2009/04/10(金) 07:14:410879デフォルトの名無しさん
2009/04/10(金) 08:35:26おいおい、一段階だけ簡約、、の話はもう終わりか
0880デフォルトの名無しさん
2009/04/10(金) 09:18:530881デフォルトの名無しさん
2009/04/10(金) 19:16:10Yコンビネータなしの再帰ってどんな表現になるのですか?
0882デフォルトの名無しさん
2009/04/10(金) 19:35:270883デフォルトの名無しさん
2009/04/10(金) 19:38:380884デフォルトの名無しさん
2009/04/10(金) 19:41:050885デフォルトの名無しさん
2009/04/10(金) 19:44:540886デフォルトの名無しさん
2009/04/10(金) 19:51:52自分を参照するには自分を引数にする
という簡単なロジックですよ
Yはその応用例のひとつにすぎない
0887デフォルトの名無しさん
2009/04/10(金) 20:01:060888デフォルトの名無しさん
2009/04/10(金) 20:11:320889デフォルトの名無しさん
2009/04/11(土) 00:53:42(define theta
(let ((x (lambda (x) (lambda (y) (y (lambda (arg) (((x x) y) arg))))) ))
(x x)))
こうなったんだけど
なーんかλを使った表記と綺麗に対応が取れてないように思える
(lambda (arg) ...て部分は一体どこから来るの?
0890デフォルトの名無しさん
2009/04/11(土) 01:06:02λ算法は lazy なので、eager な lisp では 評価を遅延するために thunk を作る必要がある。
(lambda (arg) ...) がそれ。
0891デフォルトの名無しさん
2009/04/11(土) 02:10:10lispの達人にはほど遠いけど、括弧だけは見えなくなりました!・∀・ステキ!
0892デフォルトの名無しさん
2009/04/11(土) 09:00:45(lambda (arg) ...) で囲むことで、これは procedure ですよという型付けをしていると
解釈することもできるぜ。
0893デフォルトの名無しさん
2009/04/11(土) 12:09:16同じ問題を違う言葉で言いかえただけなんじゃね?
0894デフォルトの名無しさん
2009/04/11(土) 13:11:310895デフォルトの名無しさん
2009/04/11(土) 18:35:53eager な型推論では infinite type を遅延するゴニョゴニョ・・・
0896デフォルトの名無しさん
2009/04/11(土) 20:56:500897デフォルトの名無しさん
2009/04/11(土) 21:49:26なるほどSICP3章あたりであった気がします
要復習ですね
>>892
しかしxやyの型を考えるとさらにわけがわからなくなる気がします
エラーを参考に考えれば簡約していったらyの引数はprocedureじゃないと駄目だから適当に辻褄併せすりゃ
件のprocedureの形になるとかそういう具合の予想はできますが
Hindley-Milner type inference algorithmはsimply typed lambda calculus用のもので、
simply typed lambda calculusはstrongly normalisingで、
strongly normalisingであるのは無限に簡約できる式を含まないから??
適当にwikipediaでType_inferenceで調べた結果の単語を並べたけどよくわからない
>>893の言う関連性というのはschemeで無限に簡約され続けて無限ループになるものが、
haskellでは型推論の時に検出されてエラーになってるということかな?
0898デフォルトの名無しさん
2009/04/11(土) 22:17:54ラムダ式のコンストラクタで遅延、applyで発火とするのは、
処理系の実装上の問題に過ぎない。
たまたまS式を使っているから、Lisp上で同じ型になっているに過ぎない。
元のラムダ算法ではまったく別のもの。
thunkはラムダ算法上のファーストクラスのオブジェクトではない。
0899デフォルトの名無しさん
2009/04/11(土) 23:02:42型付きλ計算ではfixが型付けできないからファーストクラスの演算子として用意していると解釈していたんだけど
0900デフォルトの名無しさん
2009/04/11(土) 23:20:25http://en.wikipedia.org/wiki/System_F
という型付きλ計算の体系でなら
forall a. (a -> a) -> a
という型を持っていると解釈され、>>792のようにふつうの関数として定義できる。
0901デフォルトの名無しさん
2009/04/11(土) 23:21:31その再帰用演算付加の定式化で有名なのが、ゲーテルの体系TとPCFです。
ちなみに情報学板にλ計算スレありますよ。
大学の講義用資料にいいのがたくさん転がってますしね。
0902デフォルトの名無しさん
2009/04/12(日) 00:02:21ゲーテルの不完全性定理?
0903デフォルトの名無しさん
2009/04/12(日) 00:10:24http://science6.2ch.net/test/read.cgi/informatics/1165506353/
0904デフォルトの名無しさん
2009/04/12(日) 00:11:05ゲーデルの体系Tというのはこれ↓のことだお
http://math.stanford.edu/~feferman/papers/dialectica.pdf
0905デフォルトの名無しさん
2009/04/12(日) 15:18:090906デフォルトの名無しさん
2009/04/12(日) 19:30:51例えば (+ 1 2) を構文解析した場合 + は構文木上どのような項に
ぶら下がることになるのでしょうか?
BNFを見てる限り
<program>
<command or definition>
<command>
<expression>
<procedure call>
<operator>
<expression>
<literal>
<self-evaluating>
<string> <- この下?
になるのか? とも思うのですが普通に考えると扱いが特別な予約語
にしか見えないですし、どうなるのが正しいのかと・・
ごく単純な考え違いっぽいですが、教えて頂けましたら幸いです
0907デフォルトの名無しさん
2009/04/12(日) 20:49:11たとえば、(A B C)とあった場合
まず式A、式B、式Cをある順番(A, B, CとかC, A, Bとか任意の順番)で評価する。
それからリストの先頭の評価結果(この場合は式Aの結果)を手続き、残りの式の結果を引数とみなして適用する。
(+ 1 2)はまず+と1と2をそれぞれ「ある順番で」評価する。
+は識別子なので、その環境での値が結果となる。
R5RSではトップレベルの+は評価されると足し算手続きになる。
もし
(let ((+ cons))
(+ 1 2))
のように+がローカルに束縛されていたら、その値に評価される。
(R5RSの場合は、正確には識別子は値ではなく記憶領域に束縛される)
1と2はself-evaluatingだからそのまま1と2に評価される。
0908デフォルトの名無しさん
2009/04/12(日) 20:50:59fooとかxとかyなどの識別子と一緒
0909デフォルトの名無しさん
2009/04/12(日) 21:50:20Aがまず評価される
その後Aが手続きであればBとCが任意の順番で評価される
0910デフォルトの名無しさん
2009/04/12(日) 21:59:36お返事をありがとうございました。単独の(+ 1 2) の+は
結局、一般の識別子扱いで上の書き方でいくなら
<program>
<command or definition>
<command>
<expression>
<procedure call>
<operator>
<expression>
<variable>
<any <identifier> that is'nt..>
<peculiar identifier> <- この下
1,2は
<procedure call> 上と同じノード
<operand>
<expression>
<literal>
<self-evaluating>
<num> <- この下
になりそうですが、実装としては
「トップレベルの+は評価されると足し算手続きになる」
という内容を、露骨にリストの先頭に識別子を見つけた場合の
処理の一部に明示的に書き込まない限り、単にsyntax 上の判別だけ
では構文木は作れない・・ことを意味しているようにも見えますが・・
もう少しまじめに仕様を見てみます
0911デフォルトの名無しさん
2009/04/12(日) 22:57:37書き方がまずかったけど、Aが一番に評価されるとは限らない
Aが構文キーワードか否かの判定がまずされるだけで
もし構文キーワードでなければAとBとCはどの順番で評価されても規格上構わない
0912デフォルトの名無しさん
2009/04/12(日) 23:09:41・構文キーワードに束縛されている(ifとかquoteとか)
・記憶領域に束縛されている(場所の名前ともいう、普通の変数のこと)
・未束縛
に分類される。
リストの先頭が
・識別子かどうか
・識別子なら構文キーワードに束縛されているか
という判定が各式の評価に先行して行われる。
0913デフォルトの名無しさん
2009/04/13(月) 00:22:21R5RSのformal syntax/semanticsによれば、
ifやquoteは「束縛されて」いるわけでなく、
アプリオリに構文キーワードであり、
直ちに<conditional>や<quotation>を成す事になっている。
具体的には、環境に対してifをlookupする意味関数になってない。
多くの処理系では環境をlookupしているが。
0914デフォルトの名無しさん
2009/04/13(月) 02:21:19マクロ環境を扱うならこの順番が自然なのかね
0915デフォルトの名無しさん
2009/04/13(月) 16:19:57> if
#<syntax if>
と返すものはオペレータが先
scheme48みたいに
> if
Error: undefined variable
となるものはオペランドが先の傾向にあるかも
0916デフォルトの名無しさん
2009/04/14(火) 03:40:58#<primitive-builtin-macro! if>
のインタプリタみたいに評価する関数ってなんですか?
guile, gauche とも知りたいです
できれば、clisp, cmucl, sbcl もw
0917デフォルトの名無しさん
2009/04/14(火) 10:59:59evalのこと言ってんの?それとももっと哲学的な問いか?
0918デフォルトの名無しさん
2009/04/14(火) 17:46:550919デフォルトの名無しさん
2009/04/14(火) 20:36:31哲学的意味ではないです
evalでいけますね
なんか勘違いしていました
関数型言語を使うと、「哲学的に考えると・・」とか、「メタ的にとらえると・・・」とか、
考えることが多くなるんでしょうかね
手続き型言語を使っていたときは、そこまでつっこんで考えていたいなかったようなあ
人生の中でそういう時期なだけなのかな
0920デフォルトの名無しさん
2009/04/14(火) 21:12:110921デフォルトの名無しさん
2009/04/15(水) 00:01:290922デフォルトの名無しさん
2009/04/15(水) 00:03:060923デフォルトの名無しさん
2009/04/16(木) 19:54:20厨の俺にとって、響きがかっこいい、というのは重要w
Befungeとか名前がカコイイ
IConとかCatはカワイイ
そして、Lolliは潔い
0924デフォルトの名無しさん
2009/04/16(木) 20:14:090925デフォルトの名無しさん
2009/04/16(木) 21:01:50こんなことできるんだね
数式処理には確かに向いてる
(setq a 'b)
(setq b 'c)
(setq c 5.2)
(print (eval c));5.2
(print (eval b));5.2
(print (eval ( eval a)));5.2
0926デフォルトの名無しさん
2009/04/17(金) 11:39:02何か理由があるの?
0927デフォルトの名無しさん
2009/04/17(金) 12:35:29hg って入力する時、
H爺を連想して嫌なんだ。
0928デフォルトの名無しさん
2009/04/17(金) 12:40:130929デフォルトの名無しさん
2009/04/17(金) 14:53:22わかります
0930デフォルトの名無しさん
2009/04/17(金) 23:52:46git は判らんが darcs に関しては common-lisp.net で使えるというのはあるんじゃないか。
0931デフォルトの名無しさん
2009/04/18(土) 00:16:480932デフォルトの名無しさん
2009/04/18(土) 03:31:49【GNU】スクリプト言語 Guile【scheme】
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
0933デフォルトの名無しさん
2009/04/18(土) 03:42:300934デフォルトの名無しさん
2009/04/18(土) 04:51:31なんかわかるなぁ
最初のころは??だっが、解ってしまえば、すごく単純なことだった。
0935デフォルトの名無しさん
2009/04/18(土) 05:12:39guileを中心に勉強している身としては、うれしいがw
本当に大胆だな
Guileスレを立てた1は、週1で簡単なスクリプトでいいから、投稿してくれ
0936デフォルトの名無しさん
2009/04/18(土) 08:10:040937デフォルトの名無しさん
2009/04/18(土) 20:41:500938デフォルトの名無しさん
2009/04/18(土) 21:22:57お前が作ればある。
0939デフォルトの名無しさん
2009/04/19(日) 17:52:55そういうのはもううんざりなんだよ
0940デフォルトの名無しさん
2009/04/19(日) 18:46:470941デフォルトの名無しさん
2009/04/19(日) 21:09:04「この文は偽である」の真偽値を返す述語はYコンビネータだ
0942デフォルトの名無しさん
2009/04/20(月) 01:03:14集合論を用いて集合論の定義することは不可能です。
0943デフォルトの名無しさん
2009/04/20(月) 01:36:36このスレ的には、この本ですか?
0944デフォルトの名無しさん
2009/04/20(月) 02:34:33UNKNOWABLEがウンコはbleに見えた
0945デフォルトの名無しさん
2009/04/20(月) 07:10:530946デフォルトの名無しさん
2009/04/20(月) 09:07:40> 集合論を用いて集合論の定義することは不可能です。
0947デフォルトの名無しさん
2009/04/20(月) 11:17:55ドンブリ5杯問題について考えようぜ
0948デフォルトの名無しさん
2009/04/20(月) 20:41:340949デフォルトの名無しさん
2009/04/20(月) 21:41:50それなあに?(・∀・)
0950デフォルトの名無しさん
2009/04/20(月) 22:22:36与えられた店舗レイアウト、店員、客、設備、コストなどの条件からドンブリの挙動を計算する
チェーン店の人員計画に利用される手法
0951デフォルトの名無しさん
2009/04/20(月) 22:25:04ドンブリの挙動ってなによ?
0952デフォルトの名無しさん
2009/04/20(月) 22:30:260953デフォルトの名無しさん
2009/04/20(月) 22:33:17まかないとして多量にごはんを転用した店員には訴訟で対応するといったルールが実在する
ドンブリ5杯が目安とされることから俗に>>949のように呼ばれる
0954デフォルトの名無しさん
2009/04/20(月) 22:36:28プレイヤーを戦わせている・・・と聞いたことがある
0955デフォルトの名無しさん
2009/04/20(月) 22:37:340956デフォルトの名無しさん
2009/04/20(月) 23:17:170957デフォルトの名無しさん
2009/04/20(月) 23:22:370958デフォルトの名無しさん
2009/04/20(月) 23:31:28http://cpch.jp/archives/1880
0959デフォルトの名無しさん
2009/04/20(月) 23:32:54入店・退店のオペレーションをひとつのプロジェクトと仮定して簡単に図式化して説明しておく。
http://jibun.atmarkit.co.jp/lskill01/special/pmbok3rd/pmbok_02.gif
立ち上げプロセス群: いわゆる『並び』および『食券の購入』プロセス。
ここでしくじると、他のロティストから入店を拒否されても文句は言えない。
計画プロセス群: 『着席』『硬軟コール』『トッピングコール』プロセス。
この辺は説明しなくても解るだろうと思われるので割愛。
実行プロセス群: 『食す』プロセス群。もちろん『食す』といっても実はそのプロセスはさらに細分化されるのだが、
初心者はとにかく早く食べる事を心がける事。(『撮影』『デュエル』などは上級者がすることです。)
※計画・実行プロセス群がサイクリックになっている理由はあえて説明するまでもないだろうが、
これこそがロットリズムそのものであり、オペレーションの中核である。店と客が一体になってこその「二郎」である。
監視・コントロールプロセス群: 店主、助手、他のロッターによる『マナー監視』『リズム監視』などのプロセス。
規律あるオペレーションに協力しよう。
終結プロセス群: これは簡単。どんぶりをカウンターに上げ、テーブルを拭き、大きな声でご馳走様を言い店を出よう。
ただし・・・万が一残してしまった場合は、ここには書けないような恐ろしい事になるので覚悟しよう。
以上、誰でもわかるようにおおまかにロットプロセスを説明してみた。
もちろん、このサイクルは「入店・退店」のみならず、さまざまなロット概念階層に適用される。
野菜山ひとつ口に運ぶのにもこの図式は適用されるし、
二郎と出会い、そしていつか体を壊すまでもひとつの大きなロットサイクルと捉えることができる。
デュエルやバトルにも、全く異なるプロセスで構成されるロットサイクルが存在する。
最低でも以上の説明を頭に叩き込み、理解し、イメージトレーニングを重ねた上で実戦に臨んでいただきたい。
0960デフォルトの名無しさん
2009/04/21(火) 00:03:11http://up2.viploader.net/pic/src/viploader987233.jpg
0961デフォルトの名無しさん
2009/04/21(火) 02:12:310962デフォルトの名無しさん
2009/04/21(火) 03:48:42(print (kmrcl:command-output "pwd"))
sbclだとちゃんとディレクトリの文字列が返値になる
clispだとなにもかえってこない
kmrcl:command-output使うと実装依存の外部コマンド実行の違いを吸収してくれるんじゃなかったのか
0963デフォルトの名無しさん
2009/04/21(火) 21:44:16懐かしいなぁ
0964デフォルトの名無しさん
2009/04/23(木) 09:09:27東大の先生が作ったみたい
0965デフォルトの名無しさん
2009/04/23(木) 12:30:420966デフォルトの名無しさん
2009/04/23(木) 13:35:471つめはいろいろ多機能なんだけどdotimesを多様してcとあんまり変わらない書き方
基本になってるクラスもあんまりよくない作りにみえる。しかし最近まで更新されてるし機能も沢山
2つめは、だいぶ前に更新止まってるけど、基本のクラスがよく考えて作ってある感じ。
しかしやる気のなさみたいのも感じられて,それぞれの機能の作りこみが中途半端
自分で書き換えながら使うにはいいと思う
この2つのどっちを使うのがいいのだろう
0967デフォルトの名無しさん
2009/04/23(木) 19:09:04用途による。
0968デフォルトの名無しさん
2009/04/23(木) 19:13:16実際に晒して、議論すればいいだろ
伏せている意味がよくわからん
0969デフォルトの名無しさん
2009/04/23(木) 19:31:041.
http://cyrusharmon.org/static/projects/ch-image/doc/ch-image.xhtml
2.
http://matthieu.villeneuve.free.fr/dev/imago/examples.html
0970デフォルトの名無しさん
2009/04/23(木) 20:05:49エロい人の降臨を待とう
こういう場合は、どのくらい真面目に使いたいのかにも関係してくるのかな
0971デフォルトの名無しさん
2009/04/23(木) 20:10:300972デフォルトの名無しさん
2009/04/23(木) 21:33:03改造しやすいコードとしてはどっちが好きですか?
0973デフォルトの名無しさん
2009/04/23(木) 22:41:170974デフォルトの名無しさん
2009/04/23(木) 23:18:460975デフォルトの名無しさん
2009/04/24(金) 20:02:32Lisp Scheme Part26
http://pc12.2ch.net/test/read.cgi/tech/1240567959/
それにしても連投規制がきつすぎて、テンプレ全部貼るのに40分以上かかります。
まとめサイトを作ってそこに誘導するなりした方がいいかもしれません。
0976デフォルトの名無しさん
2009/04/24(金) 20:05:331で
ttp://wiki.fdiary.net/lisp/
ここ見れ、以上。
だけでいい気がします
0977デフォルトの名無しさん
2009/04/24(金) 20:13:37おつ
規制というよりレス数とリンクが多すぎだね
>>976
半分同意かな
でも、ちょっと乱暴過ぎな気がする
1-3,4レスぐらい(1レス32行の範囲で)使って、うまく誘導してもいいかも
布教したい派はテンプレ案を提案するといいかも
布教したい派がいないんであれば、976さん案でいいと思う
0978デフォルトの名無しさん
2009/04/24(金) 22:32:37乙です
0979デフォルトの名無しさん
2009/04/25(土) 01:08:02乙。このスレ、マジでテンプレ貼るの辛いよな。
>>976
同意。テンプレが長すぎるから埋もれるんであって、
シンプルに示してあれば、自然と目も行くと思う。
0980デフォルトの名無しさん
2009/04/25(土) 02:01:09みてみたけど、Wikiの編集カテゴリがないね
Wikiもそうだし、スレもそうだけど、LispとSchemeと分けたほうが良くない?
Schemeを中心に勉強している身としてはWikiは見づらいね
せっかくだし、新規の人が多少入りやすいように整えたほうがいいかも
とか、言っちゃうと>>976さんの案自体が流れちゃうかな
とりあえず、>>976さんの案に賛成か、反対か、意見を聞きたいね
反対意見がないようなら、Part27から>>976さんの案採用で
0981デフォルトの名無しさん
2009/04/25(土) 02:48:240982デフォルトの名無しさん
2009/04/25(土) 05:52:03テンプレwiki化には賛成。保守する気があるなら
話題に出やすいGaucheみたいな処理系のスレなら分けてもいい
0983デフォルトの名無しさん
2009/04/25(土) 07:55:44なんでそこでGaucheだけなの?w
Gaucheも含めてSchemeスレじゃ駄目なの?
今まではLL言語だからってRubyとPythonを同じスレにしているようなもんだよね
「Lispと言ったら、Common Lispのことを指して、Schemeのことは指さない」うんぬんとか、言わないんだね?
そのくらい寛容な人の集まりなら、このままでもいいと思うが
まあ、なんだかんだ言ってスレ内でうまく共存しているんだがなあw
0984デフォルトの名無しさん
2009/04/25(土) 09:49:28フェミ団体みたい
0985デフォルトの名無しさん
2009/04/25(土) 10:06:460986デフォルトの名無しさん
2009/04/25(土) 10:34:570987デフォルトの名無しさん
2009/04/25(土) 11:02:57その上で処理系ごとのスレ建てるのは好きにやってくれって事で。
0988デフォルトの名無しさん
2009/04/25(土) 11:06:47現状のままでいいと思う。
0989デフォルトの名無しさん
2009/04/25(土) 11:43:37フェミ団体って分裂したの?
kwsk
>>985
連合赤軍が人質をとって、立てこもったのは知っているけど
襲撃って痺れを切らした警察側の話?
0990デフォルトの名無しさん
2009/04/25(土) 12:03:42と言うべきだったかな。
単なる冗談です。
0991デフォルトの名無しさん
2009/04/25(土) 22:46:58と注釈すればいい
0992デフォルトの名無しさん
2009/04/25(土) 23:50:370993デフォルトの名無しさん
2009/04/25(土) 23:53:16詳しくは過去ログに
0994デフォルトの名無しさん
2009/04/26(日) 00:02:510995デフォルトの名無しさん
2009/04/26(日) 00:03:580996デフォルトの名無しさん
2009/04/26(日) 00:07:250997デフォルトの名無しさん
2009/04/26(日) 00:07:50LISPはたくさんあるのに、
LISP=CommonLISPの略だとするのはおかしい
って意見があって、だったらCommonLISPは専用スレ立てましょう、
みたいな感じでまとまったんだっけ??
それでなぜか「入門」スレが立ってて俺はあるぇ〜?って感じで読んでた。
正直、
0998デフォルトの名無しさん
2009/04/26(日) 00:20:060999デフォルトの名無しさん
2009/04/26(日) 00:31:26【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
http://pc12.2ch.net/test/read.cgi/tech/1140006937/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。