Lisp Scheme Part26
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/04/24(金) 19:12:39■過去スレ
Part25: ttp://pc12.2ch.net/test/read.cgi/tech/1231856193/
Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/
Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc11.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc11.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc11.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc11.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc11.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc11.2ch.net/test/read.cgi/tech/1075630259/
Part09: ttp://pc11.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
■テンプレート置き場
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
0002デフォルトの名無しさん
2009/04/24(金) 19:14:30□The final public draft of the ANSI X3.226-1994 (英語)
ttp://lispm.dyndns.org/news?ID=NEWS-2009-02-22-1
□CLtL2: Common Lisp the Language 2nd edition (英語)
ttp://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html
□CLHS: Common Lisp Hyper Spec (英語)
ttp://www.lispworks.com/documentation/HyperSpec/Front/index.htm
□Common Lisp Quick Reference (英語)
ttp://clqr.berlios.de/
□R5RS: Revised(5) Report on the Algorithmic Language Scheme (英語)
ttp://swiss.csail.mit.edu/~jaffer/r5rs_toc.html
□R5RS: Revised(5) Report on the Algorithmic Language Scheme (日本語)
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html
□ERR5RS: A proposal for an Extended R5RS Scheme (英語)
ttp://scheme-punks.cyber-rush.org/wiki/index.php?title=ERR5RS:Charter
□R6RS: Revised(6) Report on the Algorithmic Language Scheme (英語)
ttp://www.r6rs.org/final/html/r6rs/r6rs.html
■Lisp全般に関する情報源
□LISP - Wikipedia (日本語)
ttp://ja.wikipedia.org/wiki/LISP
□Association of Lisp Users (英語): 米国のLispユーザ会です。
ttp://www.alu.org/alu/home
□日本Lispユーザ会 (日本語): 各種処理系や関連書籍の一覧等。
ttp://jp.franz.com/jlug/index.html
□LispUser.net (日本語): Lisp関連の有用な情報がまとめられています。Common Lispの話題が中心。
ttp://lispuser.net/
□John McCarthy's Home Page (英語): Lispの生みの親、John McCarthyのサイト。
ttp://www-formal.stanford.edu/jmc/
□どう転んでもLisp (日本語): 竹内郁雄氏による発表のスライドです。
ttp://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Takeuchi.files/v3_document.htm
0003デフォルトの名無しさん
2009/04/24(金) 19:15:21□Common Lisp - Wikipedia (日本語)
ttp://ja.wikipedia.org/wiki/Common_Lisp
□CLiki (英語): Common Lisp関連のリソースが集積されています。
ttp://www.cliki.net/index
□Common-Lisp.net (英語): 多くのプロジェクトがホスティングされています。
ttp://common-lisp.net/
□CMU Common Lisp Repository (英語): 新旧様々なプログラムが置いてあります。
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html
□The EncyCMUCLopedia (英語): CMUCL関連文書。CMUCLユーザーでなくとも有益なはず。
ttp://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/
□The Common Lisp Cookbook (英語): いわゆるCookbookです。
ttp://cl-cookbook.sourceforge.net/
■Schemeに関する情報源(1)
□Scheme - Wikipedia (日本語)
ttp://ja.wikipedia.org/wiki/Scheme
□プログラミング言語Scheme (日本語): Schemeの人はまずここを見ましょう。
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/scheme.html
□Scheme-users.jp (日本語): Schemeユーザのためのハブサイトです。
ttp://scheme-users.jp/
□Schemeへの道 (日本語): Schemeの入門サイト。
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
□独習Scheme三週間 (日本語): Schemeの教科書。
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html
□Practical Scheme (日本語): Scheme処理系「Gauche」の作者である川合史朗氏のサイト。
Paul Grahamの「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されています。
ttp://practical-scheme.net/index-j.html
0004デフォルトの名無しさん
2009/04/24(金) 19:16:06□Bibliography of Scheme-related Research (英語): Scheme関連の論文リンク集。
ttp://library.readscheme.org/
□Scheme Hash (英語): S式でXMLを使えるようにするSXML等。
ttp://okmij.org/ftp/Scheme/index.html
□(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/
□継続関連
□なんでも継続 (日本語)
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/
0005デフォルトの名無しさん
2009/04/24(金) 19:16:50□Common Lisp: A Gentle Introduction to Symbolic Computation (英語):
Common Lispを使った非常に丁寧なプログラミング入門書。
全文がpdf形式でダウンロードできます。
ttp://www.cs.cmu.edu/~dst/LispBook/
□Common Lisp: An Interactive Approach (英語):
人工知能の大家、Stuart ShapiroによるCommon Lispの教科書。
全文がpdf形式でダウンロードできます。
ttp://www.cse.buffalo.edu/~shapiro/Commonlisp/
□On Lisp (英語/日本語):
LispハッカーPaul Grahamが、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 (英語原文がダウンロード可)
□Practical Common Lisp (英語/日本語):
S式の羅列で現実的な問題をどう解くのか、そのギャップに悩まされてる人に。
全文がオンラインで読めます。日本語版は『実践Common Lisp』として出版されています。
ttp://www.gigamonkeys.com/book/
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06721-1
ttp://pcl.lispuser.net/ (日本語版非公式サポートページ)
0006デフォルトの名無しさん
2009/04/24(金) 19:17:50□Structure and Interpretation of Computer Programs (英語/日本語):
通称「SICP」として知られる計算機科学の教科書。全文がオンラインで読めます。
日本語版は『計算機プログラムの構造と解釈』として出版されています。
ttp://mitpress.mit.edu/sicp/
ttp://sicp.ipl.t.u-tokyo.ac.jp/ (日本語版サポートサイト)
□Programming Languages: Application and Interpretation (英語):
ブラウン大学で使われている、Schemeを使ったプログラミング言語論の教科書。
SICPでは触れられていない継続についても、Webアプリと関連づけて詳述されています。
ttp://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
全文がpdf形式でダウンロードできます。
□How to Design Programs (英語):
Schemeを使った優れたプログラミング入門書。全文がオンラインで読めます。
ttp://www.htdp.org/2003-09-26/Book/
□The Little Schemer/The Seasoned Schemer (英語):
Schemeの教科書として定評のある「Schemerシリーズ」のサポートページです。
ttp://www.ccs.neu.edu/home/matthias/BTLS/
ttp://www.ccs.neu.edu/home/matthias/BTSS/
□The Scheme Programming Language (英語):
Schemeの入門書。全文がオンラインで読めます。
ttp://www.scheme.com/tspl3/
□入門Scheme (日本語):
幻となったScheme入門書。全文がダウンロードできます。
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
□プログラミングGauche (日本語):
Scheme処理系言語「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 (サポートページ)
0007デフォルトの名無しさん
2009/04/24(金) 19:39:39□Steel Bank Common Lisp: 代表的な処理系。CMUCLより派生。
ttp://www.sbcl.org/
□CMUCL: カーネギーメロン大学で開発された処理系。
ttp://www.cons.org/cmucl/
□GNU CLISP: バイトコード変換系。
ttp://www.clisp.org/
□Clozure CL: OpenMCLから改名されました。
ttp://trac.clozure.com/openmcl
□Embeddable Common Lisp: Cで書かれたプログラムへの埋め込みが可能な処理系。
ttp://ecls.sourceforge.net/
□Armed Bear Common Lisp: JVM上で動く処理系。JVMバイトコード変換系。
ttp://armedbear.org/abcl.html
□Allegro Common Lisp: 代表的な商用処理系。無料試用版も有り。
ttp://www.franz.com/products/allegrocl/
□LispWorks: 商用処理系。無料試用版も有り。
ttp://www.lispworks.com/
□Corman Common Lisp: Windows専用の商用処理系。無料試用版も有り。
ttp://www.cormanlisp.com/
□Scieneer Common Lisp: CMUCLより派生した商用処理系。非商用利用なら無料。
ttp://www.scieneer.com/scl/index.html
0008デフォルトの名無しさん
2009/04/24(金) 19:41:04□Gauche: マルチバイト文字に対応したR5RS準拠処理系。川合史朗氏作。
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準拠のバイトコードインタプリタ。
ttp://www.s48.org/
□Gambit-C: R5RS準拠処理系。
ttp://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page
□Chicken: R5RS準拠処理系。スタンドアロン実行ファイルが簡単に作成可能。
ttp://www.call-with-current-continuation.org/
□Stalin: 激烈な最適化を施す処理系。人間の書く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準拠処理系。Javaインターフェイスをサポート。
ttp://jscheme.sourceforge.net/jscheme/main.html
0009デフォルトの名無しさん
2009/04/24(金) 19:42:17□Chez Scheme: R6RS準拠の商用処理系。インタプリタはフリー。
ttp://www.scheme.com/
□IronScheme: Microsoft DLR上で動作するR6RS準拠処理系。ERR5RSもサポート予定。
ttp://www.codeplex.com/IronScheme
□Ypsilon Scheme System: 藤田善勝氏が開発中のR6RS準拠処理系。
ttp://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon_Scheme_System
□Mosh: higepon氏が開発中のR6RS準拠処理系。
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上で動く処理系。これもSECD virtual machine。
ttp://www.lispme.de/lispme/
□Minischeme: 1ファイルに凝縮された処理系。
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/
0010デフォルトの名無しさん
2009/04/24(金) 19:43:13□awklisp: Awkで書かれたわずか500行のLispインタプリタ。
ttp://www.accesscom.com/~darius/
□CAMPUS LIsP Lemon version: Cでわずか1000行。
ttp://www-masu.ist.osaka-u.ac.jp/~kakugawa/hacks/clisp/
□Lisp interpreter in AS3: ActionScriptで書かれたLispインタプリタ。
ttp://www.solve-et-coagula.com/?p=8
□newLISP: Lispライクな軽量スクリプト言語。
ttp://www.newlisp.org/
□Arc: Paul Grahamが開発中の新しい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/
0011デフォルトの名無しさん
2009/04/24(金) 19:46:03□初心者が集うIRC
布教してくれる先生も大募集です。
irc.scenecritique.com:6667 #Lisp_Scheme
□Shibuya.lisp
東京地区、特に渋谷周辺半径2万キロのLisp系プログラマによる非営利団体。
第3回テクニカルトークは2009年7月4日開催予定です。
ttp://shibuya.lisp-users.org/
□GaucheNight 第2回 (2008年3月8日)
「SchemeとGaucheとλとS式を愛するすべての人に贈るマクロな一夜」
出演:川合史朗、伊藤篤、山下伸夫、笹田耕一、ひげぽん、zick、
黒田寿男、えんどうやすゆき、ほか
ttp://practical-scheme.net/wiliki/wiliki.cgi?gauche.night
□GaucheNight 第1回 (2007年5月9日)
出演:川合史朗、黒田寿男、まつもとゆきひろ(Skype中継)、小飼弾、
伊東勝利、久井亨、小黒直樹、ほか
ttp://practical-scheme.net/wiliki/wiliki.cgi?GaucheNight%3a2007
□黒田寿男氏関連 (黒板の人)
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/
0012デフォルトの名無しさん
2009/04/24(金) 19:59:27□Meadow memo: 2ちゃんねるログ: dat落ちした過去スレの一部が閲覧できます。
ttp://www.bookshelf.jp/2ch/index.html
□2ch上にあるLisp関連のスレ
【入門】Common Lisp その6【質問よろず】
ttp://pc12.2ch.net/test/read.cgi/tech/1234884136/
Emacs Lisp 3
ttp://pc12.2ch.net/test/read.cgi/tech/1191875993/
【GNU】スクリプト言語 Guile【scheme】
ttp://pc12.2ch.net/test/read.cgi/tech/1239985829/
【SICP】計算機プログラムの構造と解釈 Part2
ttp://pc12.2ch.net/test/read.cgi/tech/1203096230/
【普通のやつらの】 Arc Language 0 【上を行け】
ttp://pc12.2ch.net/test/read.cgi/tech/1202098949/
【魔法】リリカル☆Lisp【言語】
ttp://pc12.2ch.net/test/read.cgi/tech/1183396621/
【CGI】実用比較Lisp vs C/C++【GUI】
ttp://pc12.2ch.net/test/read.cgi/tech/1150501484/
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
ttp://pc12.2ch.net/test/read.cgi/tech/1140006937/
Lisp@UNIX版
ttp://pc12.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/
■スレ上でSchemeのコードを晒す場合は、こちらをご利用ください。
ttp://codepad.org/
0013デフォルトの名無しさん
2009/04/24(金) 20:32:17>>11
> □Shibuya.lisp
> 東京地区、特に渋谷周辺半径2万キロのLisp系プログラマによる非営利団体。
> 第3回テクニカルトークは2009年7月4日開催予定です。
> ttp://shibuya.lisp-users.org/
これ、参加しようかな
場所は、東京だよね?
料金は無料なんだね
>2/1日 21:00時より募集を開始した60名枠の観覧募集ですが、予想以上に速いペースで約2時間後の23時前に定員に達しました!
の状況をみると、財務処理とか大変になるかもだけど、資料代と称して1,000円ぐらいお金をとって欲しい感じだな
0014デフォルトの名無しさん
2009/04/24(金) 20:36:360015デフォルトの名無しさん
2009/04/24(金) 22:34:110016デフォルトの名無しさん
2009/04/24(金) 23:42:330017デフォルトの名無しさん
2009/04/24(金) 23:45:02乙
CL-USER>
0018デフォルトの名無しさん
2009/04/24(金) 23:52:590019デフォルトの名無しさん
2009/04/25(土) 01:11:270020デフォルトの名無しさん
2009/04/25(土) 01:25:36これはポニーテールがうんたらかんたら
0021デフォルトの名無しさん
2009/04/25(土) 11:23:43落ちそうなのでこっちで(もう話も終わると思うけど)
ここのスレはLispとSchemeの合同スレであり、派生したいヤツは勝手に派生してくれって話なのかな?
0022デフォルトの名無しさん
2009/04/25(土) 12:59:32あなた動機が不純なんだわ
フムフムヌクヌクアプアア
いつも手にして歩いてる
R6にはケチつけて
スーパーハカーを気取っているけど
何かが違うわ
かっこ かっこ かっこ かっこ
かっこ かっこ かっこばかり 先ばしり
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして schemeあなたの物じゃない
0023デフォルトの名無しさん
2009/04/25(土) 13:00:30言語仕様をANSIにしてる
再帰するのがエクスタシー
呼べばnilまで帰らない
もしも誰かに聞かれたら
SICPはとうに読み終えました いい本でした
かっこ かっこ かっこ かっこ
かっこ かっこ かっこつけて 泣きたいわ
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして lispはcommon一つじゃない
0024デフォルトの名無しさん
2009/04/25(土) 13:09:380025デフォルトの名無しさん
2009/04/25(土) 17:00:450026デフォルトの名無しさん
2009/04/25(土) 23:14:16つttp://www.youtube.com/watch?v=saIIZhhxsZo
0027デフォルトの名無しさん
2009/04/25(土) 23:22:45このころ、二十歳なんだって
すごいね
copperpony (7 か月前) 表示 非表示 +12 スパムとしてマーク 返信
20歳でこの凄みは21世紀の日本でも完全に大スターになれる。
こんなに迫力があるロック歌手が今いない
舞台映えするし美人で宝塚でも大スターになれそう
0028デフォルトの名無しさん
2009/04/25(土) 23:56:250029デフォルトの名無しさん
2009/04/26(日) 08:25:460030デフォルトの名無しさん
2009/04/26(日) 09:37:390031デフォルトの名無しさん
2009/04/27(月) 20:34:33metabangに入ってるかと思ったらなかった
違うテクニックを使うのが普通なんでしょうか
0032デフォルトの名無しさん
2009/04/27(月) 20:54:140033デフォルトの名無しさん
2009/04/27(月) 21:39:39Schemeは挫折せずにこなせるレベルだよね?
初学言語がC, Pythonと比較するとどうなんだろうなあ。
学習時間(20時間、200時間、2000時間、20000時間)にみるプログラミング自体のおもしろさの度合いの推移
懼20時間以降は他の言語に浮気してもかまわない。むしろ推奨する。また浮気言語も含めた学習時間とする。
だから、何?と聞かれても特にないけど
0034デフォルトの名無しさん
2009/04/27(月) 21:41:32Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人が初めてプログラミング言語を習うとして
Schemeは挫折せずにこなせるレベルだよね?
初学言語がC, Pythonと比較するとどうなんだろうなあ。
学習時間(20時間、200時間、2000時間、20000時間)にみるプログラミング自体のおもしろさの度合いの推移
・20時間以降は他の言語に浮気してもかまわない。むしろ推奨する。また浮気言語も含めた学習時間とする。
だから、何?と聞かれても特にないけど
0035デフォルトの名無しさん
2009/04/27(月) 22:12:24Lispにカリー化はないので、マクロで引数の順序かえたらいい
>>34
最初につまづくのは再帰によるループと、かっこの扱い(car,cdr,cons,list関連)
それがクリア出来そうならschemeが一番おすすめ。覚えることも他言語より少ない
ただ、これらは結構序盤にある山なのでそこが問題
個人的な経験からいえば
簡単に結果がわかる&ループがある言語から
入った方が初心者には優しいんじゃ無かろうか
その中だとCとPythonだが、Cはすすめにくい
Cはポインタ関連のわかりにくさと
副作用が多いプログラミングスタイルなので
例えばクイックソートなんかのアルゴリズム系は
関数型言語に比べてかなり理解しにくい
ただ、情報量は多い
PythonはLLなので
初心者にもさわりやすいとは思う
あと、わりとlispに近いと聞く
ただ、情報量はまだそれほど多くないかな?
しかし、Google効果で広まりつつあるようには思う
慣れてしまえば、プログラミング自体の楽しさは
Cに比べれば圧倒的にschemeかな
あと、世の中にあるコードは良質なものが多いし
いいプログラミングスタイルが身につく(ハッカーが多いので)
pythonはやったことないんでわからん
0036デフォルトの名無しさん
2009/04/27(月) 22:16:46そうでもなさそうだった
俺のおすすめルートは
やる気ある -> scheme
そうでない -> python
または python -> scheme
0037デフォルトの名無しさん
2009/04/27(月) 22:18:01-> 金、銀、perl
0038デフォルトの名無しさん
2009/04/27(月) 22:18:480039デフォルトの名無しさん
2009/04/27(月) 22:20:42ブルーダイヤで洗濯しまくる
0040デフォルトの名無しさん
2009/04/27(月) 22:26:30初心者にすすめるならrubyかな
perlは変なスタイルのプログラムが非常に多いから。
同じことがrubyにも言えるかもしれないが
perlよりはマシだろう、多分
0041デフォルトの名無しさん
2009/04/27(月) 22:31:49オサーン乙
0042デフォルトの名無しさん
2009/04/27(月) 22:39:28「初心者」というのは才能に関しても、興味の強さに関しても、
もちろんその他いろいろな特性(我慢強さとかね)に関しても
非常に広いスペクトルを持った集合だと思う。
なので、大雑把に「初心者」でくくるのでなく、もっと細かく
カテゴリー分けしないと、初学に最適な言語をアサインするのは難しいと思う。
最初のアサインに失敗するとプログラミング自体が嫌いになってしまうしね。
>>34
>Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人
同上。
0043デフォルトの名無しさん
2009/04/27(月) 22:41:52みんな偉いなあ。
おいら、最初にオブジェクト指向(といっても C++ ですがw)を知ったとき、
大喜びしたのはいいけど、どうでもいいことでもクラス設計からはじめるから、
とても効率悪かったなぁ。
(その後、テンプレートを知り、以下同文。)
最近の入門者はそういう罠(?)にははまらないんだろうか。
はじめっからオブジェクト指向だと、大喜びも何もないだろうから、
そんなくだらんことはしないのかな。
0044デフォルトの名無しさん
2009/04/27(月) 22:46:08便利さがあって当たり前の世代はまだ出会ったこととが無いけど、
たぶんニュータイプでしょう
0045デフォルトの名無しさん
2009/04/27(月) 22:59:290046デフォルトの名無しさん
2009/04/27(月) 23:02:32pythonの__hoge__系関数はCLOSの総称関数的だよね。
0047デフォルトの名無しさん
2009/04/27(月) 23:18:28javaもまあ、大差ない。Cほど簡単ではないが。
しかしPythonはちょっと難しい。明らかにワンランク上。
Schemeとなったら、さらにもうワンランク上の難しさだね。
読み方が。
0048デフォルトの名無しさん
2009/04/27(月) 23:27:28人工知能で注目された時代?
それともずっとマイナー?
0049デフォルトの名無しさん
2009/04/27(月) 23:27:410050デフォルトの名無しさん
2009/04/27(月) 23:30:33最初から gauche を正しく読めた人は少ないかも知れん。
0051デフォルトの名無しさん
2009/04/27(月) 23:31:370052デフォルトの名無しさん
2009/04/27(月) 23:45:16> 最初につまづくのは再帰によるループと、かっこの扱い(car,cdr,cons,list関連)
> それがクリア出来そうならschemeが一番おすすめ。覚えることも他言語より少ない
> ただ、これらは結構序盤にある山なのでそこが問題
いわゆるループはC的(手続き型言語的)考えた方なのかなと個人的に思うんだけどなあ
初学言語がSchemeだったら違う見え方になるのかなと思うし
> PythonはLLなので
> 初心者にもさわりやすいとは思う
> あと、わりとlispに近いと聞く
> ただ、情報量はまだそれほど多くないかな?
Webドキュメントはみやすいと思う
訳書は少ないかな
最近、入門書のクズ本が増えてきたみたいだけど
まあ、メジャーや注目度の証なのかなもしれないけど
vimとかの選択肢も多少あるけど、半強制的にemacsを触ることになるのがすごく良い気もするんだけどなあ
どうなんだろう
学習コストが高いからこそ最初がいいと思うんだよなあ
"難しいんではなく学習コストがある"というのは明確に伝えるべきだけど
コンピュータに関心のある10代の子は、どのくらい忍耐力がないんだろうなあ
0053デフォルトの名無しさん
2009/04/27(月) 23:49:32初学者だとしても単純なメモ帳でプログラミングする感覚はよくわからないけど
ダウンロードして、ダブルクリックするだけですぐ使える環境は、さすがにあるんじゃないの?
開発環境として主流でないだけで
0054デフォルトの名無しさん
2009/04/27(月) 23:51:21メモ帳でも書けるじゃない。Emacsやviを使うともっと楽に書けるってだけで。
他の言語に比べて、メモ帳で書きづらいのは確かだけどさ。
でも、Emacsやviを使ってると、括弧のお陰で移動が凄い楽だから、
トントンってところな気がする。
0055デフォルトの名無しさん
2009/04/27(月) 23:57:43小学生のときN88のFor Nextを理解するのに恐しいぐらい時間かけた気がする
さらに正確に書こうと思ったらホーア論理の初歩を知っておかないと
慣れるまでまともに動作するコードが書けないから
0056デフォルトの名無しさん
2009/04/28(火) 00:00:40恐ろしいくらいベーマガのソースコードを打ち込んだんですね。
わかります。
0057デフォルトの名無しさん
2009/04/28(火) 00:03:080058デフォルトの名無しさん
2009/04/28(火) 00:26:20ネットない時代だと悲惨だよね
なんの言語でもいいけど、入門書なんてなかった気がする
現行PCが30万〜40万する時代だからなあ
東京の人は別なのかもしれないが
ダウンサイジングってあるけど、これが超緩やかで2109年ぐらいが今のPC・ソフトの価格だったらどうだったんだろうなあ
お金儲けに走りすぎて、その副作用がすご過ぎる気がするなあ
大量生産・大量消費は人を幸せにしてきたか?
0059デフォルトの名無しさん
2009/04/28(火) 00:28:21俺はBASIC→機械語(Z80)→PASCALつまみ食い→LISP…てな順にやってきたけど
FOR NEXTやIF THEN (GOTO)でループには苦労しなかったな。
PASCALで初めて再帰を知ったときはちょっと感動した。
当時のBASICじゃローカル変数なんて当然無いから配列で擬似的にスタックを作ったりしたけど
GOSUBやFOR NEXTのネスティングは16重までだったから再帰なんて無謀だったなw
0060デフォルトの名無しさん
2009/04/28(火) 00:44:44int i;for(i=0;i<10;++i){printf("hello");}
scheme
(let loop ((s 0))
(if (< s 10) (begin (print "hello") (loop (+ 1 s)))))
python
for i in range(10):print("hello")
pythonは今インストールして0から勉強して30分ぐらいで上の式を作った
(他言語の前提知識がなければもっと時間かかると思う)
どうやらこれはpython3.0系という新しい非互換のバージョンらしく
新しいバージョンの情報は検索であまりヒットしなくて苦労した
初心者はこっちには手を出さない方が良さそうに思う
0061デフォルトの名無しさん
2009/04/28(火) 01:03:47replicateM_ 10 $ print "hello"
しかしモナドとかあるから論外ですね
0062デフォルトの名無しさん
2009/04/28(火) 01:12:08for i=0 to 9 do (print_string "hello";) done;;
でもOcamlも初心者向きじゃないかな
0063デフォルトの名無しさん
2009/04/28(火) 01:42:59for(var i = 0; i < 10; i++){alert("hello");}
ほとんどCと同じだな。
文法はシンプルだしブラウザ上で動くから入門向けにはいいんじゃないかな
this周りに若干癖があるけど
0064デフォルトの名無しさん
2009/04/28(火) 01:52:1410.times { puts "hello" }
0065デフォルトの名無しさん
2009/04/28(火) 02:00:05気がしてきた。
Ruby で入門した後、他の言語を勉強する時に、多分、苦労するぞ。
プログラミング言語は一個できたらそれで十分、
というのだったら、Ruby でも良いとは思うんだけど。
(もっとも、そういう人が Ruby を使えるようになるかについては、
これまた、疑問なんだけど。)
0066デフォルトの名無しさん
2009/04/28(火) 02:13:44print "hello" for (0..9);
0067デフォルトの名無しさん
2009/04/28(火) 02:17:50>10.times
なにそれ
コンピュータの常識や他の言語を意識して、言語仕様を決めるべきだと思うけど
その言語の性格上、現在の記述法が妥当であって統一感があればいいと思うけどなあ
Perlが流行ったのって正規表現が強力だったから?
広告宣伝に莫大なお金が投じられたわけでもないんだよね?
0068デフォルトの名無しさん
2009/04/28(火) 02:27:49for ($i=0;$i<10);$i++) {print "hello";}
foreach $i (0..9) {print "hello";}
とか
for i in Array.new(10)
print"hello"
end
Rubyならまぁこれでもいいけど統一感がないよな
初心者にはまったくお勧めできない
0069デフォルトの名無しさん
2009/04/28(火) 02:33:331.upto(10) {puts "hello"}
10.downto(1) {puts "hello"}
まぁ,いろいろあるね.
0070デフォルトの名無しさん
2009/04/28(火) 02:36:16どれが標準的な書き方なの?
0071デフォルトの名無しさん
2009/04/28(火) 02:39:1710.times {|i| puts i} => 0 1 2 3 4 5 6 7 8 9
1.upto(10) {|i| puts i} => 1 2 3 4 5 6 7 8 9 10
10.downto(1) {|i| puts i} => 10 9 8 7 6 5 4 3 2 1
(改行略)
境界でどうなるか悩まないんだろうか.
つまり 10.times の時に i は 0 から始まるのであって,
1 からはじまるわけではない.
1.upto(10) のときは i は 1 から 10 まで動く.
10.downto(1) のときは i は 10 から 1 まで.
意味考えたらわかるから,悩まないか.
>>70
知らね.Ruby あんまり使わないし.
0072デフォルトの名無しさん
2009/04/28(火) 02:40:15Smalltalk
1 to:10 do:[ :i | Transcript show:'hello']
0073デフォルトの名無しさん
2009/04/28(火) 02:47:041.step(10, 1) {puts "hello"}
これは
1.step(10, 1) {|i| puts i} => 1 2 3 4 5 6 7 8 9 10
この意味合いは 1 から増分 1 で 10 まで数える.
(例えば増分を 2 にしたければ
1.step(10, 2) {|i| puts i} => 1 3 5 7 9
とすれば良い.)
0074デフォルトの名無しさん
2009/04/28(火) 02:48:3510 0 do ." hello" loop
factorで
10 [ "hello" print ] each
0075デフォルトの名無しさん
2009/04/28(火) 02:52:49(let loop ((s 0))
(if (< s 10) (begin (print "hello") (loop (+ 1 s))))) ;>60
(for-each (lambda (i) (print "hello")) (iota 10))
(dotimes (i 10) (print "hello"))
どれが標準的?
0076デフォルトの名無しさん
2009/04/28(火) 03:00:16((lambda (f) (f f 10)) (lambda (g n) (cond ((< 0 n) (print "hello") (g g (- n 1))))))
0077デフォルトの名無しさん
2009/04/28(火) 03:04:19(do ((i 0 (+ i 1))) ((= i 10)) (print "hello"))
0078デフォルトの名無しさん
2009/04/28(火) 03:07:000079デフォルトの名無しさん
2009/04/28(火) 03:09:31(loop repeat 10 do (print "hello"))
>>75
たぶんGauche使ってるんだろうが標準のschemeにはdotimesはないぞ
CommonLispからの移植な
あとprintじゃなくてdisplayな
0080デフォルトの名無しさん
2009/04/28(火) 04:22:55ところでPerlなら
print "hello" x 10;
でいいのだが?
0081デフォルトの名無しさん
2009/04/28(火) 04:27:07M-x run-gosh,M-x run-guileとソースの画面も合わせて、3画面にして
goshでの評価、guileでの評価を各自のコマンドと
一気にgoshでもguileでも評価する設定できないのかな
guileが不人気みたいだから、こういうのはないか
Common Lispでもclispとsbclとできると個人的には便利なんだけどなあ
0082デフォルトの名無しさん
2009/04/28(火) 12:04:290083デフォルトの名無しさん
2009/04/28(火) 12:16:37(for-each (lambda (x) (print "hello")) (iota 10 0))
>>80
じゃあrubyなら
puts"hello"*10
だな
0084デフォルトの名無しさん
2009/04/28(火) 18:07:57Lisp 系なら Emacs Lisp が初心者向きかと。Emacs も理解できイベントループや簡単な
ウィンドウ取り扱いなども学べて一石二鳥にも三鳥にもなるし
0085デフォルトの名無しさん
2009/04/28(火) 18:27:26ま、Emacs自体がREPLになってる上にコードのほとんどがElispでのぞきみ放題
なのはいい勉強になると思うけんど。
英語が苦にならないならcommon lispの方がライブラリが整っていて、自前の
プログラムを1から書く分にはschemeよりいいと思うんだが。なんだか
ruby vs pythonの構図と似てるなあ。
0086デフォルトの名無しさん
2009/04/28(火) 19:36:47初恋の子と付き合って、純愛を一生貫きたいみたいなもんで
3年目に浮気するからなあ
>>84
> Scheme は、仕様自体はコンパクトでも取り扱っている概念や方法論がハイレベル
言葉にするとSchemeはそういう存在のところもありそうだね
付け加えるならSchemeも初学者向きだと思う
ここのスレで実用言語としてのGaucheとLispがどういう関係なのか、興味があるところだけど
ここのスレで実用言語としてのGauche使いって多そうだよね
>>85
> ruby vs pythonの構図と似てるなあ。
触らず嫌いだけどrubyは、ないなあ
なぜか頭から却下してしまう
手続き型言語only使いからするとLisp/Schemeがそういう存在なんだろうけど
自分がググった限りだと触るならPythonがいいなあ
Scheme/Lispは親戚関係みたいに血がつながっているイメージ
なんか違う気がする
まあ、血縁関係にお金と権力が絡むと殺し合いが始まるんだけどね
日本の歴史のように
血の例はよくないね
0087デフォルトの名無しさん
2009/04/28(火) 19:45:210088デフォルトの名無しさん
2009/04/28(火) 20:05:290089デフォルトの名無しさん
2009/04/28(火) 20:43:09日本の歴史で、
血縁関係にお金と権力が絡むと殺し合いが始まる事例を
複数あげてください。
0090デフォルトの名無しさん
2009/04/28(火) 20:57:250091デフォルトの名無しさん
2009/04/28(火) 21:23:28同じ年代だけど織田さんのところと斉藤さんのところがそうだよ
0092デフォルトの名無しさん
2009/04/28(火) 21:41:110093デフォルトの名無しさん
2009/04/28(火) 22:05:14誰だよそれ
0094デフォルトの名無しさん
2009/04/28(火) 22:11:29斎藤さんとこは息子とバパで既に仲悪かったじゃん。
確かに織田さんとこに血縁者はいるけど、実質、斎藤さんとこの親子喧嘩に
義理の息子が割って入ったってかんじだから、
血縁者同士って括りでは斎藤さんとこだけの話だよね。
0095デフォルトの名無しさん
2009/04/28(火) 22:16:18それはそうとして「バパ」って何?
0096デフォルトの名無しさん
2009/04/28(火) 22:48:04携帯からなんで…
0097デフォルトの名無しさん
2009/04/28(火) 23:34:16あと、大学入りたての鼻息荒い学生がよく使う。
0098デフォルトの名無しさん
2009/04/29(水) 00:07:42それはゴメンなさい
自分の知らない言葉だと思ってググったりしてしまったw
0099デフォルトの名無しさん
2009/04/29(水) 00:23:13じゃあ、なんて言うんだ?
0100デフォルトの名無しさん
2009/04/29(水) 00:27:530101デフォルトの名無しさん
2009/04/29(水) 00:29:120102デフォルトの名無しさん
2009/04/29(水) 00:29:40言語学関の板での初心者と同義語
0103デフォルトの名無しさん
2009/04/29(水) 00:34:42俺はプログラマについて「初心者」って言うのを
リアルでは一度も聞いたことないわ。
学術の世界って、法学とか文学でもそうでしょ。
Windows使いHOWTOを「初学者」っていうと
逆に固すぎる感じがするわ。
0104デフォルトの名無しさん
2009/04/29(水) 00:39:03特定の個人に限定して話を続けるとよい
0105デフォルトの名無しさん
2009/04/29(水) 00:50:250106デフォルトの名無しさん
2009/04/29(水) 00:52:15アクターじゃない!
継続なのさ〜
0107デフォルトの名無しさん
2009/04/29(水) 01:05:010108デフォルトの名無しさん
2009/04/29(水) 01:39:100109デフォルトの名無しさん
2009/04/29(水) 01:51:13という中二病心がうずくのさ。
0110デフォルトの名無しさん
2009/04/29(水) 02:00:070111デフォルトの名無しさん
2009/04/29(水) 02:00:350112デフォルトの名無しさん
2009/04/29(水) 02:17:38みんなが>>34で、>>34がみんなだったんだ!うわーい
ま、Smalltalkerなおでは違うけども
0113デフォルトの名無しさん
2009/04/29(水) 03:50:39忍耐を要求する時点で終わってる
プログラミングは楽しくなきゃ
0114デフォルトの名無しさん
2009/04/29(水) 07:27:10子供にとって楽しさってなんだろうなあ
サッカーだったら活躍したらうれしい、もっとうまくなりたいとかかな
でも、ピアノとか、お習字とか、武道の習いごとは、違うよね
個人的には子供のころは馬鹿みたいに時間があって、それを退屈しないで
過ごせればなんでもいい気がするんだけどなあ
退屈しない = 楽しさかな?
0115デフォルトの名無しさん
2009/04/29(水) 08:46:080116デフォルトの名無しさん
2009/04/29(水) 10:00:180117デフォルトの名無しさん
2009/04/29(水) 10:13:42なんて考えたのですが。
0118デフォルトの名無しさん
2009/04/29(水) 10:21:07そういえばcomp.lang.schemeで「継続をCで実装するにはどうするんですか〜?」って質問に"real man uses assembler."の一言でスレをストップした漢がいたなあ。
あれは、おまえの右腕だったのか@@・・・(w
0119デフォルトの名無しさん
2009/04/29(水) 10:21:47US: 9→( , 0→)
JP: 8→( , 9 →)
多くの人が小指より薬指の方が長いから、
指が届き易いんじゃないだろうか?
0120デフォルトの名無しさん
2009/04/29(水) 12:46:16> 指が届き易いんじゃないだろうか?
JPの0の位置って好きじゃないかも
C-u 99 ほにゃららってするね
C-u 55 ほにゃららってするね
あとC-u 22 C-n 約半ページ移動
なぜC-uのあとに左手が多いのかなと思ったら、右手の人差指でuを押して、右手の薬指で9を押すと
右手がちょっと不安定になるからっぽい
まあ、どうでもいい話でした
US配列はjp106を設定していないあの配列なのか
hhkとか使いたくないなあ
0121デフォルトの名無しさん
2009/04/29(水) 13:37:20Sheme/Lispで多言語の文字列生成検索関数があれば、
いいんだ!(emacs lispはいや。)
0122デフォルトの名無しさん
2009/04/29(水) 17:38:13小指?
いや小指より薬指は長いけど
自分は890あたりは中指薬指で打つな
0123デフォルトの名無しさん
2009/04/29(水) 19:59:39それだと、ホームポジションの基本から外れるじゃん。
だが、冷静に考えてみると、閉じ括弧って lisp の時、滅多に入力しない。
pairで入力するから。
だから、たまに括弧の数の調整をする時、使って、
「ああ、遠い」って思うんだよな。
0124デフォルトの名無しさん
2009/04/29(水) 20:03:45わからなくなもないけど、混乱しないの?
右薬指で0もありならp/もそうなの?
標準的と思われるタッチタイプにどれだけ妥当性があるのか、よくわからないがね
小指の使用率高いし
人間の適用力はすごくて、vi, emacsのESCの過度のタイプも意外と平気だからなあ
0125デフォルトの名無しさん
2009/04/29(水) 20:23:45これで腕は移動しなくても、手首の回転と指の折り曲げで対応できる。
>>124
> /もそうなの?
小指は短いんだから、折りたたむ位置のキーはかえって有利。
0126デフォルトの名無しさん
2009/04/29(水) 20:36:530127デフォルトの名無しさん
2009/04/29(水) 20:38:490128デフォルトの名無しさん
2009/04/29(水) 21:17:560129デフォルトの名無しさん
2009/04/29(水) 22:15:08viの挿入モード抜けはESCでしてたけど
いまはどっちも^[。
Ctrlキーで代用が聞くBSやTABも^H、^I。
最近コンソールアプリで^Hが使えないものでも
^8が効くということに気が付いた。
Ctrlキーは便利なんだけど
Macだとブラウザのアクセスキーとカチ合うのが難点
wikiを見てる時に何度履歴のページを見る羽目になったことか…
0130デフォルトの名無しさん
2009/04/30(木) 00:38:50位置を'('と')'に変更してしまうのもいいかも。これ結構打ちやすいよ。
'{'と'}'は滅多に使わないのでずいぶん遠くにある。あとAの左隣がRUBOUT
(DELETEに相当)というのも麻薬的な魅力がある。
http://www.pfu.fujitsu.com/hhkeyboard/kb_collection/images/symbolics.gif
0131デフォルトの名無しさん
2009/04/30(木) 01:44:51既存コミュニティの努力を全て無に帰して、新しい言語を構築しようって人は、
近代中世から何百年とずーっと存在し続けているのさ。
今に始まったことじゃない。
0132デフォルトの名無しさん
2009/04/30(木) 02:44:04いわゆる省スペースのだとどうということもない
0133デフォルトの名無しさん
2009/04/30(木) 03:07:31pgの悪口言うな><
クロッティはむしろ逆の方向性だろ。
0134デフォルトの名無しさん
2009/04/30(木) 04:06:44省スペースキーボードの KEK-EA9AU の
復活に向けて布教しようと思ったら、何故か普通に売られてた!
ヤホーイ!!
http://kakaku.com/item/01505010404/
値段が上がり続けてるのが心配だがこのキーボードはマジでオススメ
キーピッチが小さいから数字キーまでブラインドで打てるし
フルキーだから変な配置で困ることもない。
なのに全く知られてないのは何故なんだ!
0135デフォルトの名無しさん
2009/04/30(木) 07:39:04形が普通すぎてださいし、JIS配列だから使い物にならない。
0136デフォルトの名無しさん
2009/04/30(木) 11:46:14乳首最高
0137デフォルトの名無しさん
2009/04/30(木) 12:43:20漢字キーと入れ替えちゃえばいいじゃないか
IMEのスイッチを変換に当てて使えば上段全部が遠いおれでも楽勝だぜ(無変換はSUPER)
0138デフォルトの名無しさん
2009/04/30(木) 13:39:01うん、でかいキーボードに戻ったらそうするだろうw
省スペースだとファンクションキーも楽に届く・・・のはいいんだが
今度は左のALTやCTRLが押しにくい
0139デフォルトの名無しさん
2009/04/30(木) 21:25:25小さくなるとALT,CTRLが押しにくかったりするんだよね
おれは店頭に並んでいる1000円キーボードが一番好きだね
外し方が悪いのかもしれないけど、うまくキーボードが外せなかったりするし
ブラシとエアーダストでお茶を濁している
あと、用途 来客訪問時用 and 予備用ととストックしてあるなあ
ケースバイケースで生活感のあるキーボードを見せたくない場合もあるし
乳首パッドも使っていたけど、しょせんノートパソコンだよね
持たなくて済むなら持ちたくないね
盗難がすごくこわいし、セキュリティ的にも安易に席を離れられないからなあ
デスクトップPCも盗もうと思えばできるんだろうけど
素人がやる犯罪行動コストとしてけっこうありそうだからなあ
常習者だったらあっさり行けるんだろうけど
0140デフォルトの名無しさん
2009/05/01(金) 01:55:338 は人差指、9 は中指、0 は薬指が基本。
ttp://www.softpedia.com/screenshots/Touch-Typing-Deluxe_3.png
0141デフォルトの名無しさん
2009/05/01(金) 03:18:24左手の小指に比べると右手の小指のタイプ範囲が広いこと、広いこと
表計算を頻繁に使うならマウスは左のほうが使いやすそうだよね
タッチタイピング - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%83%E3%83%81%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
0142デフォルトの名無しさん
2009/05/02(土) 00:47:110143デフォルトの名無しさん
2009/05/02(土) 01:29:39どんだけ変態なんだよ
なにかの事故で小指がないならわかるけど
0144デフォルトの名無しさん
2009/05/02(土) 02:18:310145デフォルトの名無しさん
2009/05/02(土) 02:42:07それならネタ投下しろよ
0146デフォルトの名無しさん
2009/05/02(土) 05:36:02役割について考察せよ。因みにWikiでは触れられていない。
これネタ
0147デフォルトの名無しさん
2009/05/02(土) 06:57:29わたしもやりますー
小指はあるよ
0148デフォルトの名無しさん
2009/05/02(土) 11:57:24俺もフルサイズのキーボードではやるよ。
ノートとかだとできなくて辛い。
>>143
某Scheme処理系作者もそうだった気がする。
結構打ちやすいよ?
0149デフォルトの名無しさん
2009/05/02(土) 12:18:46付け根なんでしょ?
それだとCtrlとCaps lockは交換していないよね
第一関節と第二関節の腹で押すなら、多少は想像できるけど、でもとても効率性や機動性があるとは思えない
まったり操作のときに使うの?
右手小指の付け根では成り立たないの?
すげー謎過ぎる
0150デフォルトの名無しさん
2009/05/02(土) 12:25:340151デフォルトの名無しさん
2009/05/02(土) 12:26:09付け根で押すと、押した状態でさらに指が5本ともつかえて効率的。Emacsにイイ。
0152デフォルトの名無しさん
2009/05/02(土) 12:29:340153デフォルトの名無しさん
2009/05/02(土) 12:39:070154デフォルトの名無しさん
2009/05/02(土) 12:41:57USキーボードだとCtrlの幅が多少広くなって、他のキーに接触せずに押しやすいのかな
でも、それならCtrlとCaps lockは交換する派のほうが共感できるなあ
0155デフォルトの名無しさん
2009/05/02(土) 17:17:51> ホームポジションでタイプするときに小指の付け根ってちょうど左右Ctrlキーのあたりにあるけど。
その体制って手首や指が手の甲の側に反るので俺はダメだ。
俺がホームポジションでタイプするとき、小指の付け根は空中ですよ。手首はパームレストの上。
手が半球をつかむような自然な形を保てる方が手の負担が少なくて楽だと俺は思うのだが、
そんなの全然大丈夫って人も沢山いるんだね。
0156デフォルトの名無しさん
2009/05/02(土) 17:41:49手首はパームレストの上。手の負担も少ないってゆうかゼロ。
0157デフォルトの名無しさん
2009/05/02(土) 20:57:18致し方ないので"A"の左がコントロールになっているキーボードを社内で普及させた俺みたいなのもいる
0158デフォルトの名無しさん
2009/05/02(土) 21:20:02左手で文字キーを押すときは右手で右のShift, Ctrl, Altを
右手で文字キーを押すときは左手で左のShift, Ctrl, Altを
組み合わせて押す。
どんなキーボードでも有効w
0159デフォルトの名無しさん
2009/05/02(土) 21:28:04すげー迷惑だよ
劇的な優劣差があるわけでもなし
むしろ不便さのほうを感じるんではないだろうか
キーボード変わると作業効率落ちる
漫画喫茶でストレス感じまくり
0160デフォルトの名無しさん
2009/05/02(土) 23:59:010161デフォルトの名無しさん
2009/05/03(日) 00:46:08小指側のてのひらの付け根で押してる。
小指の付け根というのはこのことかな?
0162デフォルトの名無しさん
2009/05/03(日) 01:12:16どっちがいいんですか。
0163デフォルトの名無しさん
2009/05/03(日) 01:19:17両方やってみて自分で選べばいいじゃん。
0164デフォルトの名無しさん
2009/05/03(日) 01:25:26どちらも勉強する価値は大いにある
しかしその価値がわかるほどに学習が進むとそれに染まってしまって
どちらかに偏って考えてしまうようになる
だから学習前のプレーンな状態で選択したいんでしょう
0165デフォルトの名無しさん
2009/05/03(日) 01:41:49*nixならperlだって使えるべきだし、さらに言えばsmalltalkだって教養として
知っておくべきだと思う。
逆に言えば、特定の言語に染まっちゃった人の意見なんか参考にしてどうすんの?
0166デフォルトの名無しさん
2009/05/03(日) 01:42:290167デフォルトの名無しさん
2009/05/03(日) 01:45:450168デフォルトの名無しさん
2009/05/03(日) 01:51:44Haskellを触ったことないけど、興味があるんならやってみればいいんじゃないの?
>>164さんが言うような偏りは、しょうがないとしか言いようがない
某日本人が新しい言語を使うときは、さっさと大きいものをつくるらしい
例え、失敗しても、根本的にまた勉強し直して、2度目で作れればいいし
かなりハードだろうけど、目的が直接的なこともあって、かなり得るものはあるらしいね
Haskellで実用的な何ができるのか、知らないけどね
個人的にはslime.elが便利らしいんで、Common Lispがいいと思うけどね
Common Lispで何か作ったことないけどね
>>165
Perlはわかるんですが、smalltalkは必要なんですか?
smalltalkは教養としてでもいいけど、smalltalkを知っておくことってそんなに大事なの?
smalltalkを知っていなくてすごく困ることになっても、そのとき対処するなあ
0169デフォルトの名無しさん
2009/05/03(日) 01:56:28東工大?
0170デフォルトの名無しさん
2009/05/03(日) 02:18:06つOpenBSD かつ ストールマンと飲んだ人
0171デフォルトの名無しさん
2009/05/03(日) 02:22:39興味が無いなら勧めないけど、何でもおもしろいって感じられる年頃の時にsmalltalkの中身を見ておくのは悪いことじゃないよ
あとcupsっていうeclipseでcommon lispさわれる環境もあるのでemacs系エディタがダメならそっちも検討してみるといいかも。
0172デフォルトの名無しさん
2009/05/03(日) 02:30:43>smalltalkを知っていなくてすごく困ることになっても
ならないからオケ。
秘境を旅するみたいなもんで、知的好奇心があれば
満足出来ると思うけど、実用的な何かを期待するなら
無駄骨になる。一つの小さな閉じた世界を訪れるのが
楽しいと思える人向け。
0173デフォルトの名無しさん
2009/05/03(日) 02:49:38京都だけど勉強会ってあるんだね
次回は5月17日だって
>>172
自分の場合はLisp/Schememも秘境という感じですがw
お金儲けに直結しづらい言語っていいなあという感じでマイペースにやっています
0174デフォルトの名無しさん
2009/05/03(日) 13:20:36「問題の解き方」を研究したいなら Lisp、「問題の問い方」を研究したいなら Haskell
0175デフォルトの名無しさん
2009/05/03(日) 13:28:38Lispはまだ外界との交流が盛んだと言うか、Lispが特殊なのは記法だけだよね。
Lispが砂漠のオアシスみたいな場所だとすれば、Smalltalkは山奥の隠れ里。
人によってはエルドラドや桃源郷に思えるかもしれないけど、交流は殆ど
断たれてしまってる。
0176デフォルトの名無しさん
2009/05/03(日) 14:06:290177デフォルトの名無しさん
2009/05/03(日) 19:03:11シンボルには変数と関数を入れることができて、
変数には関数を入れることもできるって。。
リストの先頭か #' で関数にアクセスできるけど、
変数に入れた関数には別の方法でアクセス・・慣れればしっくりくるのかな
0178デフォルトの名無しさん
2009/05/03(日) 19:37:50マクロは変数に入れられない
リストの先頭にはファーストクラスオブジェクトを置けないと考えれば?
関数も、そのままでは変数に入れられないから #' を使うわけで
0179デフォルトの名無しさん
2009/05/03(日) 20:05:26つ【Scheme】
0180デフォルトの名無しさん
2009/05/03(日) 21:30:15Scheme と CommonLisp で名前空間の扱い違うのか。
すみません、勉強不足だ。
あー、イメージは掴めそうかも。
変数の世界と 関数の世界があって x軸とy軸のように
双方向の写像の役割を #' と apply (funcall) がそれぞれ行っている。
写像なしではそれぞれの世界を行き来することはできない・・みたいな。
0181デフォルトの名無しさん
2009/05/03(日) 21:36:50おおざっぱなイメージだと、symbol に
"値スロット" しかないのが Lisp1
"値スロット" と "関数スロット" があるのが Lisp2
scheme とかは前者, CL つか Maclisp の血を引いてる奴は後者
0182デフォルトの名無しさん
2009/05/03(日) 21:51:11Schemerだから詳しく知らんけど
0183デフォルトの名無しさん
2009/05/03(日) 22:10:58Thx。Scheme の方がシンプルでいいのかもなあ。
使ってる人も多そうな気が。
でも今 On Lisp 見てて面白そうだから CL もよさそうだw悩む。
0184デフォルトの名無しさん
2009/05/03(日) 23:06:54どっちも楽しいぞ
0185デフォルトの名無しさん
2009/05/03(日) 23:50:35しかし、SchemeでCLを実装する、という話は聞かない。
最初に複雑なCLをやっておけばSchemeのシンプルな長所も理解できるけど、
Schemeから入るとCLが単に複雑なだけに見えてしまうかもしれない。
よって最初はCLをお勧め。反論は認める。
0186デフォルトの名無しさん
2009/05/04(月) 00:29:39関数型言語をかじってみたい程度の動機だとSchemeがいいんじゃない?
実用的にこれをしたいという用途が明確にあるならCLに直接にいくのもあるのかもね
0187デフォルトの名無しさん
2009/05/04(月) 00:29:410188デフォルトの名無しさん
2009/05/04(月) 02:54:320189デフォルトの名無しさん
2009/05/04(月) 02:56:350190デフォルトの名無しさん
2009/05/04(月) 02:59:03レベルが低い事例は?
0191デフォルトの名無しさん
2009/05/04(月) 03:09:25魚 魚 魚<大きな釣り針だなあ
魚 <お口に入らないよ
0192デフォルトの名無しさん
2009/05/04(月) 03:18:550193デフォルトの名無しさん
2009/05/04(月) 05:38:47宿題スレで問題を適当に10問持ってきて、10問の中から各自5問選んで、
Lisp/Scheme(別の関数型言語の参加もあり)で解く
提出タイム、コードのエレガントさなど評価の対象になるだろうが、イベント運営側で特別評価はしない
各自の判断で評価してもらいたい
5月4日13時開始予定(夜の希望者がいるなら時間を変更して、20時予定)
直接対決専用スレ
ttp://pc12.2ch.net/test/read.cgi/tech/1239985829/
と妄想してみたんだがどうだろうか?w
算数ドリル的な問題だと言語としての真価も図れないし、つまらないかな?
明日にズレ混んでもいいから、なんかやってもいいかもね
0194デフォルトの名無しさん
2009/05/04(月) 11:55:45> SchemeでCLを実装
on lisp に無かったっけか?
0195デフォルトの名無しさん
2009/05/04(月) 14:18:320196デフォルトの名無しさん
2009/05/04(月) 22:27:23「Lispはごくごく普通の言語だよ、記述がちょっと毛色の違うだけの」
と言っていた意味がよくわかった
ひょっとして書かれかた(書き方じゃない)になれてしまえばC++より優しい?
0197デフォルトの名無しさん
2009/05/04(月) 22:31:36Forthに匹敵するくらい
0198デフォルトの名無しさん
2009/05/04(月) 22:36:240199デフォルトの名無しさん
2009/05/04(月) 22:44:11そうだね。
Lispを特別な言語と思い込み、それを使いこなしている(?)自分が
特別な人間だと思い込んでいるユーザがLispを特別な言語にしている。
0200デフォルトの名無しさん
2009/05/04(月) 23:00:55Schemeは再帰が壁という声を聞いた。昔の話だけど。
0201デフォルトの名無しさん
2009/05/04(月) 23:29:02プログラマーから奪う危険な言語。
0202デフォルトの名無しさん
2009/05/05(火) 00:09:01足し算するときに1回はコンパイルエラー出す
0203デフォルトの名無しさん
2009/05/05(火) 00:13:39単なる食わず嫌いなところがあるのかもしれないね
「ロシア語がおもしろいよ。ドストエスキーは原書で読まないと」と他人に言われても、そこまで興味を引かないもんね
>>201
よくわからない文章だね
a) Lispは、ある能力をプログラマーから奪う危険な言語である。
b) 「構文を真面目に覚える」という能力ってなんだ?
c) 能力を人から奪うという表現もすごいね
elipse(emacs)は、「言語設計者様が作った構文を真面目に覚える」という能力を
プログラマーから奪う危険な統合環境。
これなら成り立つね
0204デフォルトの名無しさん
2009/05/05(火) 00:42:03文盲乙
0205デフォルトの名無しさん
2009/05/05(火) 02:14:50Lispは構文を覚えなくていいから楽だなぁ
ってことだろ
0206デフォルトの名無しさん
2009/05/05(火) 02:53:550207デフォルトの名無しさん
2009/05/05(火) 03:02:25>>193の言うような対決スレとして再利用でもする?
0208デフォルトの名無しさん
2009/05/05(火) 04:40:47Guileスレを使うなら
「guile=R5RSで解く(他のLisp/Scheme/その他関数型言語の参加もあり)」
くらいの名目にした方がよいかも。
あと問題がProject Eulerなら参加する。
和訳http://odz.sakura.ne.jp/projecteuler/
0209デフォルトの名無しさん
2009/05/05(火) 05:23:24いいんじゃない?
それでは、パイロット版という感じで気楽にやりましょうか。
【イベント名】 13時だョ!全員集合
【開始時間・終了予定時間】 今日の13時〜14時
【モットー】競うというより楽しく
【参加条件】一般的な社会常識がある人で関数型言語が使える人、または勉強している人。
【部門】今回は2部門。初心者部門と一般部門。初心者は3題出題。
一般部門は初心者部門の問題3題に加えて、7題を加えた計10題。
【イベントに使うスレ】 ttp://pc12.2ch.net/test/read.cgi/tech/1239985829/
【あとサイト】 和訳 http://odz.sakura.ne.jp/projecteuler/
【解答用紙】 http://codepad.org/
【備考】初心者の参加、大歓迎です。あとおもしろい企画があったら、どしどしレスしてください。
0210209
2009/05/05(火) 12:16:5113時から初心者部門参加ということで問題3題解くわ
とりあえず、こっちに移動します
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
0211デフォルトの名無しさん
2009/05/05(火) 12:40:250212デフォルトの名無しさん
2009/05/06(水) 00:57:470213デフォルトの名無しさん
2009/05/06(水) 01:47:26じゃあ、何時ならいいんだ?
集まらないと言っても3人集まったんだから成功だと思うんだけど
0214デフォルトの名無しさん
2009/05/06(水) 21:59:460215デフォルトの名無しさん
2009/05/06(水) 22:23:14妥当な開始時間を聞いているのに
二部構成という企画提案になっているんだ
0216デフォルトの名無しさん
2009/05/06(水) 23:28:20quoteで悩んでいます。
(list 1 2 3 4)
'(1 2 3 4)
違いがわかりません。
0217デフォルトの名無しさん
2009/05/06(水) 23:52:02'(1 2 3 4)=(quote (1 2 3 4))はリスト(1 2 3 4)を評価せずそのまま渡している
(list 1 (+ 2 3 4))
'(1 (+ 2 3 4))
の違いを比べてみれ
0218デフォルトの名無しさん
2009/05/07(木) 00:00:22横槍だけど、(car (car '(1 (+ 2 3 4))))だと、評価されないけど
評価するのってどうやるの?
0219デフォルトの名無しさん
2009/05/07(木) 00:01:17ありがとうございます。だいぶわかってきました。
(list 1 (+ 2 3 4))
'(1 (+ 2 3 4))
だと上では(1 9)のリストが作られるんですね
対話で(1 2 3 4)と渡すとエラーが出るのは、このリストのcarが手続きでないから、という解釈でいいのですか?
作ったリストとリストリテラルの違いはありますか?
0220デフォルトの名無しさん
2009/05/07(木) 00:40:40`,(+ 1 2 3) ; => 6
`',(+ 1 2 3) ; => '6
0221デフォルトの名無しさん
2009/05/07(木) 01:01:37そう、(1 2 3 4)を評価しようにもリストの先頭要素1はただの数字だからな
リストとしてみれば同じだが実データとしてみれば違いがある
(equal? (list 1 2 3) '(1 2 3))
(eq? (list 1 2 3) '(1 2 3))
>>218
ん?
(car '(1 (+ 2 3 4))) => 1だから
(car (car '(1 (+ 2 3 4))))は(car 1)ということになる
いったい何を評価したいのかな?
0222デフォルトの名無しさん
2009/05/07(木) 01:47:26(car (cdr '(1 (+ 2 3 4))))だね
(car '((+ 1 2 3 4) 1))で、もぞもぞいじっていたから気づかなかった
0223デフォルトの名無しさん
2009/05/07(木) 03:43:53それ説明になってないじゃん。
(eq? '(1 2 3) '(1 2 3)) → #f
(equal? '(1 2 3) '(1 2 3)) → #t
(eq? (list 1 2 3) (list 1 2 3)) → #f
(equal? (list 1 2 3) (list 1 2 3)) → #t
(eq? '(1 2 3) (list 1 2 3)) → #f
(equal? '(1 2 3) (list 1 2 3)) → #t
なのに。
>>219
(list 1 2 3)と'(1 2 3)の違いは、
list関数が作ったか、read関数が作ったかだけ。
0224デフォルトの名無しさん
2009/05/07(木) 07:35:250225デフォルトの名無しさん
2009/05/07(木) 11:14:360226デフォルトの名無しさん
2009/05/07(木) 12:08:43なるほど、わかりやすいかも。
0227デフォルトの名無しさん
2009/05/07(木) 19:16:580228デフォルトの名無しさん
2009/05/07(木) 19:19:430229デフォルトの名無しさん
2009/05/07(木) 19:22:52実装が仕様って話かな
自分は、そういう意味でしか言語を理解できないけど
0230デフォルトの名無しさん
2009/05/08(金) 13:49:40immutableじゃない。set-car!/cdr!出来る。
>>229
仕様そのものだ。
0231デフォルトの名無しさん
2009/05/08(金) 21:18:32できるかどうかは実装依存じゃないのかな?
R6RSは知らないけど
0232デフォルトの名無しさん
2009/05/08(金) 22:12:53R6RS だと immutable だよ
R6RS 5.10
0233デフォルトの名無しさん
2009/05/08(金) 22:45:38R5RSでも4.1.2にエラーだと書いてある。処理系に報告の義務がなかっただけ。
0234デフォルトの名無しさん
2009/05/09(土) 03:09:190235デフォルトの名無しさん
2009/05/09(土) 08:24:42WindowsXPで遊ぶのにPLTとCHICKENどちらがお勧めでしょうか?
もしくはその他お勧めがあればご意見をいただけますでしょうか
0236デフォルトの名無しさん
2009/05/09(土) 09:38:25漏れなく開発環境もついてくることを考えると、PLT が一番無難じゃないかなあ。
chicken は windows だとビルドが面倒だったような気が。
遊ぶんだったら petit chez なんかでもいいかもしれんけど、
未だマルチバイトな文字に対応してないみたいだし。
0237デフォルトの名無しさん
2009/05/09(土) 10:37:31Lisp以外では解く気が起きない問題も結構あるし
毛色の違う言語を2,3覚えた方が良いような気がしてきた。
0238デフォルトの名無しさん
2009/05/09(土) 11:00:53> 毛色の違う言語を2,3覚えた方が良いような気がしてきた。
これってどういうこと?
Lispじゃだめなん?
0239デフォルトの名無しさん
2009/05/09(土) 11:15:430240デフォルトの名無しさん
2009/05/09(土) 12:05:04CHICKEN は最近 Ver4 になって utf-8 デフォになったためか外部ライブラリ群再構築中
PLT は Ver4 として落ち着いてきたが互換性に難あり (デフォでは else 部なし if はエラー)
私的には Ypsilon あたりが高速かつクリーンで良さげな気がす
R5RS ならこんなのも
ttp://www.geocities.jp/bneck44/hS.htm
0241デフォルトの名無しさん
2009/05/09(土) 12:23:37mapがfor-eachを兼ねてもよさそうなものだが。
0242デフォルトの名無しさん
2009/05/09(土) 12:44:02Lispがダメなんじゃなくて単に問題11はCの方が個人的に解きやすかっただけ。
プロジェクトオイラーの問題をいくつか解いたけど
解答はどこをみたらいいのかな?
解いたのはいいけど答えがあってるかどうかわからないので
悶悶としてきました。
0243デフォルトの名無しさん
2009/05/09(土) 12:51:49このスレには貼らないでね。趣味で遊んでるんで、回答とか貼られると萎える。
0244デフォルトの名無しさん
2009/05/09(土) 12:52:49ググると誰かの全問解答がみつかったかな
それか垢をつくると答えあわせができるんじゃないかな
垢つくつてログインまでしかしていないけど、なんかそんな感じだったよ
>問題11はCの方が個人的に解きやすかっただけ。
手続き型言語で解きたくなるけど、そこを我慢するのがLisper/schemmer
0246デフォルトの名無しさん
2009/05/09(土) 18:49:08入門用には完成度の高いScheme48もオススメ
R5RSに最も忠実な処理系だと思う
もちろん独自の拡張も充実してる
R6RS対応版であろう次期リリースが早くでないかとwktkして毎日のようにリポジトリを覗いてる
0247デフォルトの名無しさん
2009/05/09(土) 20:00:39俺もよく理解してないんだが
関数の返り値に クォート付けたリストを渡すと
呼び出し元で書き換えられる可能性があるからまずいらしい。
list で作ったリストを返したほうがいいらしい。
詳しくは On Lisp に書いてある。
http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/functionalProgramming.html
これの GOODNESS で検索した辺りに書いてある。
CommonLisp だが Schemeも変わらないよね?
0248デフォルトの名無しさん
2009/05/09(土) 21:28:31'(1 2 3)
> (list (quote (quote (1 2 3))))
('(1 2 3))
> (' (quote (1 2 3)))
*** ERROR
0249デフォルトの名無しさん
2009/05/09(土) 22:07:13(' (1 2 3)) ≡ (QUOTE (1 2 3))
0250デフォルトの名無しさん
2009/05/09(土) 22:19:350251デフォルトの名無しさん
2009/05/09(土) 22:27:01日本語資料が一番充実してるのは Gauche だけど、Win ではちょっと不安定かも
あと、Common Lisp 寄りでときどき Scheme らしからぬとも評されたり
仕様に一番網羅的なのはおそらく Larceny で IEEE/ANSI から R6RS まで対応
事実上のリファレンス実装と言われることもあるらし
0252デフォルトの名無しさん
2009/05/09(土) 22:35:080253デフォルトの名無しさん
2009/05/09(土) 22:39:17*** ERROR: invalid application: ('(1 2 3))
Stack Trace:
_______________________________________
gosh>
0254デフォルトの名無しさん
2009/05/09(土) 22:47:480255デフォルトの名無しさん
2009/05/09(土) 23:02:44CLならリードマクロテーブルをいじって通せるかもしれないけど
Schemeは規格の上では通らない
0256デフォルトの名無しさん
2009/05/09(土) 23:27:400257デフォルトの名無しさん
2009/05/09(土) 23:36:51syntax-rulesは良いね。consもquoteもmapcarもいらないから。
0258デフォルトの名無しさん
2009/05/10(日) 11:49:030259デフォルトの名無しさん
2009/05/10(日) 16:38:290260デフォルトの名無しさん
2009/05/10(日) 17:05:590261247
2009/05/10(日) 18:55:58同じようなの過去スレで見つけたよ。
LISP Scheme Part5
http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
98 名前: 93=95 投稿日: 02/06/17 10:43
>>96
もちろん、
(equal? '(a b c d) (list 'a 'b 'c 'd)) ==> #t
です。そういう意味では同じ。ただ、(list 'a 'b 'c 'd)は評価される
たびに新しいリストが作られることが保証されているのに対し、
'(a b c d)はコンパイラがあらかじめどっかにリストを作っておいて
そのポインタを返すだけ、とするかもしれない(処理系依存)。
(define (foo) (list 'a 'b 'c 'd))
(equal? (foo) (foo)) ==> #t
(eq? (foo) (foo)) ==> 常に#f
(define (foo) '(a b c d))
(eq? (foo) (foo)) ==> #tかもしれない
0262デフォルトの名無しさん
2009/05/11(月) 10:26:17"/"が入るような文字コードの文字は
処理できないのでしょうか?
2chのdatを読ませてるんだけど
AAがよくあるdatだと、読み込みでバグって止まる
0263デフォルトの名無しさん
2009/05/11(月) 18:04:16処理系と対象ファイルの文字コード、あとできれば止まる前後のエラーメッセージなどplz
0264デフォルトの名無しさん
2009/05/12(火) 20:31:11l# だってさ
0265デフォルトの名無しさん
2009/05/12(火) 21:00:320266デフォルトの名無しさん
2009/05/12(火) 21:39:020267デフォルトの名無しさん
2009/05/12(火) 23:17:01死にました
0268デフォルトの名無しさん
2009/05/12(火) 23:49:10.net系の net Scheme っての知らんの?
0269デフォルトの名無しさん
2009/05/13(水) 02:00:270270デフォルトの名無しさん
2009/05/13(水) 12:34:20asdf-installでProgram Filesフォルダーにいろいろいれてくれたりするのかな
と思ったらdefineでもdefunでもなくdefなんだ
0271デフォルトの名無しさん
2009/05/14(木) 11:00:47http://ironscheme.codeplex.com/
これのことか?
0272デフォルトの名無しさん
2009/05/18(月) 00:22:56(if (zero? n)
1
(* n (fact (- n 1)))))
という風に記述できない理由は何なのでしょうか?
再帰てきにはこちらの方が自然な気がするのですが...
(Common Lispから来たのでSchemeとの違いにまだ戸惑っています。)
0273デフォルトの名無しさん
2009/05/18(月) 00:24:010274デフォルトの名無しさん
2009/05/18(月) 00:27:07普通に評価できるけど何が問題なの?
0275デフォルトの名無しさん
2009/05/18(月) 00:27:14展開できるような気がするのですが....
あと、この関数を定義して使うとそのまま、フリーズしてしまうのが
こまってしまって...
0276デフォルトの名無しさん
2009/05/18(月) 00:28:14処理系書いてよ.動かないほうが珍しいと思うけど
0277デフォルトの名無しさん
2009/05/18(月) 00:30:430278デフォルトの名無しさん
2009/05/18(月) 00:31:430279275
2009/05/18(月) 00:31:49Emacsのrun-schemeから使ったら突然フリーズしたので
動かないのかと思いまして.....
あと、立ち読み版Gaucheプログラミングでこのようなコードが
(define (fact n)
(define (fact-iter n ans)
(if (zero? n)
ans
(fact-iter (- n 1) (* n ans)))) ; 最後に自分自身を呼び出している
(fact-iter n 1))
出ているのですが、上のコードとこれの違いはどこらへんなのでしょうか?
0280デフォルトの名無しさん
2009/05/18(月) 00:35:470281デフォルトの名無しさん
2009/05/18(月) 00:42:14末尾再帰。
0282デフォルトの名無しさん
2009/05/18(月) 00:43:26>>279は末尾再帰呼び出しになっている.>>272が「非」末尾再帰なのは
再帰呼び出し(fact (- n 1))の結果にさらにnを掛ける処理を行っているから.
0283デフォルトの名無しさん
2009/05/18(月) 00:44:00>>279
p56, 57あたり読んでみて。 って立ち読み版か。
0284デフォルトの名無しさん
2009/05/18(月) 14:41:595*(4*(3*(2*(1*1))))って計算。
>>279は、
1*(2*(3*(4*(5*1))))
なので、整数で交換律と推移律が成立するから同じ関数になる。
推移律だけで成立するような定義域の場合、(例えば文字列連結)
(define (fact n)
(define (fact-iter n acu)
(if (zero? n)
(* acu 1)
(fact-iter (- n 1) (* acu n))))
(if (zero? n) 1
(fact-iter (- n 1) n)))
末尾再帰はこんな形。
;; 文字列版
(define (fact n)
(define (fact-iter n acu)
(if (zero? n)
(string-append acu "*1")
(fact-iter (- n 1) (string-append "(" acu ")*" (number->string n)))))
(fact-iter (- n 1) (number->string n)))
0285デフォルトの名無しさん
2009/05/18(月) 16:08:41http://d.hatena.ne.jp/niitsuma/20080328/1242595074
使い方の例
$clisp
(asdf:operate 'asdf:load-op :pythononlisp)
(py::py "print \"Hello from python\"")
(py::pyj "pylab.plot" '(1 2 3 4) '(4 3 2 1))
(py::py "pylab.show()") ;グラフの表示
(print (py::pyj "len" (list 1 5 6 ) ) ) ;3
(print (py::pyj "range" 2 7)) ;(2 3 4 5 6)
(py::setvalj "a" (list 2 3 4)) ;lispのデータをpythonの変数aに代入
(py::py "print a") ;[2, 3, 4] ;ちゃんと代入されてるか確認
(print (py::getvalj "a")) ;(2 3 4) ;pythonの変数aをlispのデータとして返す
(py::pyj "numpy.reshape" (list 1 2 3 4 5 6 ) (list 2 3)) ; -> ((1 2 3) (4 5 6))
(py::pyj "numpy.dot" '((1 2) (3 4)) '((1 2) (3 4)) ) ; -> ((7 10) (15 22)) ;行列の積
0286デフォルトの名無しさん
2009/05/18(月) 16:57:110287デフォルトの名無しさん
2009/05/18(月) 19:51:170288デフォルトの名無しさん
2009/05/18(月) 20:47:32X
Y
0289デフォルトの名無しさん
2009/05/18(月) 21:07:45x
Y
Cだと乳首が立つ。これが文化の違いってやつだな!
0290デフォルトの名無しさん
2009/05/18(月) 21:10:10乳首は立ってるだろうがペチャパイに見える
0291デフォルトの名無しさん
2009/05/18(月) 21:18:080292デフォルトの名無しさん
2009/05/18(月) 21:34:57x
Y
なぜか「C++」までエロく見えてくる
0293デフォルトの名無しさん
2009/05/18(月) 21:38:040294デフォルトの名無しさん
2009/05/18(月) 21:40:47上手いなw
0295デフォルトの名無しさん
2009/05/19(火) 09:09:18もう"Y Combinator"とか恥ずかしくて女の子に言えない orz
0296デフォルトの名無しさん
2009/05/19(火) 11:45:030297デフォルトの名無しさん
2009/05/19(火) 12:18:17X
Y
0298デフォルトの名無しさん
2009/05/19(火) 12:23:06SLIMEに附属する、lispのrepl環境をサーバ(デーモン)するプログラムのこと
これを使うことで複数の処理系のrepl環境を同時に使ったり、
リモートで立ち上げた環境を使うことができる
職安| λ…
0299デフォルトの名無しさん
2009/05/19(火) 15:20:57ありがとう。
λ・・・SLIMEも良くわかってない俺orz
Swank-Gaucheというプログラムを公開してる人のブログを見つけたのですが、
初心者では使う必要もないでしょうね?
0300デフォルトの名無しさん
2009/05/19(火) 21:39:470301デフォルトの名無しさん
2009/05/20(水) 19:04:300302デフォルトの名無しさん
2009/05/20(水) 19:40:030303デフォルトの名無しさん
2009/05/20(水) 22:38:30invalid escape characterがパスのバックスラッシュだとわかるのに小一時間。
それからslime本体が必要だと理解するのに30分wwww
やっとslime-2009-05-20というのを入れたら、
> An error has occurred while loading `c:/Program Files/Gauchebox/Meadow/.emacs':
>
> Symbol's value as variable is void: slime-lisp-modes
そんなこと.emacsに書いてないんですけど…orz
今日はこの辺で勘弁してやる(TωT)
0304デフォルトの名無しさん
2009/05/21(木) 00:28:30ttp://www.lingr.com/room/common-lisp-jp/archives/2008/09/20
最後の 1/4 あたりまたは "Meadow+SLIME" 検索で
0305デフォルトの名無しさん
2009/05/21(木) 00:51:070306デフォルトの名無しさん
2009/05/21(木) 01:52:09Lispをやると笑顔になるってか?
0307デフォルトの名無しさん
2009/05/21(木) 02:02:200308デフォルトの名無しさん
2009/05/21(木) 02:08:480309デフォルトの名無しさん
2009/05/22(金) 09:13:050310デフォルトの名無しさん
2009/05/22(金) 14:33:040311デフォルトの名無しさん
2009/05/22(金) 16:07:400312デフォルトの名無しさん
2009/05/22(金) 16:23:460313デフォルトの名無しさん
2009/05/22(金) 17:02:410314デフォルトの名無しさん
2009/05/22(金) 20:42:38そういうスレッドは他では下しか知らない。
最強!!数学ソフトウェア(maple, mathcad etc)
http://science6.2ch.net/test/read.cgi/math/1051275230/
0315デフォルトの名無しさん
2009/05/22(金) 23:09:48左からで何の不満もないと思うのですが。
0316デフォルトの名無しさん
2009/05/22(金) 23:15:44たしかCも引数を評価する順序は決まってないんだよね。以前、仕事で
扱ったコードに評価順序を暗に決めてしまってたいたものがあって、
コンパイラのバージョンアップで評価順序が変わって動かなくなって
しまったことがある。つかそのデバッグをやらされた。
0317デフォルトの名無しさん
2009/05/23(土) 00:18:50遅延評価を積極的に持ち込むための布石として順序を未定
にしたんだと思ってた
処理系作る側から見れば, 引数をスタックに積む順番考えると
右側から評価するのが楽っちゃ楽だわな
0318デフォルトの名無しさん
2009/05/23(土) 05:46:55右からが楽になるのは、不定長引数で引数の数を知らなくてもcalleeが
スタックトップからのオフセットでn番目の引数にアクセスできるからじゃない?
引数の数が固定、もしくは引数の数も一緒に渡す場合は右からでも左からでも
変わらないでしょう。
Schemeの場合、左から評価して積んどいた方がrest引数をリストに畳む操作は楽。
0319デフォルトの名無しさん
2009/05/23(土) 06:51:55(f . x) で (apply f x) と同じ意味にしなかったの?
0320デフォルトの名無しさん
2009/05/23(土) 06:56:43(f x y) は (f . (x y)) だからですね
ごめんなさい帰ります
0321デフォルトの名無しさん
2009/05/23(土) 07:17:500322デフォルトの名無しさん
2009/05/23(土) 18:00:32最左最内簡約の場合
((lambda (x) (lambda (y) y) x) (lambda (z) z))を1段階簡約すると
((lambda (y) y) (lambda (z) z))ではなく
((lambda (x) x) (lambda (z) z))ですよね?
0323デフォルトの名無しさん
2009/05/23(土) 18:24:13> ((lambda (x) x) (lambda (z) z))
この二つを区別する必要はあるの?
0324デフォルトの名無しさん
2009/05/23(土) 18:36:02最左最内だと、まず(lambda (y) y) xここからだから正しい。
>>323
ウゼエ
0325デフォルトの名無しさん
2009/05/23(土) 18:54:07ほんとに意味わかってやってんのか
0326デフォルトの名無しさん
2009/05/23(土) 18:54:580327デフォルトの名無しさん
2009/05/23(土) 19:09:351
0328デフォルトの名無しさん
2009/05/23(土) 19:12:20ありがとうございます。
用語が色々ありすぎて自身無かったので助かりました。
>>327 クマー
0329デフォルトの名無しさん
2009/05/23(土) 19:14:290330デフォルトの名無しさん
2009/05/23(土) 19:44:50((lambda (x) (lambda (y) y) x) (lambda (z) z))
は
((lambda (x) ((lambda (y) y) x)) (lambda (z) z))
のコピペ誤り?
0331デフォルトの名無しさん
2009/05/23(土) 20:05:50さらに質問
以下の名古屋大の資料にはcall-by-valueは最右最内戦略に相当すると書いてあり
ttp://www.math.nagoya-u.ac.jp/~garrigue/lecture/2007_SS/syntax.pdf
以下の早稲田大の資料にはcall-by-avlueは作用的順序簡約戦略に近いと書いてある
ttp://www.fuka.info.waseda.ac.jp/~onono/ProgLang/charts/pl2007-CS-09-LambdaCalculus.pdf
以下のサイトには作用順序簡約は最左最内簡約とも呼ばれると書いてある
ttp://www.geocities.jp/lethevert/clean/gettingStarted14.html
となると、実際の所call-by-valueは最左最内戦略と最右最内戦略のどちらに相当するのでしょう?
直感的には最右最内に近いように思うのですが
また、類推からちょっと考えてみたのですが
最右最外簡約(あまり聞いたことがないが)と最左最外簡約というのは
同じ物ですよね。そういう用語があるかは別として
0332デフォルトの名無しさん
2009/05/23(土) 20:25:39自分の不勉強なだけかもしれないけど最右最内簡約って聞いた事無い
カリー化のこともあるし右の項から簡約ってできるのかな?
0333デフォルトの名無しさん
2009/05/23(土) 20:29:000334デフォルトの名無しさん
2009/05/23(土) 21:17:08木構造のpre/in/post orderよろしく、以下の式には
((lambda (l) (l ((lambda (l1) l1) (lambda (l2) l2)))) ((lambda (r) r) (lambda (r1) r1)))
;最左最内
((lambda (l) (l (lambda (l2) l2))) ((lambda (r) r) (lambda (r1) r1)))
;最左最外
(((lambda (r) r) (lambda (r1) r1)) ((lambda (l1) l1) (lambda (l2) l2)))
;最右最内
((lambda (l) (l ((lambda (l1) l1) (lambda (l2) l2)))) (lambda (r1) r1))
の3パターン
0335デフォルトの名無しさん
2009/05/23(土) 21:36:19β基の簡約手段自体は変わらないんだった
右の方のβ基から簡約するようにするだけだからあり得る話だ
関数適用の結合を右結合にするのと勘違いしてた
0336デフォルトの名無しさん
2009/05/24(日) 00:33:52I (I y (I y)) でテストすれば4パターン全部わかる。
0337デフォルトの名無しさん
2009/05/24(日) 01:45:16大学で使ってるんですが実行画面のキャプチャが出来なくて困ってます。OSはwindowsです。
0338デフォルトの名無しさん
2009/05/24(日) 09:12:480339デフォルトの名無しさん
2009/05/24(日) 10:40:39I ((I y) (I y)) => I (y (I y)) => I (y y) => y y
I ((I y) (I y)) => I ((I y) y) => I (y y) => y y
最外
I ((I y) (I y)) => (I y) (I y) => y (I y) => y y
I ((I y) (I y)) => (I y) (I y) => (I y) y => y y
0340デフォルトの名無しさん
2009/05/24(日) 11:13:54グラボのアクセラレータによる画面は普通キャプチャできないけど、その系かな?
0341デフォルトの名無しさん
2009/05/24(日) 12:04:05パソコン初心者でよくわからないんですスイマセン。
Macだとcommand+shift+4とスペースバーでポインタがカメラになった後実行画面を選択するみたいなんですがwindowsにはそれにあたるものはないんですかね。
0342デフォルトの名無しさん
2009/05/24(日) 12:05:260343デフォルトの名無しさん
2009/05/24(日) 13:18:380344デフォルトの名無しさん
2009/05/24(日) 13:37:260345デフォルトの名無しさん
2009/05/24(日) 17:03:03なるほど、最外も2パターンいけますね
私の勘違いかもしれないですが
1行目の最内の簡約は
最初は右側を簡約してるにもかかわらず、次に左側を簡約しているので
変じゃないですか?
最左最内であれば
I ((I y) (I y)) => (I y) (I y) => y (I y) => y y
となるように思うのですが
別の例を考えてみたのですが
M=(I1 y) (I2 y)
N=(I3 y) (I4 y)の時
((λx.x M) y) ((λx.x N) y)について
最左最内は(I1 y)から
最右最内は(I4 y)から
最左最外は(λx.x M) yから
最右最外は(λx.x N) y
339の例では、1行目は(I3 y)相当の箇所から簡約が始まっています
もし最左と最右以外の内部からの簡約も指すのであれば
最内簡約だけで、最大で2^(木の深さ)のパターン
考えられるようにも思います
ややこしいですが
0346デフォルトの名無しさん
2009/05/24(日) 17:05:080347デフォルトの名無しさん
2009/05/24(日) 19:19:37左右とか内外と言うのは、最初に簡約する箇所ではなく、最初に探す箇所です。
最初に探した箇所で簡約できなければ、別の箇所から簡約を始めて良いです。
0348デフォルトの名無しさん
2009/05/24(日) 20:32:110349デフォルトの名無しさん
2009/05/25(月) 13:13:59【数式処理システム】 Maxima 【Common Lisp】
http://science6.2ch.net/test/read.cgi/math/1220340695/
0350デフォルトの名無しさん
2009/05/25(月) 19:44:09ありがとうございます。やっと理解出来ました。
あと、関連して良サイトみっけました(Mosckw MLの人?)
ttp://ellemose.dina.kvl.dk/~sestoft/lamreduce/lamframes.html
call-by-valueとapplicative orderってそもそも違うものなんですね
・いつlet束縛を展開するか(ζ変換?)
・どの展開形までもっていくか(WHNFや正規形など)
新しい用語が出てきて結果としては謎が深まりましたが
この辺、まとめてある資料ってないですかね・・
applicativeとかnormalとか言われるより
leftmost outermostとかで整理してある方が私には理解しやすいです
後、大雑把に言えば最右最内/最左最内の簡約は、
プログラミング言語では関数引数をどちら側から評価するか、
というだけの違いに思えてきました
0351デフォルトの名無しさん
2009/05/25(月) 20:30:38lambda が fn だったり let とか cond も 極力簡素にするスタイル。
[+ _ 10] は cut より直感的だけど、まぁ cut でも十分かな。
scheme で真似しようと思っけど
hash table や 文字列を手続き的に呼んだりするのは無理だよね。
0352デフォルトの名無しさん
2009/05/25(月) 20:59:05Gaucheなら出来ると思うけど。
0353デフォルトの名無しさん
2009/05/25(月) 21:17:38でも、あれって評価時にディスパッチされるんだよね?
性能的にはあんまりイケてないかも。
多用することは想定してないじゃろ
0354デフォルトの名無しさん
2009/05/25(月) 21:18:54なんか勘違いしてたわ
0355デフォルトの名無しさん
2009/05/25(月) 22:44:15これか。http://practical-scheme.net/gauche/man/gauche-refj_54.html#SEC97
本当だ、できるね。Gauche使いになろうっと。
教えてくれてありがとう。
0356デフォルトの名無しさん
2009/05/25(月) 22:52:57http://pc12.2ch.net/test/read.cgi/tech/1202098949/
0357デフォルトの名無しさん
2009/05/26(火) 02:11:57関数や関数へのポインタを扱える言語、
無名関数を扱える、動的に生成できる言語だと
引数だけじゃなくて、「関数」評価もちょっと意味が変ってきますよね。
Super Combinatorのグラフ簡約で考えると分かりやすいので、
Simon Peyton Jonesの"The Implementation of Functional Programming
Languages"を読んでみてはどうでしょうか。
http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/index.htm
0358デフォルトの名無しさん
2009/05/30(土) 19:28:54ありがとうございます。
ちょっとずつ読み始めました&Miranda処理系入れました
しかし、大御所は太っ腹ですね
Super Combinatorって名前からして面白そうですが
そこまで行くのにはまだしばらくかかりそうです
あと、読んだ所までですが、
β変換自体の実装にα変換が必要ってのを知り
自分のβ変換プログラムのバグを発見してしまいました
いい本教えてくれてありがとう
0359デフォルトの名無しさん
2009/06/01(月) 11:00:370360デフォルトの名無しさん
2009/06/01(月) 11:32:39そのrenaming problemを解決するのが、
lambda liftingによるsuper combinater化ですね。
YHCってのがsuper combinaterをILにした実装だったけど、
このプロジェクトは立ち消えになったみたいですね。
http://www.haskell.org/haskellwiki/Yhc
前はHaskell上でlambda式評価器を書いていたDockinsが、
YHC bytecodeのverificationやってましたけど。
http://www.cs.princeton.edu/~rdockins/lambda/home
http://www.cs.princeton.edu/~rdockins/presentations/tfp2007/slideshow.xhtml
http://www.cs.princeton.edu/~rdockins/pubs/tfp2007.pdf
0361デフォルトの名無しさん
2009/06/01(月) 11:53:39>α変換が必要
って書いてあるじゃん。それで合ってるんだから、変なこと教えるなよ
0362デフォルトの名無しさん
2009/06/01(月) 16:24:30少なくとも自由変数と何か関係あるぐらいは一目でわかるように名前つけろよ・・・
0363デフォルトの名無しさん
2009/06/02(火) 22:30:25自分も前にラムダ式を簡約するものをSchemeで書いたことがある。
高橋先生の本を読みながらやってたんだけど完全にはできなかった。
Arcのスレにすっごく巧み書かれたのがあったと思う。Arcが発表されて
まもなくだったので驚いたよ。
0364デフォルトの名無しさん
2009/06/02(火) 22:33:440365デフォルトの名無しさん
2009/06/02(火) 22:36:220366デフォルトの名無しさん
2009/06/02(火) 23:31:250367デフォルトの名無しさん
2009/06/03(水) 02:47:040368デフォルトの名無しさん
2009/06/04(木) 06:47:01これ?
http://natal.web.fc2.com/lambda.arc.txt
0369デフォルトの名無しさん
2009/06/04(木) 10:45:180370デフォルトの名無しさん
2009/06/04(木) 12:01:340371デフォルトの名無しさん
2009/06/06(土) 12:09:16渡された物がatomかどうか判別する関数って何でしょうか?
CommonLispから来たのであまりわからないのですが
atom?やatompが見当たらないような気がするのですが
0372デフォルトの名無しさん
2009/06/06(土) 12:16:25(define (atom? x)(not (pair? x)))
0373デフォルトの名無しさん
2009/06/06(土) 12:55:21「整数ではない」とか「文字列ではない」とかいったことを調べる述語が無いのに
(それとも CommonLisp では有ったりする?)
「ペアではない」ということだけ調べる述語があると不自然、
というような価値観が Scheme では有るように思う。
かといってミニマムな仕様を好む Scheme で全部の述語に否定バージョンを用意するのは論外だし。
0375デフォルトの名無しさん
2009/06/06(土) 14:16:04何故なら一方にCLという巨峰があり、汚い仕事でも引き受けてくれるからだ。
しかし、R6RSでは政権への意欲を見せた。
だが支持者からも反感を買い、最近は友愛の精神などとわけの分からない事を言い始めているが
結局は小沢の傀儡だろうとの批判が出ている。
0376デフォルトの名無しさん
2009/06/06(土) 14:22:29> integerpとかstringpとかが有った
atom? は pair? の逆だろ?
integerp の逆とかが有るか? っていう話なんだけど。
0377371
2009/06/06(土) 14:34:31なるほど、よくわかりました。
Lispに置けるatomという概念がまだ良くわかっていなくて
了解しました。なるほど、Schemeはpair?の逆ということですね。
Common Lispはatomも属性の一つと認識してる部分がある気がします。
0378デフォルトの名無しさん
2009/06/06(土) 14:49:46単独で使いたければ if じゃなく unless 使えばいい。
もちろん not つかったっていい。
0379デフォルトの名無しさん
2009/06/06(土) 23:24:24いやatomの定義が何なのか知らないので、おれの妄想の意見だが
0380デフォルトの名無しさん
2009/06/06(土) 23:27:180381デフォルトの名無しさん
2009/06/06(土) 23:36:37でもよお
0382デフォルトの名無しさん
2009/06/06(土) 23:38:55(container? (cons 1 2)) => #t
(define (atom o) (not (container? o)))
なら納得なんだわ
schemeの審美眼的にこの辺ほったかかしなのが謎だと思うんだわ
0383デフォルトの名無しさん
2009/06/06(土) 23:58:25atom=それ以上分解することができないもの
だよな?
vector(やstringも?)分類上コンテナだと思うんだわ
じゃあsymbolはどうなる?とか色々疑問は尽きない
0384デフォルトの名無しさん
2009/06/07(日) 00:11:130385デフォルトの名無しさん
2009/06/07(日) 00:12:180386デフォルトの名無しさん
2009/06/07(日) 00:15:22コンテナかどうかの話なのに、それがどんなコンテナか?
なんて区別の必要があるか?
必要なら個別にpair?とか呼べば?
0387デフォルトの名無しさん
2009/06/07(日) 00:25:20そのままatom?がない状態になっているのかと思っていた。
0388デフォルトの名無しさん
2009/06/07(日) 00:29:01まだ全然読めてないですが・・
Cleanとかはグラフ書き換えによって名前衝突回避してるそうですね
Dockins氏のサイト、lambda式の評価器のコードがあったので
落としました。しかし、Haskell読めないという罠
>>363
>>368のArcのプログラム見てみましたが
とても短いのに、そのままschemeに移植したら動いたので感動しました
α変換は暗黙的に置換に含まれてしまってますね
後、コード読んでて気づいたんですが
Arcのfn(lambda)式の引数部分とletはパターンマッチできる!
これはSchemeにも欲しい
;xがλx.Mかはテストしておいて
(let (lam var body) x
(do (prn lam) (prn var) (prn body) nil))
0389デフォルトの名無しさん
2009/06/07(日) 04:11:11>>>368のArcのプログラム見てみましたが
>とても短いのに、そのままschemeに移植したら動いたので感動しました
すごくうまいよね。こりゃ、かなわんなぁと。
自分は素朴な方法で教科書どおりに書いていました。
0390デフォルトの名無しさん
2009/06/07(日) 10:00:42疑わしきは全部α変換しておけば確実だということと、
SICPに出てくる環境モデルのようなものが
λ計算の変数の置換にも使えるということがポイントかな。
0391デフォルトの名無しさん
2009/06/07(日) 19:29:41むしろ決められないから atom を定義してないんじゃね?
0392デフォルトの名無しさん
2009/06/07(日) 19:34:50文字列はどうするの?
0393デフォルトの名無しさん
2009/06/08(月) 00:50:14vector → void *[]
0394デフォルトの名無しさん
2009/06/08(月) 01:56:34ベクタの例をとってみても 「ペアでない」=「アトム」
とは言えないという意見は納得できる。
でも、その方向でつきつめていけばアトムと
言えるのはビットだけってことにならないか?
しかし、更に言えばビットで表現するのは実装の都合であって、
Scheme の意味論的にはそんなこと知ったことじゃないかもしれない。
何を以ってアトムとするかは状況によると思う。
0395デフォルトの名無しさん
2009/06/08(月) 02:31:070396デフォルトの名無しさん
2009/06/08(月) 10:53:070397デフォルトの名無しさん
2009/06/08(月) 11:48:54正直、極端な話はいらない
0398デフォルトの名無しさん
2009/06/08(月) 12:00:17common lispのプログラム中にatomがあるので、どう翻訳しようか悩むことはある
0399デフォルトの名無しさん
2009/06/08(月) 12:14:490400デフォルトの名無しさん
2009/06/08(月) 17:09:160401デフォルトの名無しさん
2009/06/08(月) 17:15:53読みたいのですが、newssaverというのは何処に設定すれば良いのでしょうか?
Googleグループは便利なのですが、ニュースリーダーからアクセスできるともっと楽なのです
よろしくおねがいします。
0402デフォルトの名無しさん
2009/06/08(月) 21:40:35gmane.org
0403デフォルトの名無しさん
2009/06/08(月) 22:04:03>gmane.org
ありがとう御座います。
comp.lang.schemeが見つからんとです。
0404デフォルトの名無しさん
2009/06/09(火) 23:08:230405デフォルトの名無しさん
2009/06/09(火) 23:39:570406デフォルトの名無しさん
2009/06/09(火) 23:53:03エレクトロニキスタの俺がバッハに耐えられるかな。
0407デフォルトの名無しさん
2009/06/10(水) 00:16:070408デフォルトの名無しさん
2009/06/10(水) 00:18:00各種民族音楽(日本の民謡も含む)からクラシック・シャンソン・ジャズ・ロック
0409デフォルトの名無しさん
2009/06/10(水) 00:19:160410デフォルトの名無しさん
2009/06/10(水) 00:22:46ここ20年音楽聞いてないかも
0411デフォルトの名無しさん
2009/06/10(水) 00:42:11うまい
0412デフォルトの名無しさん
2009/06/10(水) 01:03:52それでも括弧の奏でる旋律を感じたことがあるはずだ
0413デフォルトの名無しさん
2009/06/10(水) 01:06:08それニダ!!
0414デフォルトの名無しさん
2009/06/10(水) 06:58:05call/ccに脳内変換されるようになってきた。
0415デフォルトの名無しさん
2009/06/10(水) 11:13:34やっぱりLisperならヒップホップだよね?
0416デフォルトの名無しさん
2009/06/10(水) 11:36:440417デフォルトの名無しさん
2009/06/10(水) 12:40:43行列の配列のcreate deleteをlisp側でやると遅いってことでいいの?
cffi使うなら全部cで処理したほうがましってこと?
0418デフォルトの名無しさん
2009/06/10(水) 20:10:140419デフォルトの名無しさん
2009/06/10(水) 20:12:42こっちを再利用してもいいんじゃない?
立ててもいいと思うけど
【GNU】スクリプト言語 Guile【scheme】
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
0420デフォルトの名無しさん
2009/06/10(水) 21:48:44【色即是空 空即是色】Lisperのぼやきサロン【Lisp S式】
とでもしといて w w w
0421デフォルトの名無しさん
2009/06/11(木) 01:03:200422デフォルトの名無しさん
2009/06/11(木) 01:06:33なんでLispスレ限定なんだ
0423デフォルトの名無しさん
2009/06/11(木) 01:18:51Lisperこそ真のプログラマーよ!!
http://pc11.2ch.net/test/read.cgi/prog/1175791979/
彼氏にするならだんぜんLisp使いかなぁ
http://pc11.2ch.net/test/read.cgi/prog/1241612383/
0424デフォルトの名無しさん
2009/06/11(木) 07:30:10schemerにとって不満? lisperと書けば含まれていると思ったけど。
0425デフォルトの名無しさん
2009/06/11(木) 08:44:110426デフォルトの名無しさん
2009/06/11(木) 10:36:160427デフォルトの名無しさん
2009/06/11(木) 10:54:23プチ自慢したり遍歴ダベったりするスレが欲しいかな。
少々次元が低くても全然構わない空気の。
0428デフォルトの名無しさん
2009/06/11(木) 12:34:42を乗っ取りする
0429デフォルトの名無しさん
2009/06/11(木) 21:06:16本スレも過疎気味なのに、さらに分離すると…追っかけるの面倒
0430デフォルトの名無しさん
2009/06/11(木) 21:22:020431デフォルトの名無しさん
2009/06/11(木) 21:23:45過疎っているのと、リアルが忙しくてかまっていられないだけだと思うよ。
低次元の話題は大歓迎なんだが。
というか、(Python) --.> guile --> lispと移行しようとがんばっているんだけど、sbclのasdf on gentooが動かなくて、パッケージとか、ライブラリが使えねーww
必要なログとか、晒すんで助けてください。
元カノのPython子とよりを戻そうかと真剣に考えたくなる。
でも、長年連れ添うなら、Lispのマクロって便利そうだよね。emacsのslimeも軽くて便利そうだし。
0432デフォルトの名無しさん
2009/06/11(木) 21:55:30どんなエラーでるか、入門Common Lispスレのほうで晒してくれたらみたげるよ。
俺は仕事でSQLをいじるとPrologがいいなぁと思い、JavaをいじるとLispがいいなぁと思う。
しかしPrologをいじると、RDBMSのイロイロやっぱ必要だよな…と思い直し、
Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
0433デフォルトの名無しさん
2009/06/11(木) 22:06:01schemeのプログラムってどういう風に配布すれば良いのでしょうか?
ユーザーにgaucheやパッケージ依存ならパッケージのインストールまでさせるべきでしょうか?
すこし、敷居が高い気がするのですが...
それとも、./configure && make && make installでバックグラウンドでgoshやパッケージを
インストールする方式なのでしょうか?
みなさまの方法をご教授ください。
0434デフォルトの名無しさん
2009/06/11(木) 22:06:540435デフォルトの名無しさん
2009/06/11(木) 22:12:02NSISでインストーラーを書いてGaucheごと配布
0436デフォルトの名無しさん
2009/06/11(木) 22:44:57python on lisp
0437デフォルトの名無しさん
2009/06/11(木) 23:34:04そういう用途ならPLTオススメ。
Gaucheでやるなら、>>435みたいに、本体ごと配布するのが面倒がない。
バージョンの違いとかで悩まなくていいし。
0438デフォルトの名無しさん
2009/06/11(木) 23:52:58仕事ではとても言い出せないけど
0439デフォルトの名無しさん
2009/06/12(金) 00:20:36Common lispスレのほうに投稿しておきました。よろしくお願いします。
>移行とかいわず、全部使えばいいと思うよ。
サンデープログラマなんでさすがに無理です。でも、毛嫌いしているわけでなく、やるしかないような状況になったらやるんですが。
>Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
時間に特別制約なくて、Lispでもあったほうが便利ならLisperなら単機能・簡易版でいいので作りたいところですね。(一応、理想だけは高く)
lispって糊言語的な使われ方って多いんですか?
0440デフォルトの名無しさん
2009/06/12(金) 01:20:00> ttp://cobweb.ecn.purdue.edu/~qobi/software.html
ここにおいてあるQobiといかいうのscheme -> c 変換なのかな?
他にもいろいろおいてあるけど便利そうなの結構ありそう
0441デフォルトの名無しさん
2009/06/12(金) 02:25:36シローさんが連載持ったり、グレアムおじさんの文を翻訳したのとかも載せたり。
黒田さんの「黒板に書け!」みたいな記事とか。
中村正三郎さんがAS/400絶賛する連載記事・・・ってこれは関係ないかw
0442デフォルトの名無しさん
2009/06/12(金) 11:51:46たぶんそのコンパイラ用のライブラリかと
0443デフォルトの名無しさん
2009/06/12(金) 12:02:420444デフォルトの名無しさん
2009/06/12(金) 12:08:50vi
0445デフォルトの名無しさん
2009/06/12(金) 17:01:39マジレスすればPLTSchemeになるんじゃないかと思う。
0446デフォルトの名無しさん
2009/06/12(金) 18:03:01どこかでschemeにswank移植してたぞ
0447デフォルトの名無しさん
2009/06/12(金) 19:23:16渋谷の連中に期待かな。
0448デフォルトの名無しさん
2009/06/12(金) 21:35:070449デフォルトの名無しさん
2009/06/12(金) 22:18:010450デフォルトの名無しさん
2009/06/12(金) 23:16:11無いもんはゲリラ的に自分たちで作っちゃうもんね〜というノリが懐かしい。
「Schemeで人工知能を」「Lispでロボット犬を制御する」なんてタイトルでさ。
0451デフォルトの名無しさん
2009/06/12(金) 23:32:19開催時に配布とか、プログラマの人も暇じゃないけど
今のshibuya.lispの開催間隔を見る限り記事一つ二つなら
かけるぐらいの期間だろうから
0452デフォルトの名無しさん
2009/06/12(金) 23:51:12> 創刊当時の月刊I/Oみたいな雰囲気でLisp/Schemeの記事満載の雑誌が欲しい。
月刊I/Oみたいな雰囲気というのがよくわからないけど。
雑誌の意味ってどのくらいあるの? すごくがんばって、季刊誌だろうから、タイムリーさは狙えないよ。
Webのほうがタイムリーさがあるから、Webでいいし。
本という形式にこだわるなら、専門書でいいと思うしなあ。
やっぱり、あれか、ノスタルジーというやつか。
0453デフォルトの名無しさん
2009/06/13(土) 00:15:260454デフォルトの名無しさん
2009/06/13(土) 00:33:26興味の無い記事、専門外の記事も一緒に付いてくるのが技術雑誌のいいところなんだよ
0455デフォルトの名無しさん
2009/06/13(土) 00:40:280456デフォルトの名無しさん
2009/06/13(土) 00:52:26ものすごく質が高ければ買うかもしれないけどなあ。
最近は、定期購読している雑誌はないし、新聞もWebで済ませちゃっているなあ。
本当は紙媒体で読みたいんだけどなあ。
0457デフォルトの名無しさん
2009/06/13(土) 01:06:38半分広告な雑誌ならノーサンキュー。
0458デフォルトの名無しさん
2009/06/13(土) 01:22:580459デフォルトの名無しさん
2009/06/13(土) 01:48:35コミケとかで売ってくれないかなぁ。
0460デフォルトの名無しさん
2009/06/13(土) 02:12:56しかも雑誌みたいに広告もある
0461デフォルトの名無しさん
2009/06/13(土) 03:14:28これでレポートが書けるとか言われたもんだ
今はこんな雑誌出せないのかなぁ
0462デフォルトの名無しさん
2009/06/13(土) 08:15:48OSはDebian/Ubuntu/Handheld Mojo/Angstrom/Androidのどれでもおk。
エディタはもちろんVim。
消費電力はたったの2W。Atomでも30Wぐらい喰うのを考えると信じられない。
ファンレスなので静か。
http://dkc1.digikey.com/us/en/mkt/beagleboard.html
知らない人は日経Linuxの7月号を読んでみて。
0463デフォルトの名無しさん
2009/06/13(土) 10:28:00マクロも名前だけでパッと見で分かるようにしたらいいと思うんだ。
だって、関数と違って引数が評価されないかもしれないんだよ。
例えば先頭を大文字にするとかがいいかな。
0464デフォルトの名無しさん
2009/06/13(土) 10:54:200465デフォルトの名無しさん
2009/06/13(土) 11:42:37quack.el
0466デフォルトの名無しさん
2009/06/13(土) 12:21:12>>463
年季入ったLisperに言わせると、!や?は発音にこまるからという話も。
「reverse!」「reverseね」「ちがうreverse!」「reverse?」「えっ」「えっ」
0467デフォルトの名無しさん
2009/06/13(土) 13:19:07? 「ぷれでぃけーと」
reverse! 「りばーすあんせーふ」
reverse? 「りばーすぷれでぃけーと」
0468デフォルトの名無しさん
2009/06/13(土) 13:36:48手弁当のほうが何の制約もなく、無闇に成果を出す必要がなくていいと思うが。
0469デフォルトの名無しさん
2009/06/13(土) 13:40:100470デフォルトの名無しさん
2009/06/13(土) 13:42:16Lispの専門誌なんて出るわけないだろw
0471デフォルトの名無しさん
2009/06/13(土) 13:50:210472デフォルトの名無しさん
2009/06/13(土) 13:51:210473デフォルトの名無しさん
2009/06/13(土) 14:02:240474デフォルトの名無しさん
2009/06/13(土) 14:03:350475デフォルトの名無しさん
2009/06/13(土) 14:56:01最初の方でEmacsでGaucheを使うっていうとこで
ホームディレクトリに .emacs ファイルを作ったんですができません
↓どこかまちがっていますでしょうか?
(modify-coding-system-alist 'process "gosh" '(utf-8 . utf8))
(setq scheme-program-name "gosh -i")
(autoload 'scheme-mode "cmuscheme" "Major mode for Scheme." t)
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme process." t)
(defun scheme-other-window ()
"Run shceme on other window"
(interactive)
(switch-to-buffer-other-window
(get-buffer-create "*scheme*"))
(run-scheme scheme-program-name))
(define-key global-map
"\C-c s" 'scheme-other-window)
0476デフォルトの名無しさん
2009/06/13(土) 14:59:250477デフォルトの名無しさん
2009/06/13(土) 15:04:44C-c s で、そんなコマンドありませんって言われますorz
0478デフォルトの名無しさん
2009/06/13(土) 15:14:31多分C-c スペース sと入力すれば動く筈
C-c sにしたけりゃ"\C-c s"を”\C-cs"にしてみて
0479デフォルトの名無しさん
2009/06/13(土) 15:35:25ありがとうございます!!
御指摘いただいた箇所をなおしたらできました。
あと、先頭のutf-8のとこもおかしかったみたいでそこがよく分かりません
まじ感謝です。
0480デフォルトの名無しさん
2009/06/13(土) 16:11:07もしWindowsならGaucheboxを使えばいいと思うよ。
http://sourceforge.net/project/showfiles.php?group_id=25227&package_id=275266&release_id=639668
0481デフォルトの名無しさん
2009/06/13(土) 16:18:01誰か代りに実装して
0482デフォルトの名無しさん
2009/06/13(土) 23:23:570483デフォルトの名無しさん
2009/06/14(日) 04:38:57と定義して
(list 0 `,@a)
は駄目なんですね。できてもよさそうなんだけどなぁ
0484デフォルトの名無しさん
2009/06/14(日) 06:33:380485デフォルトの名無しさん
2009/06/14(日) 07:06:45父さん・・・酸素欠乏症に罹って・・
0486デフォルトの名無しさん
2009/06/14(日) 07:13:51perl では list(0, @a) とできますが
lisp 系では (apply list 0 a) と書きますね
0487デフォルトの名無しさん
2009/06/14(日) 12:05:22あ、こういうときapplyか。ありがとう。
でも apply より (list 0 `,@a) の方が直截的で、何がやりたかったか明確じゃないですか。
これを許すとまずい事があるのかな。
apply や funcall 使うのがあんまり美しくないから
common lisp より scheme って人も結構いると思うんだよなぁ。
>>485
それだと (list 0 1 2 3 4) が返ってきちゃうよ。
0488デフォルトの名無しさん
2009/06/14(日) 12:17:18どういう結果が欲しいか
はっきり書かないと
0489デフォルトの名無しさん
2009/06/14(日) 12:26:27ごめんなさい、最初に書いてなかった。schemeです。
0490デフォルトの名無しさん
2009/06/14(日) 12:36:51> でも apply より (list 0 `,@a) の方が直截的で、何がやりたかったか明確じゃないですか。
そうか?
0491デフォルトの名無しさん
2009/06/14(日) 12:41:510492デフォルトの名無しさん
2009/06/14(日) 12:42:29しかし、applyこんな風に使えるんだな
0493デフォルトの名無しさん
2009/06/14(日) 12:50:34`(0 ,@a) == `(0 . ,a) == (cons 0 a) == (apply list 0 a)
パイソニアンが見たら青筋たてそうだな(笑
0494493
2009/06/14(日) 12:55:300495デフォルトの名無しさん
2009/06/14(日) 13:17:38リストが欲しい時はそれが自然ですね。
他の関数の引数に展開したい時は apply で我慢するかぁ。
>>490
違う?要は apply があんま好きじゃないってだけなんだけど。
scheme だと ((car (list + -)) 1 2) ができるって知った時はナイス!って思った。
0496デフォルトの名無しさん
2009/06/14(日) 13:26:590497デフォルトの名無しさん
2009/06/14(日) 17:07:320498デフォルトの名無しさん
2009/06/14(日) 21:49:52perl知らないせいか (list 0 `,@a) じゃ何がやりたかったかさっぱりわからなかった。
aの中身は実行時にしか決定されないからコンパイルするとlistでなくapplyが
呼ばれる。ソースコードに書いていないのに。むしろわかりにくい。
0499デフォルトの名無しさん
2009/06/14(日) 22:53:090500デフォルトの名無しさん
2009/06/14(日) 23:12:440501デフォルトの名無しさん
2009/06/14(日) 23:29:340502495
2009/06/14(日) 23:53:15俺だって perl 知らないよ。
えー、分かりやすいよ。
apply って大体にして、scheme では変数をリストの先頭に置いて関数を呼び出せるんだから
実質、この用途 (リストに格納されている要素を引数として関数に渡す)
のためだけの関数でしょ?
`( ,@a) で展開できるんだから `,@a も展開できたっていいじゃん。
apply なんて不要になるよ。
0503デフォルトの名無しさん
2009/06/15(月) 00:15:45list の場合だったらともかく、マクロだったらどう展開されるやら想像がつかん。
かと言ってマクロ展開より先にスプライシングするわけにもいかんし。
0504デフォルトの名無しさん
2009/06/15(月) 00:30:36quasiquote の展開はリード時にやんなきゃ駄目じゃない?
とはいえリード時には関数かマクロかわからないしなあ。
確かに、単純な場合にはよさげにみえるけど、
ちょっと入り組んだことになっただけで落とし穴だらけになりそうだね。
0505デフォルトの名無しさん
2009/06/15(月) 00:41:000506502
2009/06/15(月) 01:03:52あー、マクロ内で使われるとまずいのね。確かに。
apply だったら自動的に関数only だからそこは大丈夫だったのか。
んじゃ、マクロ内では `,@ は自粛でいいじゃんw。駄目?
だって apply も 関数にしか適用できないんだからお相子だって
0508デフォルトの名無しさん
2009/06/15(月) 01:10:58残してある機能なわけだから、、、と俺なら考えるかな。
0509デフォルトの名無しさん
2009/06/15(月) 01:23:33そろそろ実装方針を示してはくれんか。
0510デフォルトの名無しさん
2009/06/15(月) 02:28:17paul grahamはこう言ってるよ。
http://tamo.tdiary.net/20080304.html#p01
> たとえば cond マクロ。こいつには Lisp 1 からこのかた余計な括弧がびっしり付いてきて、
> それを誰も何ともしてこなかった。
> if と cond を押しつぶしてひとつのオペレータにする Arc の技も、
> 誰かがとっくに見つけていたっておかしくなかったのだが、 間違いなくそんな周知の事実はない。
http://www010.upp.so-net.ne.jp/okshirai/arcll1-j.html
> いくぶん躊躇しながらも、彼は伝統的なLisp
> のletが嫌いだ、なぜならletによって一段インデントが深くなるからだ、と認めた。彼
> が躊躇したのは、letは「正しい」ことだと原則としてはわかっているからだ。この点
> では、「誰にとって正しいの?」と尋ねなくてはならない。なぜなら彼よりも実際頭の
> よいプログラマがいるとは思えないからだ。
>>503
> quasiquote をとびこえて更に外側の括弧が表すリストの一部になるというのはダサいだろ。
一理あるかもしれない。見方によっては荒っぽくて汚い。
>>509
実装方針?quasiquoteをいじればできるのかな。どうすりゃできるだろ
0511デフォルトの名無しさん
2009/06/15(月) 02:45:01このページのapplyの項と同じ話題かな?
0512デフォルトの名無しさん
2009/06/15(月) 06:18:44(define (conc-len x) (apply + (map length x)))
の定義のように、applyの最終的な評価の際に使われる引数が式の読み込み時に
わかるという保証はないんだよ。,@じゃこの関数は定義できないでしょ?
0513デフォルトの名無しさん
2009/06/15(月) 08:45:30ごめん、よく分からない。
,@ って実行時に展開されないの?
(define (conc-len x) (+ `,@(map length x))) じゃ駄目?
0514デフォルトの名無しさん
2009/06/15(月) 08:50:090515デフォルトの名無しさん
2009/06/15(月) 09:09:28「コンマアットマークは、リストかベクタの<qqテンプレート>内部に書かなければならない」
0516デフォルトの名無しさん
2009/06/15(月) 10:08:49unquote-splicing
0517デフォルトの名無しさん
2009/06/15(月) 10:54:36自分の脳内が世界の全てって人なんだろうなあ。
0518デフォルトの名無しさん
2009/06/15(月) 11:41:03えー、分かりやすいよ。
lisp って大体にして、言語を拡張できるのが売りなんだから
実質、この用途のためだけの言語でしょ?
perl で展開できるんだから lisp も展開できたっていいじゃん。
perl なんて不要になるよ。
0519デフォルトの名無しさん
2009/06/15(月) 11:47:440520デフォルトの名無しさん
2009/06/15(月) 12:12:38> 実質、この用途のためだけの言語でしょ?
へー
0521デフォルトの名無しさん
2009/06/15(月) 14:39:08一言で言えばnoです。
マクロと関数の違いについて理解していますか?式の変換と評価の違いがわかりますか?
0522デフォルトの名無しさん
2009/06/15(月) 15:12:54`(,x y ,z)と書くところを、
'(`x y `z)と書ければ、
'(x y z)との字面の対象性上は美しいが、
中を見なければquoteすら効率的に評価できなくなる。O(1)→O(n)
>>513もそうだが、"全体"の構造や評価に影響を与える"部分"があるのはよくない。
0523デフォルトの名無しさん
2009/06/15(月) 17:37:21展開させないために、リファレンスという機能を使わなきゃいけない。
>>522
> "全体"の構造や評価に影響を与える"部分"があるのはよくない
ここ同意。美しくもないし、わかりやすくもないと思う。
そういう展開をさせたいという意志を、applyが一手に引き受けている現状のほうが、
俺には綺麗だし把握しやすい。
0524デフォルトの名無しさん
2009/06/15(月) 19:11:38少なくとも Lisp はこういう理由でこういう選択をした、ってことだ。
0525513
2009/06/15(月) 20:26:30確かに説明になってなかったね。すまん。
>>519
自分の外の括弧に展開させることなんてできないんじゃない?
やっぱやろうとしたら要素に `,@ がある括弧は apply に読み替えるって
動作が必要だから、処理系の実装になっちゃうから無理だな。
しかもそのチェックがコストだろうし。
>>521
,@ が実行時に展開してるように見えたから混同しちゃった。
どうやって ,@ は可変のリストを展開できるんだろうって思ったけど
たぶん apply に変換させてるだけなんだよね?
>>522-523
よくない派が多数か。んじゃやっぱあんまいけてないんだろうな。これはあきらめる。
0526デフォルトの名無しさん
2009/06/15(月) 20:33:30ネタ提供ありがとう
0527デフォルトの名無しさん
2009/06/15(月) 20:42:35本読んでCPSやYコンビネータはわかった気になったけど、
何時までもquoteや評価のあたりで何かモヤモヤしてる。
0528デフォルトの名無しさん
2009/06/15(月) 22:30:15あきらめるってのが良くわからないけど(まるでこのスレを起点に何かを動かすつもりだったみたいな)、
試しにそういう動作をするマイLispを作って遊んでみたらどう?
で、使ってみたらこんな感じだった、って報告を後日改めてここに書き込むとか。
0529デフォルトの名無しさん
2009/06/16(火) 01:27:38例えば psyntax には pure Scheme な quasiquote の実装があるから
眺めてみるといいんじゃない
ttp://www.cs.indiana.edu/chezscheme/syntax-case/
0530デフォルトの名無しさん
2009/06/16(火) 03:53:44その人とは違うよ。
>>528
そうだね。マイLisp作れたら面白そうだ。
汚いやり方でも少なくとも俺には合ってるからね。
俺がSICP読み終える頃には楽勝で実装できるんだろ、きっと。
>>529
quasiquoteは100行くらいか。
syntax だけじゃ多分無理だけど参考にするわ
0531デフォルトの名無しさん
2009/06/16(火) 04:23:16consとappendに展開するマクロみたいな感じですむからそんなに難しくないと思う。
`@,で展開するのはもはやquasiquoteとは別の文法を導入しているような気が。
別にあっても悪くはないと思うけどもこれだけだと単なるapplyの中置演算子版みたいだし、
特殊な文法用意するのはlispらしくないし別にapplyつかえばいいじゃんということな気がする
0532デフォルトの名無しさん
2009/06/16(火) 04:49:20SICP読破を目指して本ばっかり読んで頭でっかちになるより、ちゃんと手を動かして
コードを書きつつ試行錯誤して正しい理解を身につけてほしいと思う今日この頃。
べつにトンチンカンなことを言ってスレを賑わすのが悪いと言ってるんじゃないだが、
本に書いてある意味論以外に、コードがどういう流れで処理されて実行結果に
たどり着くのかという流れを理解してから物を言った方がいいよ。
それとquasiquoteのオレサマ実装ぐらいSICPなんて読まんでもHaskellの48時間で
書くやつで誰でもできると思うけど。
0533デフォルトの名無しさん
2009/06/16(火) 06:56:16本当に難しくなるのは、SICPで扱っていない枝葉末節が絡んできた時。
0534デフォルトの名無しさん
2009/06/16(火) 07:53:23Schemeも同じ仕様なのはどういうわけだろ。
(append (list arg1 ...) args)をas isにすれば、
コンパイル時に余計なコンスセルを消費しないのは確かだけど、
余計なお世話のような気がする。
便利主義の昔のLispはまあいいとしても。
0535デフォルトの名無しさん
2009/06/16(火) 09:08:38気持ちわかるよ
俺も滝に打たれるような気持ちでアセンブラ書いてた時期があったから
これが済んだらスーパープログラマーになってるはず、みたいなw
まあ無駄にはなってないけどさ
0536デフォルトの名無しさん
2009/06/16(火) 19:15:530537デフォルトの名無しさん
2009/06/16(火) 21:16:20枝葉末節を知っているだけで生産性が100倍以上になるわけだ。
0538530
2009/06/16(火) 22:10:10おー、`,@ で展開ができるよ! ありがとう、面白い。>>512もできた。
mzsceme は #%app で関数実行の前に細工ができるのか。
#mzscheme よく分からないけど (require m) は (require "filename") だよね。
0539デフォルトの名無しさん
2009/06/17(水) 11:53:24モジュール名
0540デフォルトの名無しさん
2009/06/17(水) 12:42:36な人が増えた気がする。
0541デフォルトの名無しさん
2009/06/17(水) 12:52:39それしか読んでない人が増えるのは当たり前だわな。
アホですか?(悪い意味ではなく)
0542デフォルトの名無しさん
2009/06/17(水) 14:18:14なはずなのにそれがイコールで結ばれじゃう単細胞が多いってこと
0543デフォルトの名無しさん
2009/06/17(水) 14:54:56compileでcommon lispに変換はできる
それをschemeで動くようにしてstalinで実行が一番高速なんだろうか
0544デフォルトの名無しさん
2009/06/17(水) 17:39:230545デフォルトの名無しさん
2009/06/17(水) 17:39:480546デフォルトの名無しさん
2009/06/17(水) 17:40:58生きている間にコンパイル終らないよ
0547デフォルトの名無しさん
2009/06/17(水) 18:32:530548デフォルトの名無しさん
2009/06/17(水) 19:22:230549デフォルトの名無しさん
2009/06/17(水) 19:22:410550デフォルトの名無しさん
2009/06/17(水) 21:35:450551デフォルトの名無しさん
2009/06/17(水) 23:27:27だから?
別に気にするところじゃないだろ。
0552デフォルトの名無しさん
2009/06/18(木) 09:17:070553デフォルトの名無しさん
2009/06/20(土) 03:28:11逆はあった.
common lispからschemeに乗り換えて見ようかと思うんだけど
大幅に違うのは継続ぐらい?
0554デフォルトの名無しさん
2009/06/20(土) 03:32:060555デフォルトの名無しさん
2009/06/20(土) 06:53:11Lisp-1とLisp-2の違いとか、結構色々違いがあると思うけど。
0556デフォルトの名無しさん
2009/06/20(土) 09:16:29http://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
0557デフォルトの名無しさん
2009/06/21(日) 16:50:46schemeでは#fのみが偽だそうですが
Common lisp使いから見たらこれはどうなんでしょうか
なんとなく、#fと()がどちらも偽のほうが使いやすそうには思いますが
問題になるケースがあったりするのでしょうか?
0558デフォルトの名無しさん
2009/06/21(日) 16:57:35(not-empty? x)の代わりにxが書ける簡便さを選ぶかの違い。
あなたのセンスで決めてOK
0559デフォルトの名無しさん
2009/06/21(日) 16:59:08意味が変わるので既存のschemeのコードがそのまま動かない
問題になるのはそれぐらい
既存のコードがきっちり動くってのはそれだけで楽しいから
昔scheme作った時泣く泣く準拠させたよ
中途半端はよくないと思った
0560デフォルトの名無しさん
2009/06/21(日) 17:10:24作りたいのはオラオラschemeに近いので
とりあえず#fのみにしとくのが無難そうですね
ありがとう
0561デフォルトの名無しさん
2009/06/21(日) 22:19:05それschemeじゃなくなっちゃうよ、Schemeみたいな俺Lispだよ
Schemeを名乗るならRnRSに準拠しないと。
Lisp属を名乗るだけならなんでもいいけどさ。
;;;; commonlispを名乗ると完成するまで大変過ぎる
0562デフォルトの名無しさん
2009/06/21(日) 22:49:080563デフォルトの名無しさん
2009/06/21(日) 22:50:30RnRSからSchemeが生まれたんじゃなくて
RnRSは後からできたわけでしょ?
他人に使わせることや複数人で開発することがあるとすれば
規格準拠にしたほうがいいに決まっているけど
0564デフォルトの名無しさん
2009/06/21(日) 22:55:20木構造のmapのiter版って作れるんでしょうか
なんとかこんなのを書いてみたんですが、flattenされてしまってます
(define (tmap f t)
(define (aux f t r)
(cond ((null? t) r)
((not (pair? t)) (cons (f t) r))
(else (aux f (cdr t) (aux f (car t) r)))))
(reverse (aux f t ())))
(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
;こうなって欲しい
'((1 4) (9 (16 25)))
0565デフォルトの名無しさん
2009/06/21(日) 23:37:10(cond
((pair? t)
(if (pair? (car t))
(cons (tmap f (car t)) (tmap f (cdr t)))
(cons (f (car t)) (tmap f (cdr t)))))
(else t)))
こうかな
>(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
=>((1 4) (9 (16 25)))
0566デフォルトの名無しさん
2009/06/22(月) 00:08:38経験をしている人いますか?
0567デフォルトの名無しさん
2009/06/22(月) 03:30:41(define tmap (lambda (f x) (if (pair? x) (map (cut tmap f <>) x) (f x))))
0568デフォルトの名無しさん
2009/06/22(月) 06:12:44普通に書くと再帰が二カ所あるので、単純な繰り返しにはできない
末尾呼び出し版でよければ、CPSでこんな感じ
(define (tmap f t)
(define (aux t cont)
(cond ((null? t) (cont t))
((not (pair? t)) (cont (f t)))
(else (aux (car t)
(lambda (r1)
(aux (cdr t)
(lambda (r2)
(cont (cons r1 r2)))))))))
(aux t values))
0569デフォルトの名無しさん
2009/06/22(月) 06:44:58(define (tmap f t)
(define (aux f t r s)
(cond
((null? t)
(if (null? s)
(reverse r)
(aux f (caar s) (cons (reverse r) (cdar s)) (cdr s))))
((not (pair? t))
(if (null? s)
(f t)
(aux f (caar s) (cons (f t) (cdar s)) (cdr s))))
(else
(aux f (car t) '() (cons (cons (cdr t) r) s)))))
(aux f t '() '()))
0570デフォルトの名無しさん
2009/06/22(月) 07:00:570571デフォルトの名無しさん
2009/06/22(月) 07:21:29木構造ならcdrも'()でもpairでもない場合があるだろ。
0572デフォルトの名無しさん
2009/06/22(月) 07:54:59木構造なら子が3個以上の場合があるだろ。
0573デフォルトの名無しさん
2009/06/22(月) 08:23:160574デフォルトの名無しさん
2009/06/22(月) 08:45:26Lispの汎用的な処理で木構造といえば普通は571の方の定義。copy-treeとか。
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_t.htm#tree
これはCommon Lispだけど、Schemeがこれに異を唱えるという話も聞かない。
0575デフォルトの名無しさん
2009/06/22(月) 08:50:360576デフォルトの名無しさん
2009/06/22(月) 09:10:45(define (tmap func tree)
(cond ((null? tree) '())
((pair? tree) (cons (tmap func (car tree)) (tmap func (cdr tree))))
(else (func tree))))
0577デフォルトの名無しさん
2009/06/22(月) 09:49:16(tmap null? '((() 2) (3 (() 5))))
;こうなって欲しい
((#t #f) (#f (#t #f)))
0578デフォルトの名無しさん
2009/06/22(月) 10:26:36(leaf ())と(branch)の違いが曖昧になるね
0579デフォルトの名無しさん
2009/06/22(月) 10:36:43練習がてら、やってみたら。
(define (tmap f t)
(let loop ((t t) (r '()) (s '()))
(if (pair? t)
(if (list? (car t))
(loop (car t) '() (cons (list (cdr t) r) s))
(loop (cdr t) (cons (f (car t)) r) s))
(if (null? s)
(reverse r)
(let ((st (list-ref (car s) 0)) (sr (list-ref (car s) 1)) (s (cdr s)))
(loop st (cons (reverse r) sr) s))))))
>>577
carに現れる'()を要素とみるか空ノードとみるかの違い。
上の関数は4行目の list? を pair? にかえるという実にそのものの変更で所望の動作に。
0580デフォルトの名無しさん
2009/06/22(月) 23:06:490581564
2009/06/22(月) 23:39:28>>567はとても短いし
>>568はすごく参考になります
主に>>568を参考に、
>>571や>>577のケースも含めて動くものを書いてみました。
(define (tmap f t)
(define (aux t cont)
(cond
((and (pair? t) (null? (car t)))
(aux (cdr t) (lambda (r) (cont (cons (f (car t)) r)))))
((null? t) (cont t))
((not (pair? t)) (cont (f t)))
(else (aux (car t)
(lambda (r1)
(aux (cdr t)
(lambda (r2)
(cont (cons r1 r2)))))))))
(aux t values))
以下のパターンで動きます
(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
(tmap (lambda (x) (* x x)) '((1 . 2) (3 (4 . 5))))
(tmap null? '((() 2) (3 (() 5))))
(tmap (lambda (x) (* x x)) ())
0582デフォルトの名無しさん
2009/06/23(火) 00:59:09リスト表現としてのツリーを普段どう見てるか
・対応する →初心者
・無視する →中級車
・エラーにする →高級車
0583デフォルトの名無しさん
2009/06/23(火) 01:43:540584デフォルトの名無しさん
2009/06/23(火) 01:46:360585デフォルトの名無しさん
2009/06/23(火) 01:48:470586デフォルトの名無しさん
2009/06/23(火) 01:52:390587デフォルトの名無しさん
2009/06/23(火) 02:20:070588デフォルトの名無しさん
2009/06/23(火) 04:51:560589デフォルトの名無しさん
2009/06/24(水) 04:20:36http://tinyurl.com/lv4dzf
0590576
2009/06/25(木) 07:06:29もう>>564氏のカタはついたようだが、すこしだけ短くなった気もするので
エロイ人からの突っ込みを期待して書いておくことにする。
(define (tmap f t)
(define (tmap-cps f t cont)
(cond ((pair? t) (tmap-cps f (car t)
(lambda (x) (cont (cons x (tmap-cps f (cdr t) values))))))
((null? t) '())
(else (cont (f t)))))
(tmap-cps f t values))
0591デフォルトの名無しさん
2009/06/25(木) 12:17:36tmap-cps自体を関数として使うつもりがあるなら
内部でvaluesを決めうちしちゃだめよ
0592デフォルトの名無しさん
2009/06/25(木) 13:08:42次はクロージャを使わずに継続をスタックで表現してみよう
0593デフォルトの名無しさん
2009/06/25(木) 13:22:41>(cont (cons x (tmap-cps f (cdr t) values)))
部分式の値は一時変数に入れてから使う。
(tmap-cps f (cdr t) (lambda (y) (cont (cons x y))))
本当は
(cdr-cps t (lambda (d) (tmap-cps f d (lambda (y) (cons-cps x y cont)))))
と書きたい。
http://en.wikipedia.org/wiki/Continuation-passing_style
>The key to CPS is to remember that
>(a) every function takes an extra argument, its continuation, and
>(b) every argument in a function call must be either a variable or a lambda
>expression (not a more complex expression).
0594デフォルトの名無しさん
2009/06/26(金) 09:08:05真偽値 #t, #f とは別に TRUE, FALSE の定数が用意されています。
標準のダイアログで真偽値を受け取ると TRUE, FALSE で受け取ってくるので
条件判定を
(if (= flag TRUE) 処理)
と書かなければいけないのですが、マクロなどを使って
(if flag 処理) と書けるようにするにはどうすれば良いでしょうか?
0595デフォルトの名無しさん
2009/06/26(金) 10:09:07うちのWindows上のGIMP 2.6.6でマクロを評価すると、
Script-Fuコンソール固まるから詳しいことは言えないけど、
hygienicじゃない伝統的なマクロは使えるみたいだから、
(define-macro (dialog-if test then . else)
`(if (= ,test TRUE) ,then ,@else))
みたいなのでいいんじゃないか。
最悪、マクロ使えないなら、他の処理系でS式変換すればいいと思う。
0596デフォルトの名無しさん
2009/06/26(金) 10:19:17どなたかご存じない?
0597デフォルトの名無しさん
2009/06/26(金) 10:22:21foldrとfoldlの双対性?
0598デフォルトの名無しさん
2009/06/26(金) 11:22:23GIMP2.6.5で試したところ期待通りの動作になりました。
ありがとうございます。
0599デフォルトの名無しさん
2009/06/26(金) 23:44:46schemeはカリー化を言語組み込みでサポートしたほうが
シンプルになるように思うんだけど
今からそんなことをせずともpa$もcutもあるわけで
R6RSはすでに十分実用的になってしまった感がする
R5RSまでのシンプルさのが、良いなぁ
0600デフォルトの名無しさん
2009/06/27(土) 11:04:33R5RSのマクロはcons, quote, quasiquote, mapなど一切使わないで書けるよ
という意味でLisp界にとって危険な存在だからね
黒歴史ということにしたい人もいるだろう
0601デフォルトの名無しさん
2009/06/27(土) 13:10:18そのままだとあんま便利とは思えない。
名前付きのキーワード引数をサポートして
オプションを固定化するために使えればいいけど。
(define (http cmd host port url auth ... )〜)
(define htttpa (http :host "192.168.10.2" :auth ""))
(httpa :cmd "GET" :port 8080 :url "/")
でも引数全部埋めないと実行できないから不便か
0602デフォルトの名無しさん
2009/06/27(土) 14:40:01しかし、どちらにせよ名前付き引数は嫌いだなぁ
5引数あって3引数埋めたら
2引数の:hoge :fugaを埋めたら使えるカリー化関数になるが
これってつまるところ、structuralに型がついた関数なわけで
ちょっと息苦しい
大体、引数が2個か3個の関数は多いし
引数の順番を入れ替えるのは3引数のflipみたいなのを使えばよくね
(map (- 1) '(1 2 3))
(map (flip - 1) '(1 2 3))
0603デフォルトの名無しさん
2009/06/27(土) 15:53:12うん、だからカリー化って意味ねーなと思って
つーかカリー化前提でデフォルト値の提供ってどうすんの?
そもそも引数たくさんあるような関数なら
自力でmake-httpみたいなパラメータ固定化手段を用意するだろうし
0604デフォルトの名無しさん
2009/06/27(土) 16:00:44引数に値と関数を取るようなやつとか、
関数をいくつも引数にとって関数を返す関数なんかをカリー化したら
保守できなくなりそうだよ
>>599
試しに作って公開してみてよ
0605デフォルトの名無しさん
2009/06/27(土) 17:09:160606デフォルトの名無しさん
2009/06/27(土) 17:43:410607デフォルトの名無しさん
2009/06/27(土) 19:54:04gauche-glをcygwinで動かせた人います?
0608デフォルトの名無しさん
2009/06/27(土) 20:35:17ちなみにMingwでは出来た。
0609デフォルトの名無しさん
2009/06/27(土) 21:07:160.8.14ではなんかしらんがコケた
0610デフォルトの名無しさん
2009/06/27(土) 21:16:31guileもboehm-gcを使ってたって知りませんでした
それも5.2とか古いver
よく今まで動いてたなとゾッとしました(メジャープラットフォームでは問題なかろうけど)
Changes in 1.9.0を読んでかなりワクワクしながらビルドしたんですけど
コケるんで萎えて放置中
偶数版リリースまで待ったほうがいいのかなぁ
1.8までのプラットフォームでちゃんと動くようになれば2.0はかなり期待大
0611デフォルトの名無しさん
2009/06/28(日) 17:15:24これを聞いて、mingwのインストールからやってみましたが
私には無理でした。gauche-glのmakeで失敗します
具体的には(home-directory)が#fを返すためにそこでmakeが止まります
gaucheのmingwでのビルドでは全てのテストにパスしていない
(make testは9050/9067 pass)のが原因かもしれません
cygwinは全然だめで
./configure --includedir=ほげ --oldincludedir=ふがを
windowsとcygwinのパス表示で色々試しましたが
GLUT/glut.hどころか、Cのヘッダ(sys/types.h等)も
configureでnoになります。
(gaucheのインストールでは普通にyesになります)
なお、glut自体はcygwin/windowsで動作確認済です
Gauche-boxの存在にその後気づいてインストールしたのですが
バイナリ配布されているgauche-glは
リンク切れになっていました
なんでもいいのでwindows環境でgauche-glが使いたいのですが
バイナリ配布してる箇所って、他にないですかね・・
0612デフォルトの名無しさん
2009/06/28(日) 17:19:580613デフォルトの名無しさん
2009/06/28(日) 19:42:22http://saito.s4.xrea.com/?Gauche
0614デフォルトの名無しさん
2009/06/28(日) 20:26:250615デフォルトの名無しさん
2009/06/28(日) 21:05:08悪い
今再Up中だからちょっとまってくれや
0616デフォルトの名無しさん
2009/06/28(日) 21:08:26準備出来たでー
0617デフォルトの名無しさん
2009/06/28(日) 21:14:09どうやってビルドしているんだろうか。詳しい手順が知りたい。
0619デフォルトの名無しさん
2009/06/29(月) 01:04:48忘れた。
でも、ひっかかったのはしょーもないことばっかりだった気がする。
ひっかかったところをそのつど修正すればだいたいいけるよ。
もしかしたら Gauche 自体もちょっとは弄ったかもしんない。
0620デフォルトの名無しさん
2009/06/29(月) 01:16:01Cygwin でなくてよかったんかい?
Mingw でビルドした Gauche はいくつかの機能が使えないよ。
重大なのはプロセスとスレッド関連くらいだけど。
0621デフォルトの名無しさん
2009/06/30(火) 14:53:46窓使いでcygwin版を使いたがる人は少ないはず
0622デフォルトの名無しさん
2009/07/01(水) 14:37:48こんなのを考えてみたんだけどどう思う?
consセルだけのほうが
()について非対称なリストよりもシンプル
;consセル版fold
(define (cfold f a b)
(cond ((not (pair? b)) (f a b))
(else (cfold f (f a (car b)) (cdr b)))))
(define (cfold1 f lst) (cfold f (car lst) (cdr lst)))
;reverseがリストよりもシンプルで効率的に(appendなしで)書ける
(cfold1 (lambda (x y) (cons y x)) '(1 2 . 3))
;このままだと、「空」が表現できないので
;consを仮にこんな風に定義してみる
;()なら無視するcons
(define (conss x y)
(cond ((null? x) y)
((null? y) x) ;片側だけのほうがよいか?
(else (cons x y))))
;末尾に()がないと思っても良い
(cfold (lambda (x y) (conss y x)) () '(1 2 . 3)) ;←これを言語レベルで'(1 2 3)と表記
(cfold (lambda (x y) (conss y x)) () '(1 2 3))
0623デフォルトの名無しさん
2009/07/01(水) 14:41:180624デフォルトの名無しさん
2009/07/01(水) 14:49:58(cfold (lambda (x y) (conss y x)) () '(1 2 (1 . 2)))
(cfold (lambda (x y) (conss y x)) () '(1 2 (1 2)))
ただ、空リストからなるリストは表現できないので
これは不備だなぁ
conssを片側だけにしてもreverseは動かないし
0625デフォルトの名無しさん
2009/07/01(水) 15:01:49(cdr '((1 2)))が()だから今動いてるけど
そうじゃなかったら動かないですね
そういう意味ではリストの末尾は必ずatomじゃないとダメになるから
これじゃダメだ
0626デフォルトの名無しさん
2009/07/01(水) 21:12:08ってネタは尽きないよな
気持ちは判るが、妄想垂れ流す前に一度それで組んでみろよ
>>622みたいなのはすぐ作って確認できるだろ
どう思う?って、俺はまたキチガイかと思ったよ
0627デフォルトの名無しさん
2009/07/01(水) 21:46:01作らない奴はクソだ,と思っているんだろうけど,
設計は設計で,そっちも大事だと思うぞ。
全部作ってみろで返すのはひどい。
0628デフォルトの名無しさん
2009/07/01(水) 21:57:45閑散としている時のネタとしてはアリじゃないかな
0629デフォルトの名無しさん
2009/07/02(木) 00:05:48ドットペアを含むリスト(1 2 . 3)は
/\
1 /\
2 3
リスト(1 2 3)は
/\
1 /\
2 /\
3 nil
主観ではcdrがconsかnilに統一されてる後者の方がシンプルだと思う
前者はcdrがatomという可能性をいつも意識するからハゲそう
0630デフォルトの名無しさん
2009/07/02(木) 02:24:46Schemeなのかな。CLなのかな。
0631デフォルトの名無しさん
2009/07/02(木) 09:28:58Organizing Functional Code for Parallel Execution: or, foldl and foldr Considered Slightly Harmful
ってなってるが、foldは悪なのだろうか
内容が気になるな
0632デフォルトの名無しさん
2009/07/02(木) 09:51:32シーケンシャルなのを問題にしてるんでしょ。
>>630
これかな?
http://www.amazon.co.jp/初めての人のためのLISP-ソフトウェアライブラリ-3-竹内-郁雄/dp/4781904548
特定の言語を対象としている本じゃないよ。このスレのように。
トピックスが増えるんじゃないのかな。
0633デフォルトの名無しさん
2009/07/02(木) 10:04:34(x + y) + z = x + (y + z) { associative }
x + e = e + x { unit }
x + (y + (z + e)) = (x + y) + (z + e)
(((e + x) + y ) + w) = (e + x) + (y + w)
ちなみにこれはfoldlからfoldrへの相互書き換えが可能になる条件でもある
多分この辺がslightlyに留まる理由で、
結論としてmonad最高!!ってな流れになったりならなかったりという予想
0634デフォルトの名無しさん
2009/07/02(木) 10:26:36HMVはお取り寄せ可能になってる。
http://www.hmv.co.jp/product/detail/3608319
発行年月 : 2009年06月
出版社 : 翔泳社
http://seshop.com/には載ってないが
0635デフォルトの名無しさん
2009/07/02(木) 12:14:49http://www.bk1.jp/product/03125439
0636デフォルトの名無しさん
2009/07/02(木) 16:08:20wじゃなくてz使ってよ、気色悪いw
0637デフォルトの名無しさん
2009/07/02(木) 18:41:290638デフォルトの名無しさん
2009/07/02(木) 18:59:01書店の人が出版社に確認してくれた。当初予定より遅れて
平成21年12月2日だそうだ。楽しみだね。
0639デフォルトの名無しさん
2009/07/02(木) 23:15:22\(^o^)/
0640デフォルトの名無しさん
2009/07/03(金) 00:05:290641デフォルトの名無しさん
2009/07/03(金) 00:07:240642デフォルトの名無しさん
2009/07/03(金) 00:21:15ありがとうだぜさっそくポチるぜ。
0643デフォルトの名無しさん
2009/07/03(金) 02:43:140644デフォルトの名無しさん
2009/07/03(金) 04:18:450645デフォルトの名無しさん
2009/07/03(金) 04:55:07竹内先生の本は持ってるけど、記念で買おう。
0646デフォルトの名無しさん
2009/07/03(金) 05:50:440647デフォルトの名無しさん
2009/07/03(金) 06:20:20もっと突っ込んだの書いて欲しいな
0648デフォルトの名無しさん
2009/07/03(金) 06:34:490649デフォルトの名無しさん
2009/07/03(金) 09:42:11意外と面白くなかったw
それより雑誌bitのTAOの連載を合本したら面白いのに。
0650デフォルトの名無しさん
2009/07/03(金) 10:45:35日本であれぐらい書ければ、もっちーがファビョることもなかっただろうに
0651デフォルトの名無しさん
2009/07/03(金) 18:26:23あの本は初心者向けの本じゃないよ。
Lispマニア向けの本だ。初心者が読んでもそれなりに楽しめるけど。
0652デフォルトの名無しさん
2009/07/03(金) 18:29:180653デフォルトの名無しさん
2009/07/03(金) 20:12:01と結局買っても積んだままにしてしまう
お決まりの言語のおさらいを数章割かれてるのを見ると頭に来るからだ
いっそのこと超上級者向けのが興味をそそられる
0654デフォルトの名無しさん
2009/07/03(金) 20:24:17SICP も初心者向だよwW
0655デフォルトの名無しさん
2009/07/03(金) 21:51:020656デフォルトの名無しさん
2009/07/03(金) 22:05:200657デフォルトの名無しさん
2009/07/04(土) 00:37:31例え初心者向けと銘打たれていても、
光る記述で満ち溢れており、
熟練者でも楽しめるものなのだ。
だからグルの書いた本は面白いのだ。
0658デフォルトの名無しさん
2009/07/04(土) 01:45:120659デフォルトの名無しさん
2009/07/04(土) 01:54:17ビビッタ。
実は、最近なぜか洗脳について勉強していたりする。関係あるの?
0660デフォルトの名無しさん
2009/07/04(土) 02:01:580661デフォルトの名無しさん
2009/07/04(土) 02:02:460662デフォルトの名無しさん
2009/07/04(土) 02:04:310663デフォルトの名無しさん
2009/07/04(土) 03:21:580664デフォルトの名無しさん
2009/07/04(土) 03:34:000665デフォルトの名無しさん
2009/07/04(土) 05:49:37もったいないお化けが出るぞ
0666デフォルトの名無しさん
2009/07/04(土) 19:46:290667デフォルトの名無しさん
2009/07/05(日) 10:42:050668デフォルトの名無しさん
2009/07/05(日) 12:41:05面白かったよ。#4あるならLTしようと思ったくらいには(TTはなんいどたかい)。
0669デフォルトの名無しさん
2009/07/05(日) 12:47:18以下のs1で、値が変更出来るようなプログラムは書けますか?
schemeは値渡しなので無理なような気もしますが
また、test関数では内部でtをset!しているにもかかわらず
その変更は影響がないように見えますが何故なのでしょうか
(define (s1 t v) (set! t v))
(define (sa t v) (set-car! t v))
(define (sd t v) (set-cdr! t v))
(define (sa2 t v) (let ((r (cdr t))) (set-car! r v)))
(define (test f)
(define t '(()()))
(let ((r (f t 1)))
(print t)
(set! t '(()()))
r))
(test s1)
(test sa)
(test s1) ;why?
(test sd)
(test sa2)
;(map test (list s1 sa sd sa2))
0670デフォルトの名無しさん
2009/07/05(日) 13:11:03int f(int x) {
x = 10;
}
やってるのはこれと同じ
0671デフォルトの名無しさん
2009/07/05(日) 13:17:32set! は変数とオブジェクトの結び付き (束縛) を付け替えるオペレータ。
set-car! や set-cdr! はオブジェクト (consセル) の中身を変更するオペレータ。
ってことを念頭に置いて考えるとわかりやすいかも。
あまりに根本的すぎることなのでそこを理解できてないようだとちょっと説明しづらい。
0672デフォルトの名無しさん
2009/07/05(日) 13:26:06> その変更は影響がないように見えますが何故なのでしょうか
処理系がわからんから何とも言えんが、
おそらくその処理系は、クォートされたリストをすべての関数呼び出しで共有するように作られているんだと思う。
test 内の (define t '(()())) のところでは、
すべての関数呼び出しで共有される '(()()) というリストを t に束縛する、みたいな処理が行われる。
そこで、(test sa) を実行してしまうと、そのリストが '(1 ()) に書き換えられてしまう。
そのため、次回以降の test の呼び出しでは、'(1 ()) というリストが t に束縛されてしまう。
そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけないことになってるので、
こんな処理をすること自体が間違い。
やるんだったら、毎回リストを生成するようにする。
(define t (list '() '())
0673デフォルトの名無しさん
2009/07/05(日) 13:55:51って約束したじゃないですかー
0674デフォルトの名無しさん
2009/07/05(日) 14:02:00> 処理系がわからんから何とも言えんが、
むしろ何も言うな
0675デフォルトの名無しさん
2009/07/05(日) 14:29:330676デフォルトの名無しさん
2009/07/05(日) 15:05:14悪口・不満的な話は、直接、主催者にメールでもしてくれ。
0677デフォルトの名無しさん
2009/07/05(日) 15:24:010678デフォルトの名無しさん
2009/07/05(日) 15:48:430679デフォルトの名無しさん
2009/07/05(日) 15:53:09つべで探してたわ
0680デフォルトの名無しさん
2009/07/05(日) 15:53:510681デフォルトの名無しさん
2009/07/05(日) 15:54:39http://www.youtube.com/view_play_list?p=C7D5490AD455E464
0682デフォルトの名無しさん
2009/07/05(日) 17:24:59ありがとうございます
>>671
関数の引数はjavaのように、
実体を指すポインタのコピーが渡ると考えれば良いですよね
set!だとコピーしたポインタ自体を変更しても元データには全く影響がないが
set-car!だと、コピーしたポインタの指す先を変更するので
引数にset-car!しても破壊的変更が可能
だとすれば、参照渡しで実現出来る
関数の実引数の実体を直接書き換えるような
関数の作成は不可能ですね
>>672
>そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけない
これは初めて知りました。これが原因ですね
コードはGaucheとGuileで試したのですが
どちらもクォートされたリストは共有されるような実装ってことですね
0683デフォルトの名無しさん
2009/07/05(日) 18:31:28> クォートされたリストは共有されるような実装ってことですね
確か Gauche の場合は REPL が起動してるときは共有されないはず。
だからといってそれを期待しちゃだめなんだけど。
Gauche のマニュアルから引用 ↓
注: R5RSは、リテラル式の値を変更するのはエラーであるとしています。
しかしGaucheはペアとベクタについてはそれが定数であるかどうかをチェックしておらず、
set-car!やvector-set!等の破壊的手続きによってそれらの値を変更してもエラーは報告されません。
そうした場合の動作は不定です。
0684デフォルトの名無しさん
2009/07/05(日) 18:45:19ダイナミックスコープっぽいような気がするけど
この二つは何か関係あるのかな?
0685デフォルトの名無しさん
2009/07/05(日) 18:48:13関係ない。
0686デフォルトの名無しさん
2009/07/05(日) 18:49:34参照渡しは仮引数/実引数バインディングスタイルの一つ
ダイナミックスコープは自由変数のルックアップスタイルの一つ
0687デフォルトの名無しさん
2009/07/05(日) 18:52:02局所変数と大域変数の話なのでは。
湯浅先生の「Scheme入門」だとP32〜。
0688デフォルトの名無しさん
2009/07/05(日) 18:58:160689デフォルトの名無しさん
2009/07/05(日) 19:13:160690デフォルトの名無しさん
2009/07/05(日) 19:19:180691デフォルトの名無しさん
2009/07/05(日) 19:23:28湯浅先生の名前があればもう否定しどころがないみたいな言い方じゃなくて、もっと良い点と悪い点を検討する必要はあるんじゃないの?
もちろん、糞本って言う方もどのへんが糞なのか示さないと議論にならんけど。
0692デフォルトの名無しさん
2009/07/05(日) 19:49:360693デフォルトの名無しさん
2009/07/05(日) 19:51:06いちいち先生つけるなよ
0694デフォルトの名無しさん
2009/07/05(日) 19:52:53湯浅の糞本持ち出す687ってなんなんだろう?
0695デフォルトの名無しさん
2009/07/05(日) 20:03:58おっと、ここは2chだったな。玉石混交ですな。
0696デフォルトの名無しさん
2009/07/05(日) 20:13:11時間の無駄
0697デフォルトの名無しさん
2009/07/05(日) 21:01:420698デフォルトの名無しさん
2009/07/05(日) 21:05:350699デフォルトの名無しさん
2009/07/05(日) 21:06:090700デフォルトの名無しさん
2009/07/05(日) 21:18:47生暖かく見守っといてやれって。
0701デフォルトの名無しさん
2009/07/05(日) 21:24:080702デフォルトの名無しさん
2009/07/05(日) 22:23:540703デフォルトの名無しさん
2009/07/05(日) 23:57:540704デフォルトの名無しさん
2009/07/06(月) 05:04:12そういうことじゃないだろ。
実際に参加したの感想が聞きたいんだが。
いいアイデアが浮かんだとか、もっと○○の分野を勉強しようと思ったとか、その他いろいろ。
0705デフォルトの名無しさん
2009/07/06(月) 08:04:380706デフォルトの名無しさん
2009/07/06(月) 09:12:44内容もCommonLisp入門とほぼ同じだし。
でも絶版とはいえ某所でpdfでくばってたから結構読んでる人は居るんじゃないかな
0707デフォルトの名無しさん
2009/07/06(月) 12:32:27ありがたがってるかどうか別として、先人への敬意が無い連中って
人として問題ありってことだと思うよ。
0708デフォルトの名無しさん
2009/07/06(月) 12:47:260709デフォルトの名無しさん
2009/07/06(月) 12:48:13MITあたりの人達もびっくりしたという。
0710デフォルトの名無しさん
2009/07/06(月) 12:52:02難しくてめげそう。だれか教えれ。プリーズ
0711デフォルトの名無しさん
2009/07/06(月) 12:56:15(define (fact n) (if (= n 1) 1 (* n (fact (- n 1))))
みたいなのを、factっていう名前を使わずに
無名関数のみで定義できるという意義がある
0712デフォルトの名無しさん
2009/07/06(月) 12:57:21本の内容は今となっては古い部分もあるが基本的な考え方は変わらないだろ。
0713デフォルトの名無しさん
2009/07/06(月) 13:01:27やっぱ普通のスクリプト言語的用途だと従来のハッシュテーブルの方が効率はいいってことでいいんだよね?
0714デフォルトの名無しさん
2009/07/06(月) 13:08:15無名関数のみで定義できるという意義ってナーヌ?
0715デフォルトの名無しさん
2009/07/06(月) 13:13:46無名関数だけで再帰の計算が出来ることがわかれば
λ計算だけで、色々な計算が出来ることが示せるわけ
0716デフォルトの名無しさん
2009/07/06(月) 13:16:46λ計算だけで、色々な計算が出来ることが示せると何が証明できるの?
0717デフォルトの名無しさん
2009/07/06(月) 13:19:42チャーチ・チューリングとかでググってみそ
0718デフォルトの名無しさん
2009/07/06(月) 13:26:54ググッた。
「チャーチ=チューリングのテーゼとは、「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと同一視しようという主張である。
このクラスはチューリング・マシンで実行できるプログラムのクラス、ラムダ記法で定義できる関数のクラスとも一致する。
よって簡単にはテーゼは、計算が可能な関数とは、その計算を実行できるような有限のアルゴリズムが存在するような関数、
よっておおよそコンピュータで実行できる関数と同じだと主張する。」
つまり、「SchemeはYコンビネータがあれば計算可能な再帰関数を有限のステップで計算可能ですYO!」ってことでおk?
0719デフォルトの名無しさん
2009/07/06(月) 13:31:180720デフォルトの名無しさん
2009/07/06(月) 13:38:34普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当
0721デフォルトの名無しさん
2009/07/06(月) 14:22:44おお、そういうことなのか。でもよく考えると「計算できる関数」ってどういう意味かわからん。
とりあえず漏れの使う程度の関数は「計算できる関数」ってことか?
じゃ、無限ループするようなバグがある関数は「計算できない関数」ってクラスなのか?
どういう違いがあるとそうなるんだろう?
0722デフォルトの名無しさん
2009/07/06(月) 14:49:14http://karetta.jp/book-node/gauche-hacks/023107
上のページのように問題をリストの加工と捉えて
(map 何らかの加工 (iota 100 1))
という風にすると、確かに処理が分かりやすいんだけど、
一旦、処理の過程の無駄なリストにメモリが使われますよね。
iota 10000000000 とかリストがでかくなった時を考えると、困ると思うのですが
僕が神経質なだけでしょうか。
0723デフォルトの名無しさん
2009/07/06(月) 15:07:17(g (map f (iota 100 1))のようにすればgの実装次第では
コンパイルの結果、Cでfor (i = 1; i <= 100; ++i) {...}と書いたようなループになって
中間リストは一切作られない…ような最適化をする為の理論とかはあります
common lispのseriesライブラリ等は、この手の中間リスト消去をある程度してくれると聞いてます
0724デフォルトの名無しさん
2009/07/06(月) 15:43:34無駄を省くプログラミング技術はLisp, Schemeでも重要。
ただし、よいプログラマは本当に無駄なところだけ、改良しようとする。
(iota 1 10000000000)のセル消費が他に比べて負担が
大きいプログラムの多くはトイプログラムじゃないですか?
0725デフォルトの名無しさん
2009/07/06(月) 16:10:070726デフォルトの名無しさん
2009/07/06(月) 16:49:50SICPにある遅延を使ったストリームによればいいんじゃない。
今のコンピューターはたっぷりメモリがあるんだし富豪プログラミングでも
いいとは思うけど。
0727デフォルトの名無しさん
2009/07/06(月) 19:09:25「ゲーデルの世界」(海鳴社)にそういった計算可能関数の話があった。
今、読んでいるところ。λ、チューリングマシンとの関係の説明も
あったと思う。とりあえず原始帰納的関数から理解しようとしている。
Schemeが理解の助けになるかもしれない。
0728デフォルトの名無しさん
2009/07/06(月) 20:34:49ありがとうございます。
>>724
>本当に無駄なところだけ
やたらめったら改良するより、労力のコスパが高いところを見つけて改良すれば十分って話ですよね。
>>726
3.5.1にこの話題が出てますね。
ちょっと難しいけど、これがベストな解決策だろうなぁ。
遅延ストリームを使い始めると、何でこれ遅延ストリーム使わないの!!って思うようになりそうだ。
>富豪プログラミングでもいいとは思うけど。
反復だと時間さえかければ解けるものが
リスト渡しだと記憶空間の限界に達したら絶対に解けないというのは
僕には気持ち悪さが残ります。
0729デフォルトの名無しさん
2009/07/06(月) 20:39:240730デフォルトの名無しさん
2009/07/06(月) 20:59:140731デフォルトの名無しさん
2009/07/06(月) 21:38:55チャーチ=チューリングのテーゼによれば、アルゴリズムのある関数は全て計算可能である。
つまり、アルゴリズムを学ぶことが計算可能関数を学ぶことに相当している。
そしてアルゴリズムを学ぶ際にはSchemeが理解の助けになる。
簡単にまとめると、「Yコンビネータがあるチューリング完全な言語ではアルゴリズムのある関数は全て計算可能である」ということになる。
あたりまえの事だけど、数学的に保証してくれてるので安心してプログラミングして計算ができるわけだ。
0732デフォルトの名無しさん
2009/07/06(月) 23:58:44コンビネータの話とλ計算の話はもともと別の話。それが途中で
コンビネータの理論はλ計算の理論に翻訳可能だとわかったので、
同時に語られることが多いというだけ。
コンビネータ理論の歴史は古くて1920年代にSchonfinkelと言う人が始めて
Curry(カリー化のカリー)が発展させた。
0733デフォルトの名無しさん
2009/07/07(火) 00:18:57のは、確か再帰の概念が存在しない言語において再帰と同等の物を導入するため、
だったと思う。
0734デフォルトの名無しさん
2009/07/07(火) 00:50:34返したんだけど。借りられたかな。
0735デフォルトの名無しさん
2009/07/07(火) 01:25:050736デフォルトの名無しさん
2009/07/07(火) 07:39:45詳しいことはドキュメントに書いてあるよ
0737デフォルトの名無しさん
2009/07/07(火) 11:14:49でも、英語の説明しかねーや。 読むのめんどい。
ところで、 sparse って名前だと sparse な何かわからんので、
モジュール名はあんまりよくないと思った。
Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…
0738デフォルトの名無しさん
2009/07/07(火) 11:28:270739デフォルトの名無しさん
2009/07/07(火) 20:07:45> Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…
その発想は鳴かった
0740デフォルトの名無しさん
2009/07/07(火) 23:26:48計算可能な関数には3つの系譜があるようだ。
○ゲーデル〜クリーニ 一般帰納的関数
○チャーチ λ−定義可能な関数
○チューリング チューリングマシンで実行できる関数
ゲーデルの流れだと原始帰納的関数は計算可能関数。
Lispの本の例題に登場するアッカーマン関数は原始帰納的関数ではないのだけど
帰納的関数であり計算可能関数らしい。階乗計算とかフィボナッチ数とかは
原始帰納的関数なんだと思う。詳しい方、間違ってたら補正してください。
0741デフォルトの名無しさん
2009/07/07(火) 23:49:28チューリングマシンと等価なのは部分再帰関数であって、原始再帰関数は
部分再帰関数の部分集合に過ぎない。
0742デフォルトの名無しさん
2009/07/07(火) 23:54:14あんまりわかんないなら,書き込まなくていいと思う.
0743デフォルトの名無しさん
2009/07/08(水) 00:23:080744デフォルトの名無しさん
2009/07/08(水) 00:46:46(define (iter f n)
(if (= n 0)
(f 1)
(f (iter f (- n 1)))))
(define (ack n)
(if (= n 0)
(lambda (m) (+ m 1))
(lambda (m) (iter (ack (- n 1)) m))))
(display ((ack 3) 5))
;; nice curried...
0745デフォルトの名無しさん
2009/07/08(水) 08:32:21740ではないが,
原始帰納関数 ⊆ 部分再帰関数 ⊆ 一般帰納関数
ということになるってこと?
部分再帰関数と一般帰納関数の違いって何?
0746デフォルトの名無しさん
2009/07/08(水) 09:48:290747デフォルトの名無しさん
2009/07/08(水) 09:58:51一般再帰(帰納的)関数の定義は?Kleeneの言うgeneral recursive function
の意味で言っているのなら、部分再帰関数の真部分集合。なぜなら部分再帰関数は
全域関数でもありうるから。
つまり、
原始再帰関数 c 一般再帰関数 c 部分再帰関数
ということ。ちなみに、原始再帰関数も真部分集合だぞ。Ackermann関数がその一例。
つーかおまい情報系出身か?この辺は一般常識だぞ。
門外漢なら計算理論の教科書を読むべき。
0748デフォルトの名無しさん
2009/07/08(水) 10:11:31partial function ⊃ total function
0749デフォルトの名無しさん
2009/07/08(水) 13:01:30関数と部分関数ってのがあるんだね。そこを強調するのに
部分帰納的関数という言い方をするんだそうだ。
一般帰納的関数はゲーデルの本にあった言い方で
クリーニの1936年の論文らしい。邦訳があったら読んでみたい。
0750デフォルトの名無しさん
2009/07/08(水) 15:57:45ゲーデルは共同研究やセミナーで使っただけで、
帰納的関数について長らく公表しなかった。
ゲーデルにとっては公表するほどの成果ではなかったらしい。
0751デフォルトの名無しさん
2009/07/08(水) 16:26:45結局、これら6つの同等性が証明されてチャーチの提唱へ。
0752baka
2009/07/08(水) 17:40:48いま2章のand again, and again...のとこなんですが意味わかめです。
0753デフォルトの名無しさん
2009/07/08(水) 18:17:370754baka
2009/07/08(水) 18:59:32すいみません自己解決しました。
>What is the meaning og the line
>((null? l) #t)
を(#f #t) と勘違いしてました。
先に出てるdefine lat中の文章のことなんですね。もっとしっかりと読まねば。
0755デフォルトの名無しさん
2009/07/08(水) 19:11:450756デフォルトの名無しさん
2009/07/08(水) 21:27:55なぜ関数プログラミングが世の中の主流になれないのですか?
0757デフォルトの名無しさん
2009/07/08(水) 21:29:43情報出身じゃないっす。興味あるだけの人。
そうか一般再帰関数って最小解操作を許す全域関数(total function)の
ことだったのか。
0758デフォルトの名無しさん
2009/07/08(水) 21:33:58世の中の現象を反映させるにはオブジェクト(対象)指向じゃないとだめだろ
世の中にあるのは対象なのだから。
んでもって、対象間の関係が数学である。
オブジェクト指向開発されたシステムの真に理想的な姿というか関係が
”数学”になる、んだろ。
関数だけ持ってきても対象が無い(というか対象とは?と言う話になる)
からどうしようもないとかそういう話じゃない?よく知らんが。
0759デフォルトの名無しさん
2009/07/08(水) 22:17:21アフォ
0760デフォルトの名無しさん
2009/07/08(水) 22:41:17ほんとに知らなすぎでワロタ
0761デフォルトの名無しさん
2009/07/08(水) 22:49:490762デフォルトの名無しさん
2009/07/08(水) 23:00:31に似てる
0763デフォルトの名無しさん
2009/07/09(木) 01:43:380764デフォルトの名無しさん
2009/07/09(木) 01:50:35Lisp/Schemeは面白いぞ
0765デフォルトの名無しさん
2009/07/09(木) 04:37:150766デフォルトの名無しさん
2009/07/09(木) 15:04:18Rubyで書くとこんな感じなんですが…
v = 0.0
(0..10).to_a.each do |x|
(0..10).to_a.each do |y|
v += f(x, y)
end
end
0767デフォルトの名無しさん
2009/07/09(木) 15:23:06(dotimes (i 10)
(dotimes (j 10)
(set! v (f i j))))
0768デフォルトの名無しさん
2009/07/09(木) 15:25:470769デフォルトの名無しさん
2009/07/09(木) 17:02:45(lambda (n i) (+ i (f (car n) (cdr n))))
0
(map (lambda (x)
(map (lambda (y)
(cons x y)
) (iota 11))
) (iota 11))
)
unko
0770デフォルトの名無しさん
2009/07/09(木) 17:13:020771デフォルトの名無しさん
2009/07/09(木) 17:20:17あまりLisp向きじゃないね。
http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/
0772デフォルトの名無しさん
2009/07/09(木) 19:52:27(define (sum1 n m f)
(if (= m 1)
(f n m)
(+ (f n m) (sum1 n (- m 1) f))))
(define (sum n m f)
(if (= n 1)
(sum1 n m f)
(+ (sum1 n m f) (sum (- n 1) m f))))
0773デフォルトの名無しさん
2009/07/09(木) 22:39:10それともアッカーマン関数のように原始帰納的関数ではない帰納的関数なのでしょうか?
(define (tak x y z)
(if (> x y)
(tak (tak (- x 1) y z)
(tak (- y 1) z x)
(tak (- z 1) x y))
y))
0774デフォルトの名無しさん
2009/07/10(金) 09:42:18再帰関数ではあるが、原始再帰関数ではない。
0775デフォルトの名無しさん
2009/07/10(金) 16:26:55ありがとうございました。
区別がわかってきました。
0776デフォルトの名無しさん
2009/07/10(金) 17:24:17どういう種類のものですか?
0777デフォルトの名無しさん
2009/07/10(金) 17:26:590778デフォルトの名無しさん
2009/07/10(金) 18:11:07フェイザー砲の残りエネルギー、ダメージ
0779デフォルトの名無しさん
2009/07/10(金) 20:56:17http://www.xn--t8jcq9c.jp/~take/trek/trek-manj.html
0780デフォルトの名無しさん
2009/07/10(金) 21:51:43あるんだねぇ。GCLで動いたよ。
あっけなくやられてしまった。
0781デフォルトの名無しさん
2009/07/11(土) 16:46:50schemeのcondって継続渡しみたいな構文をサポートしているんだな
(cond ((or #f '(1 2 3)) => cdr))
0782デフォルトの名無しさん
2009/07/11(土) 23:04:55もしわかる人いたら教えてください
(cata n)で、n個の要素の括弧の付け替えからなる
リストを生成する関数を作ろうとしてます
規則がよくわからなくてどうもうまくいきません
例えば
(cata '(1 2))
((1 2))
(cata '(1 2 3))
(((1 2) 3) (1 (2 3)))
(cata '(1 2 3 4))
((1 (2 (3 4))) (1 ((2 3) 4))) ((1 2) (3 4)) ((1 (2 3)) 4) (((1 2) 3) 4))
要素数はカタラン数になるそうです
(define (cataran n)
(define (nck n k)
(cond ((or (= k 0) (= n k)) 1)
(else (+ (nck (- n 1) k)
(nck (- n 1) (- k 1))))))
(/ (nck (+ n n) n) (+ n 1)))
0783デフォルトの名無しさん
2009/07/11(土) 23:18:25もうちょっと厳密に
0784デフォルトの名無しさん
2009/07/11(土) 23:48:43わかりにくくてすみません
言い換えると
一度に2つの要素の足し算しかできない+を使って
n個の要素を全て足すとしたときの
可能な計算の順序の指定の仕方と同じです
1+2+3は(1+2)+3と1+(2+3)の計算法があります
これは(cata '(1 2 3))に対しての
((1 2) 3)
(1 (2 3))
に相当します
0785デフォルトの名無しさん
2009/07/12(日) 00:01:04・葉にしか要素がない (>>784で言えば数)
・分岐には要素がない (>>784で言えば+)
という場合、要素数がn個なら木の種類は? と同じ問題。
・要素の間の何処に分岐点を持ってくるかの数え上げ
・二つの部分木に分けた後の分割統治
を考えればわかるでしょ。
0786デフォルトの名無しさん
2009/07/12(日) 01:16:07n=1からn=4, 5くらいまで自分で書き出してみれば考え方もわかりそうなものだが。
0787デフォルトの名無しさん
2009/07/12(日) 07:18:12出来ました。ありがとうございます
(define (cata l)
(define (flat1 x) (fold append () x))
(define (aux n l)
(map (lambda (x)
(map (lambda (y)
(if (and (pair? x) (null? (cdr x))) (cons (car x) y)
(cons x y)))
(cata (drop l n))))
(cata (take l n))))
(define (aux2 n l)
(if (<= n 0) ()
(append (flat1 (aux n l)) (aux2 (- n 1) l))))
(if (< (length l) 3) (list l)
(aux2 (- (length l) 1) l)))
0788デフォルトの名無しさん
2009/07/12(日) 08:28:51エラーではないの?
0789デフォルトの名無しさん
2009/07/12(日) 09:08:130790デフォルトの名無しさん
2009/07/12(日) 09:11:14(cata '(1 2 3 4)) の実行結果が、最初に書いてあった実行例と違うんですが
(cata '(1 2 3 4))
(((1 2 3) 4) (((1 2) 3) 4) ((1 2) 3 4) (1 (2 3) 4) (1 2 3 4))
0791デフォルトの名無しさん
2009/07/12(日) 10:40:02'()のがいいですね。Gaucheだとエラーにならないので
他の処理系使うまで気づきませんでした
>>790
(1 2 3)を(1 . (2 3))のように見たら
>>784を満たしているので
中途半端ですが満足してしまいました
多分ちょっといじればその出力に出来ると思います
0792デフォルトの名無しさん
2009/07/12(日) 11:01:56自分も考えてみたけどけっこう難しい例題だと思うよ。
根本的に書き直さないといけないんじゃない?悪いけど。
0793デフォルトの名無しさん
2009/07/12(日) 11:21:17>>792さんも考えてるかもしれないのでヒントだけ
ネストしたmapの中身を修正するだけです
0794デフォルトの名無しさん
2009/07/12(日) 11:28:04(define (cata l)
(if (< (length l) 2)
l
(list-ec
(: pos 1 (length l))
(: fst (cata (take l pos)))
(: snd (cata (drop l pos)))
(list fst snd))))
0795785
2009/07/12(日) 11:34:56とアドバイスを入れるかどうか迷った。
結局元の問題と違っちゃうから書かなかったけど。
0796デフォルトの名無しさん
2009/07/12(日) 11:42:04(cond ((null? xs) '())
((null? (cdr xs)) (list (list (car xs))))
((null? (cddr xs)) (list (list (car xs) (cadr xs))))
(#t (let ((a (car xs)) (b (cadr xs)) (rest (cata (cddr xs))))
(define (patr x)
(list a (list b x)))
(define (patl x)
(list (list a b) x))
(append (map patr rest) (map patl rest))))))
うんこーどですが、どうでしょうか
0797796
2009/07/12(日) 11:43:400798デフォルトの名無しさん
2009/07/12(日) 11:50:51これは神コード・・srfi-42かぁ
0799792
2009/07/12(日) 17:53:13やっぱ、難しい。考えて相互再帰のこんなの↓考えた。
fooの部分はそれぞれのリストの直積みたいにすれば
いいと思うのだけど、どうもうまくいかない。
また、考えてみるよ。
(define (cata ls)
(if (<= (length ls) 1)
ls
(cata1 ls 1)))
(define (cata1 ls i)
(if (= i (length ls))
'()
(cons (foo (cata (take ls i))
(cata (drop ls i)))
(cata1 ls (+ i 1)))))
0800792
2009/07/12(日) 19:37:44(define (cata ls)
(if (<= (length ls) 1)
ls
(cata1 ls 1)))
(define (cata1 ls i)
(if (= i (- (length ls) 1))
(product (cata (take ls i))
(cata (drop ls i)))
(append (product (cata (take ls i))
(cata (drop ls i)))
(cata1 ls (+ i 1)))))
(define (product ls1 ls2)
(if (null? ls1)
'()
(append (map (lambda (x) (cons (car ls1) (list x))) ls2)
(product (cdr ls1) ls2))))
> (cata '(1 2 3 4))
((1 (2 (3 4))) (1 ((2 3) 4)) ((1 2) (3 4)) ((1 (2 3)) 4) (((1 2) 3) 4))
>
0801デフォルトの名無しさん
2009/07/12(日) 20:35:35おめでとん
自分の環境では、
3つのコード中>>800が最速でした
参考までに
>>787の修正版も張っておきます
(define (cata l)
(define (flat1 x) (fold append '() x))
(define (single? x) (and (pair? x) (null? (cdr x))))
(define (aux n l)
(map (lambda (x)
(map (lambda (y)
(cons
(if (single? x) (car x) x)
(if (single? y) y (list y))))
(cata (drop l n))))
(cata (take l n))))
(define (aux2 n l)
(if (<= n 0) '()
(append (flat1 (aux n l)) (aux2 (- n 1) l))))
(if (< (length l) 3) (list l)
(aux2 (- (length l) 1) l)))
0802デフォルトの名無しさん
2009/07/13(月) 11:09:33すまん、まじめに反応してみるが、
それは命題論理->一階述語論理の流れでは歴史的事実だが、
そこでの対象指向自体は、関数プログラミングとOOプログラミング
を篩にかけるものではない。FOLレベルのオブジェクトであれば、
関数プログラミングだろうがなんだろうがまあ存在する。
また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
すべてという意味なら、それは正しくない。
0803デフォルトの名無しさん
2009/07/13(月) 15:42:480804デフォルトの名無しさん
2009/07/13(月) 16:29:33map f (map g xs) == map (f . g) xsとか、数式処理みたいなものだと思うんだけど。
0805デフォルトの名無しさん
2009/07/13(月) 17:05:23x = x + 1 みたいな変なのがプログラミングの世界ではまかり通ってる
のだけど、こんなの普通の高校や大学初年で習う数学じゃ扱えないはず。
高度な数学なら扱えるのかな?もっと詳しくお聞きしてみたいです。
0806デフォルトの名無しさん
2009/07/13(月) 17:19:310807デフォルトの名無しさん
2009/07/13(月) 17:38:25http://en.wikipedia.org/wiki/Fixpoint_theorem
0808デフォルトの名無しさん
2009/07/13(月) 18:44:18(define a (list 1 2))
このaを'()にすることは可能ですか?
0809デフォルトの名無しさん
2009/07/13(月) 18:54:26a
gosh> (set-car! a 'quote)
#<undef>
gosh> (set-cdr! a '(()))
#<undef>
gosh> a
'()
0810デフォルトの名無しさん
2009/07/13(月) 19:11:28()にも出来るのでしょうか?
0811デフォルトの名無しさん
2009/07/13(月) 19:22:14それは、より正しくは、Numeric ComputationとSymbolic Computationとの
比較のことだと思うが、そうであるとして、
それと、関数プログラミングとそれ以外(おそらく命令型?)の比較は同型ではない。
NCとSCは、806の言うとおり、そもそも活用できる問題領域に大きな差がある。
>>805
x = x + 1 は算数の意味論で言えば明らかに偽な文だが、数学の世界であってもこれが
有意義になる意味論を定義することはできる。
なので一般性をもってその観点でそれを否定することはできない。
命令型プログラミング言語において、この式または文が、x + 1 が環境への参照であり、
x = は環境への束縛の操作であるという意味論であることを想起させにくいという点で
いえば同意。
0812デフォルトの名無しさん
2009/07/13(月) 20:43:07set-car!,set-cdr!は対象がpairであることまでは破壊しないので、
pairとしての表現を持たない空リストにするのは無理じゃないかな。
0813デフォルトの名無しさん
2009/07/13(月) 20:53:23()
;; unko-
0814デフォルトの名無しさん
2009/07/13(月) 21:42:37> x = x + 1
C/C++ では lvalue と rvalue を区別してフォーマルな意味論を与えられている。
後付けの感は拭えないが、ちゃんと扱える理屈は存在する。
厳密な意味においては数学的とは言えない面はあるけど、
プログラミングに必要な要素ってのを考えると充分な妥協だと思う。
0815デフォルトの名無しさん
2009/07/13(月) 22:25:27Hoare Logicだな
実行文の前でのxの値をX,実行文の後ではYとすると
このプログラムが正常に動作すると仮定すれば
{x=X} x:=x+1 {x=Y}というHoare Tripleが構成できて、代入の規則から
x=X ≡ (x+1=Y) <=> x=X ≡ (x=Y-1) ← X = Y - 1 ≡ Y = X + 1
ってな具合にxに1を加えるっていう動作をする事が証明できたりする
代入を感覚で理解できなくて、
a=10,b=20; a=b; a=?,b=?;っていう問題を解けない人でも、この技法を使えば
計算で解くことができる、素晴しい!!
勿論、こういう単純な例だけでなく分岐やループも扱えるんだけど
「ループで配列内要素の総和を求める」っていうような問題でも
A4レポート用紙2枚に収まるか怪しいような長い証明を
書く羽目になるから、そうバシバシ使っていけるものでもないな
これと比べるとdependently typeとcurry-howard対応の何と実用的なことか…
0816デフォルトの名無しさん
2009/07/13(月) 22:39:18代入と等式を混乱していないか
0817デフォルトの名無しさん
2009/07/13(月) 23:02:30なんで16年前のメールがgoogleグループにあるんだ?
0818デフォルトの名無しさん
2009/07/13(月) 23:09:090819デフォルトの名無しさん
2009/07/13(月) 23:34:065月には圏論をやっとる。
0820デフォルトの名無しさん
2009/07/13(月) 23:42:430821805
2009/07/14(火) 07:36:23知りたかったのはそういうことです。
関数プログラミングは高校で習った帰納的定義、数学的帰納法など
普通の数学の延長にあるように思えました。
一方、命令型の破壊的代入を主体とするものには理屈はあるのだろうか?
と思っていました。実用的なものが関数型だけで書けるとは思ってないのですが。
0822デフォルトの名無しさん
2009/07/14(火) 07:58:33X_1 = X_0 + 1
と考えると面白い。
あるlambda式をlambda droppingすると、それは、
対応するSSA文をoptimal変換したことと同じ。
0823デフォルトの名無しさん
2009/07/14(火) 09:11:10それならホーア論理じゃなくてチューリング機械じゃないの?
0824デフォルトの名無しさん
2009/07/14(火) 11:49:11数学の延長。
・公理的意味論
ホーア論理。長い証明を書く羽目に。
・操作的意味論(食われるだけの存在=ミジンコ)
抽象機械。
0825デフォルトの名無しさん
2009/07/14(火) 16:03:26言いたいことはわからなくもないが、3つとも数学だろ。
0826デフォルトの名無しさん
2009/07/14(火) 16:25:00意味論というより、命令型プログラミングの根拠となる計算モデルを
知りたいということではないのか?
だとすれば、RAMモデルでは破壊的代入が定義されている。
0827デフォルトの名無しさん
2009/07/14(火) 22:34:41Aczelの項書換えシステム。文脈原理。
0828デフォルトの名無しさん
2009/07/14(火) 23:08:19プログラミング言語論に関しては
構文論(syntax)と意味論(semantics)という大きな分類がある
>>824の分類は意味論(semantics)の中での分類
構文論はx=x+1の数学的な意味は考えずに
これら言語の構造自体について扱う
式の「意味」という意味では
代入に=ではなく:=や<-を代入に割り当てている言語もあるわけで
構文と意味は独立なわけ
そもそも数学は代入のような副作用ってあまり扱ってないように思う
俺が知っている中で副作用を扱っているのは
線形論理ぐらいかなぁ
A:「100円持っている」
B:「80円以上持っていればパンが買える」
C:「50円以上持っていればチョコレートが買える」
A→Bは真
A→Cは真
よって「100円持っているならばパンとチョコレートが買える」
0829デフォルトの名無しさん
2009/07/14(火) 23:31:260830デフォルトの名無しさん
2009/07/15(水) 00:14:28線形論理では、上の例でA→B∧Cが成り立たない。
0831デフォルトの名無しさん
2009/07/15(水) 04:13:43805です。自分でも何を知りたいのか混乱していました。
表示的意味論です。
「プログラム意味論」横内寛文著(赤本)は持っているのですが
よく理解できていません。R^5RSに収録されているのは表示的意味論
とのことで理解したいとは思うのですが。
ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
そうですが何故なのかと思っています。
0832デフォルトの名無しさん
2009/07/15(水) 05:12:420833デフォルトの名無しさん
2009/07/15(水) 05:18:25その本読んでみたいんだけど売ってないんだよね。
0834デフォルトの名無しさん
2009/07/15(水) 12:17:28>ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
>そうですが何故なのかと思っています。
表示的意味論が分かり難い上に実装にも証明にもあまり役に立たないから。
しかもR5RSのは矛盾だかあいまいさが証明されてたはず。
0835デフォルトの名無しさん
2009/07/15(水) 17:43:24意味論を理解することが目的なら、もう少し具体的に今どこがわからないのかを
示せばここで解説される可能性はある。
意味論がさっぱりわからん、ということでしかないとすると、本読め、以外にない。
意味論を理解することが目的じゃなくて、何かをするために意味論を理解したい
なら、目的を示した方がいいと思う。それについて助言可能かもしれない。
0836デフォルトの名無しさん
2009/07/15(水) 18:08:29いや、変数、変項、というのは形式的な数学では日常茶飯事だから、
代入というのは数学でもよくある概念じゃないか? それは人間の
頭の中で実施されることが多いが、何かを証明するときに紙に
書いたりもする。
よくある概念であるがゆえ、それ自体が明示的な対象となるのは数学基礎論
にはなるが。
あと、一見代入だからといって副作用を伴うとは限らない。
述語論理のユニフィケーションとかもあるし。
0837デフォルトの名無しさん
2009/07/15(水) 18:17:420838デフォルトの名無しさん
2009/07/15(水) 18:25:32805です。数学がわからないと数学を必要とするコンピューターの理論も
理解できないのではないかと思いしばらくの間、数学の勉強に行っていました。
目的はプログラムと数学との関連の理解です。
本を読みつつ、ご助言を仰ぐこともあるかもしれません。よろしくお願いいたします。
0839デフォルトの名無しさん
2009/07/15(水) 18:49:370840デフォルトの名無しさん
2009/07/15(水) 19:03:00ああ、ここは2chだってことを忘れてた。でも玉石混交だから。
0841デフォルトの名無しさん
2009/07/15(水) 19:18:18それなら、まずは計算可能性理論を勉強してみると良いな。
0842デフォルトの名無しさん
2009/07/15(水) 20:27:45上にでてきたfjとか。2chだとせっかくの話が消えてしまう。
ただ、迷惑にならないようにしたほうがいいだろうけど。
0843デフォルトの名無しさん
2009/07/15(水) 21:04:29>また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
>すべてという意味なら、それは正しくない。
難しい話になるとは思うのですが、現時点では”数学”とは何を指している
言葉だといえるのですか。
マックレーンはアイディアを抽出化して形式化したものが数学だ、形式機能主義だ
と言ってるんですけど、それって、つまり数学的対象とはあくまで形式という事なんですか。
確かに、理解していないバカではある。書いてて確かに思う。
けど、表立っては出ないがこういう話が問題になる分野領域は存在する気がするんだよね。
0844デフォルトの名無しさん
2009/07/15(水) 21:16:33耳学問としょうもないプライドのせいで
無知だとかバカだとか思われたくないからいつまでも演説を続けるんだろうが
いいかげん黙れ
0845デフォルトの名無しさん
2009/07/15(水) 21:19:290846802
2009/07/15(水) 22:41:53おお、すまなかった。誰を指しているかがイマイチわからんが、
この流れをつくった私がいけないのだろう。
>>843
というわけで、すまんが退散しようと思う。844の言うとおり、
結構いろいろな情報が出ているので、参考にして欲しい。
お邪魔しました。
0847デフォルトの名無しさん
2009/07/16(木) 01:17:17混在してわけがわからないことになってるけど、いくつか独立した話しが
並行して進んでいるんだよ。
それに、そんなぶっきらぼうに言っちゃうとみんなびっくりしてしまうよ。
0848デフォルトの名無しさん
2009/07/16(木) 01:43:590849デフォルトの名無しさん
2009/07/16(木) 01:48:23あそこ過疎りすぎだけど、見てる奴はそれなりにいるっぽい。
0850デフォルトの名無しさん
2009/07/16(木) 03:37:46数学とか理論計算機科学の話題だったらプログラム板はやめておいたほうがいいよ。
でたらめな情報が多すぎてろくなことがないから。
0851デフォルトの名無しさん
2009/07/16(木) 04:02:29情報学板に移動するよ。ありがとう。
0852デフォルトの名無しさん
2009/07/16(木) 08:45:470853デフォルトの名無しさん
2009/07/16(木) 13:51:52お察しください
0854デフォルトの名無しさん
2009/07/16(木) 16:05:08ページはあるんだけど、なぜかプレミア価格の出品しかない。(´・ω・`)
0855デフォルトの名無しさん
2009/07/16(木) 22:57:070856デフォルトの名無しさん
2009/07/17(金) 00:11:40On Lispも積読になってるが、LOLも積読しとく事にしよう。
以上チラ裏でした(・∀・)
0857デフォルトの名無しさん
2009/07/17(金) 01:43:00Let Over Lambda 日本語版 サポートページ
http://hop.timedia.co.jp/show/book/Let%20Over%20Lambda
>なお、現状Amazon.co.jpではマーケットプレイス以外で購入できなくなっています。
>他の書店、オンライン書店では普通に購入いただけます。
COMMON LISP JP > Archives > 2009/07/15
http://practical-scheme.net/chaton/common-lisp-jp/a/2009/07/15
>出版元にも聞いてみたんだけど、
>アマゾン内部の問題らしくて理由はわからん、とのことだった
>版元品切れなわけじゃないんだけど
LET OVER LAMBDA Edition1.0 (Amazon)
http://www.amazon.co.jp/dp/4434133632/
>この本は現在お取り扱いできません。
LET OVER LAMBDA Edition1.0 (ジュンク堂書店)
http://www.junkudo.co.jp/detail2.jsp?ID=0110264349
>池袋本店 33冊 在庫有り
0858デフォルトの名無しさん
2009/07/17(金) 01:43:50弱小出版会社だから、東販/日販の初回取り扱いが少なかったんだと思う。
注文すれば、出版社に発注されるでしょう。在庫はしているだろうから。
0859デフォルトの名無しさん
2009/07/17(金) 05:31:140860デフォルトの名無しさん
2009/07/17(金) 05:33:54LOLそのものがそれほど定評だったレビューもなかった。
なにより、極度にマニアックだから。
細く長く生き残ればよいという本だと思う。
0861デフォルトの名無しさん
2009/07/17(金) 05:55:530862デフォルトの名無しさん
2009/07/17(金) 07:36:450863デフォルトの名無しさん
2009/07/17(金) 13:09:170864デフォルトの名無しさん
2009/07/17(金) 13:28:470865デフォルトの名無しさん
2009/07/17(金) 14:49:16コードが短くて解説がうまいから分かった気分になれる
0867デフォルトの名無しさん
2009/07/18(土) 02:23:20ERR5RSは、実際に対応してるのはLarcenyくらい。
提唱者のWilliam D Clingerが開発してるから当然だけど。
Ypsilonは対応予定。Gaucheもそのうち対応する予定。予定は未定。
他は知らない。
ちなみに、ERR5RSで書いてる人はいる。主にLarceny-usersとかに。
というわけで、will先生の活躍に御期待下さい。
0868デフォルトの名無しさん
2009/07/19(日) 07:43:540869デフォルトの名無しさん
2009/07/19(日) 09:23:210870デフォルトの名無しさん
2009/07/19(日) 09:38:450871デフォルトの名無しさん
2009/07/19(日) 11:43:170872デフォルトの名無しさん
2009/07/19(日) 12:36:020873デフォルトの名無しさん
2009/07/19(日) 13:46:390874デフォルトの名無しさん
2009/07/19(日) 13:55:470875デフォルトの名無しさん
2009/07/19(日) 18:40:270876デフォルトの名無しさん
2009/07/19(日) 21:09:040877デフォルトの名無しさん
2009/07/19(日) 22:35:35今見ると「一時的に在庫切れですが、商品が入荷次第配送します。 」だそうですよ
0878デフォルトの名無しさん
2009/07/19(日) 22:48:12class over defとは違うんですみたいな
0879デフォルトの名無しさん
2009/07/20(月) 00:51:520880デフォルトの名無しさん
2009/07/20(月) 21:28:370881デフォルトの名無しさん
2009/07/20(月) 21:59:02common lispの defunが嫌いです。「でふん」っていう語感が。
やっぱしscheme最強でしょ。
0882デフォルトの名無しさん
2009/07/20(月) 22:02:310883デフォルトの名無しさん
2009/07/20(月) 22:05:35デフィネ
0884デフォルトの名無しさん
2009/07/20(月) 23:05:35これだから最近scheme始めたガキは困る
0885デフォルトの名無しさん
2009/07/21(火) 00:39:46`(defun ,(car fun_arg) ,(cdr fun_arg) ,body))
0886デフォルトの名無しさん
2009/07/21(火) 00:58:24common lispの funcallが嫌いです。「ふんこーる」っていう語感が。
やっぱしscheme最強でしょ。
0887デフォルトの名無しさん
2009/07/21(火) 01:08:100888デフォルトの名無しさん
2009/07/21(火) 01:19:290889デフォルトの名無しさん
2009/07/21(火) 03:07:150890デフォルトの名無しさん
2009/07/21(火) 03:17:25語感が嫌ですね。
0891デフォルトの名無しさん
2009/07/21(火) 03:40:41ルルーシュが C.C. の名前を呼ぶ場面があるでしょ。
call/cc を見るたびに連想するんだ
0892デフォルトの名無しさん
2009/07/21(火) 04:01:290893デフォルトの名無しさん
2009/07/21(火) 04:39:340894デフォルトの名無しさん
2009/07/21(火) 04:49:010895デフォルトの名無しさん
2009/07/21(火) 05:01:590896デフォルトの名無しさん
2009/07/21(火) 08:54:450897デフォルトの名無しさん
2009/07/21(火) 09:19:460898デフォルトの名無しさん
2009/07/21(火) 09:25:46なんか色使いが綺麗だったし
話自体はよくわからなかった
0899デフォルトの名無しさん
2009/07/21(火) 09:57:570900デフォルトの名無しさん
2009/07/21(火) 10:46:490901デフォルトの名無しさん
2009/07/21(火) 11:03:050902デフォルトの名無しさん
2009/07/21(火) 13:09:07http://pc12.2ch.net/test/read.cgi/tech/1183396621/
0903デフォルトの名無しさん
2009/07/21(火) 13:42:060904デフォルトの名無しさん
2009/07/21(火) 13:44:060905デフォルトの名無しさん
2009/07/21(火) 16:17:270906デフォルトの名無しさん
2009/07/21(火) 20:47:000907デフォルトの名無しさん
2009/07/21(火) 21:29:44正直書きにくかった
0908デフォルトの名無しさん
2009/07/21(火) 22:30:28ただ読んでるだけなんですが、
みなさんはちゃんと自分で答えを考えながら読んでるんですか?
0909デフォルトの名無しさん
2009/07/21(火) 22:32:49一度全部読んでから、次は自分で考えれば?
たぶん二回目でも100点にはならないと思うから、
二回読むことには意味があると思う。
0910デフォルトの名無しさん
2009/07/22(水) 00:26:36なるほど、ありがとうございます。
いま3章の終りに来ていますがなかなかなか複雑で頭を使います。がんがる。
0911デフォルトの名無しさん
2009/07/22(水) 02:23:55マクロを本当に使いこなせるのはSchemeで修行してきた人達だ。
みたいなことが書いてあった。
0912デフォルトの名無しさん
2009/07/22(水) 04:29:560913デフォルトの名無しさん
2009/07/22(水) 17:44:320914デフォルトの名無しさん
2009/07/22(水) 18:19:14Schemeで修行せずにCommon Lisp入る人の数の方が少ない、
ってのはそれほど間違ってないと思う。
Schemeは取り上げる大学が多いからね。
そんな噛みつくことじゃないのでどうでもいい。
0915デフォルトの名無しさん
2009/07/22(水) 19:25:41コードを書いたんだけどえらい遅い
改良するとしたらどの辺でしょうか?
最初非末尾再帰版で書いて
末尾再帰に書き直したのですが
相互再帰関数は通常最適化されないのですかね?
処理時間が通常の再帰版と同じで
250kbのファイル(5千行中4000行がコメント)
を処理するのに100秒かかります
コード(続く)
0916デフォルトの名無しさん
2009/07/22(水) 19:29:01(define (remcom l)
(define (test str lst)
(if (< (length lst) (string-length str)) #f
(let* ((a (string->list str))
(l (take lst (length a))))
(every eq? a l))))
(define (outcomment l res)
(cond ((null? l) res)
((test "/*" l) (incomment (cddr l) res))
((test "//" l) (inlinecomment (cddr l) res))
((eq? #\' (car l)) (inquote #\' (cdr l) (cons #\' res)))
((eq? #\" (car l)) (inquote #\" (cdr l) (cons #\" res)))
(else (outcomment (cdr l) (cons (car l) res)))))
(define (incomment l res)
(cond ((null? l) res)
((test "*/" l) (outcomment (cddr l) res))
(else (incomment (cdr l) res))))
(define (inquote sep l res)
(cond ((null? l) res)
((eq? sep (car l)) (outcomment (cdr l) (cons sep res)))
(else (inquote sep (cdr l) (cons (car l) res)))))
(define (inlinecomment l res)
(cond ((null? l) res)
((eq? #\newline (car l)) (outcomment (cdr l) res))
(else (inlinecomment (cdr l) res))))
(list->string (reverse (outcomment (string->list l) '()))))
0917デフォルトの名無しさん
2009/07/22(水) 20:18:56test の中の (length lst)
0918デフォルトの名無しさん
2009/07/22(水) 20:21:17(test "/*" l)とかを
(test `,(string->list "/*") l)
にしとくとか。(test側も修正)
それと、100秒掛かるって言われても判らんから
環境と処理系も書いて欲しいな
0919デフォルトの名無しさん
2009/07/22(水) 20:25:49動かしてないから間違ってたらごめん
0920デフォルトの名無しさん
2009/07/22(水) 21:03:42;; Let Over Lambda
(let ((l (string->list str)))
(lambda (lst) ...)))
(define test/* (test "/*"))
(define test*/ (test "*/"))
(define test// (test "//"))
0921デフォルトの名無しさん
2009/07/22(水) 21:19:19長さはmaxで2と固定なので
(if (or (not (pair? lst)) (not (pair? (cdr lst)))) #f ...)
に変更しました
また、string->listの箇所も修正するとさらに早くなりました
(環境はGauche+cygwin)
ありがとうございました!
0922デフォルトの名無しさん
2009/07/22(水) 21:24:16gaucheじゃ定数伝播してくれないのかな
0923デフォルトの名無しさん
2009/07/23(木) 12:29:59あまり自分でマクロを作る場面に出くわさない
on lispのマクロはそのまま使ったりするけど
0924デフォルトの名無しさん
2009/07/23(木) 12:52:12(define-syntax let/ec
(syntax-rules ()
((_ r b ...) (call/cc (lambda (r) b ...)))))
わざとらしい例
(let/ec r (fold (lambda (x y) (if (= x 0) (r 0) (* x y))) 1 '(2 3 0 5)))
0925デフォルトの名無しさん
2009/07/23(木) 13:28:310926デフォルトの名無しさん
2009/07/23(木) 17:44:080927デフォルトの名無しさん
2009/07/23(木) 17:48:000928デフォルトの名無しさん
2009/07/24(金) 00:17:53ttp://www.google.com/search?hl=en&q=recursion
0929デフォルトの名無しさん
2009/07/25(土) 04:03:28例:
aaaa0725a.zip, aaaa0725b.zip, aaaa0725c.zip, aaaa0725d.zip
aaaa0725a/aaaa0725a.wmv
aaaa0725b/aaaa0725b.wmv
aaaa0725c/aaaa0725c.wmv
aaaa0725d/aaaa0725d.wmv
b0725-1.zip, b0725-2.zip, b0725-3.zip, b0725-4.zip
b0725-1/b0725-1.wmv
b0725-2/b0725-2.wmv
b0725-3/b0725-3.wmv
b0725-4/b0725-4.wmv
で,このファイルを末尾がアルファベットの場合は a 数字の場合は 1 にまとめるという作業をLispで行う場合,Lisp脳ではどう考えますか?
aaaa0725a/aaaa0725a.wmv
/aaaa0725b.wmv
/aaaa0725c.wmv
/aaaa0725d.wmv
b0725-1/b0725-1.wmv
/b0725-2.wmv
/b0725-3.wmv
/b0725-4.wmv
教えてくださいエロい人
0930デフォルトの名無しさん
2009/07/25(土) 05:16:08unzip *.zip
for d in *a; mv ${d%a}[bcd]/*.wmv $d
for d in *1; mv ${d%1}[234]/*.wmv $d
rmdir *
試してないけど。
0931デフォルトの名無しさん
2009/07/25(土) 05:18:15訂正
for f in *.zip; unzip $f
0932デフォルトの名無しさん
2009/07/25(土) 09:45:410933デフォルトの名無しさん
2009/07/25(土) 18:25:06Lispと言うからにはS式とマクロがないと駄目です
0934デフォルトの名無しさん
2009/07/25(土) 19:28:090935デフォルトの名無しさん
2009/07/25(土) 19:52:080936デフォルトの名無しさん
2009/07/25(土) 20:07:360937デフォルトの名無しさん
2009/07/25(土) 20:09:270938929
2009/07/25(土) 21:15:230939デフォルトの名無しさん
2009/07/25(土) 21:19:55まぁ、正規表現に親を殺されて憎んでいるから絶対使いたくないとか、
そういう理由があるなら仕方ないかもしれんが。
0940デフォルトの名無しさん
2009/07/25(土) 21:50:57「私は見ました!! 彼はバックトラックに轢き殺されたんです!!」
0941デフォルトの名無しさん
2009/07/25(土) 22:10:150942デフォルトの名無しさん
2009/07/25(土) 22:47:250943デフォルトの名無しさん
2009/07/25(土) 22:54:44やりたければ SRE でも PEG でも使うがいい。
やろうとしてることがいかにもスクリプト言語的なので、
手段だってそれに見当ったものになるだけだろ。
そこに Lisp らしさを求めたところでナンセンスなだけだ。
0944929
2009/07/25(土) 23:30:41> やりたければ SRE でも PEG でも使うがいい。
SRE S-expression Regular Expression
PEG Parsing Expression Grammar
ですね.勉強します.
> やろうとしてることがいかにもスクリプト言語的なので、
はい,あえてこういう問題をLisperはどう考えるか知りたくてきいてみました.
ありがとうございました.
0945デフォルトの名無しさん
2009/07/26(日) 01:33:50というか、そもそもLisp族での回答が出てないじゃないか。
典型的なパターンだと、ディレクトリを探索する手続きに、
ファイルごとの処理を行う手続きを渡すのがLisp的だと思う。
文字列のマッチングとかは、SREとかPEGとかあるけど、
特別Lisp的に、ってのは無いんじゃない?
0946デフォルトの名無しさん
2009/07/26(日) 03:30:51物事を「無駄に難しく」解決したくてLispをやってる人なんて、
そう居ないわけだからさぁ。
0947デフォルトの名無しさん
2009/07/26(日) 05:04:520948デフォルトの名無しさん
2009/07/26(日) 06:05:220949デフォルトの名無しさん
2009/07/26(日) 07:46:32そうだったのか。おれは"物事を「無駄に難しく」解決したくてLispをやってる"と思ってた。
頭の体操のために開発された言語だと思っていたが間違っていたか。、
0950デフォルトの名無しさん
2009/07/26(日) 08:11:56言語としてのLispは、ラムダ算法の表現法として開発されたのであって、頭の体操の為ではないし、
「頭の体操」が主に指向するのは、物事を「無駄に難しく」解決することではなく「美しく」解決することだし、
(その美しさを理解or表現する力を身につけるのが「難しい」ということはあり得るけど)
句点のあとに読点つけるのは、正式な日本語としても、2chによく見られる崩しとしてもおかしいし。
0951デフォルトの名無しさん
2009/07/26(日) 08:38:17↓こんな風に落ち込んでる人の顔文字だと解釈した。
。、
-
0952デフォルトの名無しさん
2009/07/26(日) 09:21:18読点消し忘れたからってそんなに喜ぶなよ。
ラムダ算法の表現法として開発されたということはラムダ算法に無縁の人には
いらない言語ということか納得できる答えだ。頭の体操の定義はおいといてい
らない人には頭の体操以外のなんでもない。
0953デフォルトの名無しさん
2009/07/26(日) 09:38:13リスト処理用の言語として作られたんであって、ラムダは用語以外関係ない。
0954デフォルトの名無しさん
2009/07/26(日) 10:25:17何をムキになって、相手の言葉からできるだけ相手が辿り着いて欲しく無さそうな結論を見出す
中二病っぽいクソゲーを頑張ってるのかわからないけど、
最初に開発した人の目的なんて、その後の人々にはそこまで関係のあるものではないよ。
Unix開発したい人だけがCを使うわけでもなし。
0955デフォルトの名無しさん
2009/07/26(日) 10:27:58板チョコから人命まで、「いらない人には価値を見出すことができない」のは共通でしょ?
0956デフォルトの名無しさん
2009/07/26(日) 10:33:290957デフォルトの名無しさん
2009/07/26(日) 10:35:21リスト処理用のFORTRANライブラリとして歩みだし、
ラムダ算法の表現を模索するうちにプログラミング言語となった。
といってもそれほど間違ってないと思う。
0958デフォルトの名無しさん
2009/07/26(日) 10:44:41でも、そんな長くない文章でかなり凄いこと言いまくってて、つい反応してしまうだろうこれはw
「Xの定義はおいといて、X以外のなんでもない」って物言いも、かなりキてるし。
「頭の体操のために開発された言語」という話を「いらない人には頭の体操」まで一気に前線下げて、
それを鼻息のパワーアップでカバーしようとしてるのも、えらくシュールだし。
なんか変な資質あるぞ、この子w
0959929
2009/07/26(日) 10:55:16Lisperと名乗る人も身近なものにはLispを使わない.
ググったところで教科書の写経をするページしか見つからないわけですね.
0960デフォルトの名無しさん
2009/07/26(日) 11:12:44>>959
Lispに限らず他言語のスレ行っても「ファイラでやれ」「シェルでやれ」って反応が殆んどだと思うが。
あーでもrake使ってエロ画像整理とかはやってる人が稀にいるかもしれん。
正しく道具を使い分けるよう心がけてる人が多いのはどの辺だろうねぇ。
0961デフォルトの名無しさん
2009/07/26(日) 11:14:52正規表現も自前で実装するのが Lisp クオリティ
0962デフォルトの名無しさん
2009/07/26(日) 11:27:59(define a '((0 1 2) (0 2 1) (1 0 2) (1 2 0) (2 0 1) (2 1 0)))
C++のSTLみたく
こんなのを書いてみたんだけど
(define (listpred pred a b)
(cond ((or (null? a) (null? b)) #f)
(else
(if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b))
(listpred pred (cdr a) (cdr b))))))
(sort a (pa$ listpred <))
(sort a (pa$ listpred >))
こういうのって既にあったりします?
それか既存の関数の組み合わせでもっと楽に作れたりしませんかね
0963デフォルトの名無しさん
2009/07/26(日) 11:31:45(define (listpred pred)
(lambda (a b)
(cond ((or (null? a) (null? b)) #f)
(else
(if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b))
((listpred pred) (cdr a) (cdr b)))))))
(sort a (listpred <))
(sort a (listpred >))
0964デフォルトの名無しさん
2009/07/26(日) 11:37:04どういう過程を辿ってそういう結論に至ったのかは知らないけど、
別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。
某ネ実ゲーの武器の性能計算したりとか、もう日常感たっぷり。
ネット見ると結構そういうのあると思うんだけどな。
ニコニコのコメント抜き出したり、WinampをSchemeで操作したりしてる人とかいたよ。
0965929
2009/07/26(日) 11:40:01正規表現を必要としないのが Lisp クオリティと思ってた.
0966デフォルトの名無しさん
2009/07/26(日) 11:51:17正規表現で出来ない問題を出せよ
0967929
2009/07/26(日) 11:58:49> >>959
> どういう過程を辿ってそういう結論に至ったのかは知らないけど、
> 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。
はい,945の方がおっしゃってるように
ディレクトリを探索する手続きに,ファイルごとの処理を行う手続きを渡すというのは理解できるのですが
ここで正規表現って発想ではなくリードマクロを使って...てのを期待してました.
0969デフォルトの名無しさん
2009/07/26(日) 12:04:17Lispのリードマクロを使った回答を知りたい、が正しいんじゃないの?
その目的なら>>930-931で回答が出てるんだから
0970929
2009/07/26(日) 12:10:38知りたいことは,シェルスクリプトなどで簡単にできる問題を lisp脳はどう考えるかです.
0971デフォルトの名無しさん
2009/07/26(日) 12:17:120972デフォルトの名無しさん
2009/07/26(日) 12:17:30(let ((end (last x)))
(cond ((isalpha end) 'place_a)
((isnum end) 'place_1)
(else (error "tukareta")))))
(for-each a ero)
'placeの所はフォルダにおく処理
0973デフォルトの名無しさん
2009/07/26(日) 12:27:17rename.pl(1)使います。
0974デフォルトの名無しさん
2009/07/26(日) 12:32:52俺その>>945。
リーダーマクロについて、何か勘違いをしてる気がする。
根本的に正規表現とは違う層の概念だよ。
独自の記法をS式にマッピングするだけ。
単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
パーザコンビネータとかがそれ。上に出てるPEGとか。
0975デフォルトの名無しさん
2009/07/26(日) 12:56:46あなたには頭の体操は「美しく」解決しなきゃいけないのかそれともそうではないのか。
「美しく」とはどういうことかなどを定義されることをお勧めします。そしてその後レス
してください。
0976929
2009/07/26(日) 14:30:38> リーダーマクロについて、何か勘違いをしてる気がする。
いえ,理解出来ていないというか,誤解しているのでしょう.
だから,相手に対して勘違いをあたえる.
> 根本的に正規表現とは違う層の概念だよ。
> 独自の記法をS式にマッピングするだけ。
ディレクトリ(ファイル)名のリストを作る.そのリストを読み込む際,リードマクロを使って処理をディスパッチする.のかなぁって考えました.
> 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
> パーザコンビネータとかがそれ。上に出てるPEGとか。
文字列処理で正規表現使わない.リードマクロを使う.と言う発想じゃなくPEGを使うって発想するのですね.
0977デフォルトの名無しさん
2009/07/26(日) 14:44:38>いえ,理解出来ていないというか,誤解しているのでしょう.
勘違いして理解してるから誤解だろ。
0978デフォルトの名無しさん
2009/07/26(日) 15:06:02リードマクロは表現をS式にマッピングする機能だって上で出てるだろうが。
書いてある表現のパースは必要なんだよ。
違う層の話が入り混じっててわけわかんなくなってるぞ。
0979デフォルトの名無しさん
2009/07/26(日) 15:20:13素朴な再帰下降パーサーを高階関数とかで改良していこうという方針は正しい気がする
そして、Perlのような言語がそういう方針転換をするよりも
過去の成果物にとらわれないLispのほうが有利だと言えないこともない
0980デフォルトの名無しさん
2009/07/26(日) 19:08:54暇だなおまいら
0981デフォルトの名無しさん
2009/07/26(日) 19:53:390982デフォルトの名無しさん
2009/07/26(日) 20:40:58/ノヽ ヽ、
/ ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ
| ン(○),ン <、(○)<::| |`ヽ、
| `⌒,,ノ(、_, )ヽ⌒´ ::l |::::ヽl
. ヽ ヽ il´トェェェイ`li r ;/ .|:::::i |
/ヽ !l |,r-r-| l! /ヽ |:::::l |
/ |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄
/ | .| | .| ,U(ニ 、)ヽ
/ | .| | .|人(_(ニ、ノノ
0983デフォルトの名無しさん
2009/07/26(日) 20:51:39日本語の扱いをちゃんとしているところがよい。
Ypsilon なんかはやたら高速なのがよい。
まぁ、用途によるんじゃね?
0984デフォルトの名無しさん
2009/07/26(日) 20:58:51newlispは簡単にwindow出せたりして面白いよ
0985デフォルトの名無しさん
2009/07/26(日) 21:30:14正直 ` , ,@ (gensym) だけのほうがスマートだし、変数捕捉されるのも考慮してこそマクロだと思うんだけどなぁ。
schemeの仕様作ってる人は何を心配してるんだろう。ユーザのこと心配してくれてるのかな。
(PGが人が使う用の為に作っちゃダメっていってたよ。)
0986デフォルトの名無しさん
2009/07/26(日) 21:30:360987デフォルトの名無しさん
2009/07/26(日) 21:35:590988デフォルトの名無しさん
2009/07/26(日) 21:54:42シンボルやコンスが無い言語でもマクロが書けるようになるかもしれない
0989デフォルトの名無しさん
2009/07/26(日) 22:11:13モジュール化が絡んでくるとそう単純な話ではない。
scheme と CL ではスコープのルールも若干違う。
健全性に固執しすぎなのは確かかもしれないけど、
Scheme 的な一貫性のためには必要だと思うよ。
0990デフォルトの名無しさん
2009/07/26(日) 22:21:20scheme では同じ名前のシンボルは常に同じシンボルなので、
gensym では名前の衝突を本質的には回避できない。
0991985
2009/07/26(日) 22:28:07ことはそう単純じゃないのね。もうちょっと精進するよ。馬鹿みたいなこといってごめんね。
0992デフォルトの名無しさん
2009/07/26(日) 23:09:19シンプルな古典的マクロの上に保健的マクロを構築するアプローチのほうが合っていると思う
R5RSのなかでもsyntax-rulesは浮いているように感じる
0993デフォルトの名無しさん
2009/07/26(日) 23:46:52挫折した奴がここにおわす
0994デフォルトの名無しさん
2009/07/26(日) 23:52:29これをまじめにやろうとすると、言語の構文をほぼ全て上書きして
意味論を追加するってこと
LISPだから可能なんだけど
おれは挫折した
0995デフォルトの名無しさん
2009/07/27(月) 01:06:270996デフォルトの名無しさん
2009/07/27(月) 05:59:54Alex Shinn さんの chibi-scheme がそういうような方向性かな
Syntactic Closure の上に Explicit Renaming と Syntax Rules を実装してる
Syntax Rules はまだ動いてないところもあった気がするが
ttp://synthcode.com/wiki/chibi-scheme
0997デフォルトの名無しさん
2009/07/27(月) 08:13:36これからはF#の時代だからwww
0998デフォルトの名無しさん
2009/07/27(月) 08:23:370999デフォルトの名無しさん
2009/07/27(月) 08:32:57使ったことないからよく知らんけど
1000デフォルトの名無しさん
2009/07/27(月) 09:25:2610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。