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

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

Lisp Scheme Part26

1 :デフォルトの名無しさん:2009/04/24(金) 19:12:39
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

■過去スレ
 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)

2 :デフォルトの名無しさん: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

3 :デフォルトの名無しさん:2009/04/24(金) 19:15:21
■Common Lispに関する情報源
□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

4 :デフォルトの名無しさん:2009/04/24(金) 19:16:06
■Schemeに関する情報源(2)
□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/

5 :デフォルトの名無しさん:2009/04/24(金) 19:16:50
■Common Lisp関連の書籍
□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/ (日本語版非公式サポートページ)

6 :デフォルトの名無しさん:2009/04/24(金) 19:17:50
■Scheme関連の書籍
□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 (サポートページ)

7 :デフォルトの名無しさん:2009/04/24(金) 19:39:39
■Common Lispの実装
□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

8 :デフォルトの名無しさん:2009/04/24(金) 19:41:04
■Schemeの実装(1)
□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

9 :デフォルトの名無しさん:2009/04/24(金) 19:42:17
■Schemeの実装(2)
□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/

10 :デフォルトの名無しさん:2009/04/24(金) 19:43:13
■その他のLisp実装
□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/

11 :デフォルトの名無しさん: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/

12 :デフォルトの名無しさん:2009/04/24(金) 19:59:27
■2ch関連
□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/

13 :デフォルトの名無しさん:2009/04/24(金) 20:32:17
1おつ

>>11
> □Shibuya.lisp
>  東京地区、特に渋谷周辺半径2万キロのLisp系プログラマによる非営利団体。
>  第3回テクニカルトークは2009年7月4日開催予定です。
>  ttp://shibuya.lisp-users.org/

これ、参加しようかな
場所は、東京だよね?
料金は無料なんだね
>2/1日 21:00時より募集を開始した60名枠の観覧募集ですが、予想以上に速いペースで約2時間後の23時前に定員に達しました!
の状況をみると、財務処理とか大変になるかもだけど、資料代と称して1,000円ぐらいお金をとって欲しい感じだな


14 :デフォルトの名無しさん:2009/04/24(金) 20:36:36
>>1('-')乙 これは1乙じゃなくていちもつなんだからね!

15 :デフォルトの名無しさん:2009/04/24(金) 22:34:11
>>1

16 :デフォルトの名無しさん:2009/04/24(金) 23:42:33
(乙 ( >>1))

17 :デフォルトの名無しさん:2009/04/24(金) 23:45:02
CL-USER> (eval >>1)

CL-USER>

18 :デフォルトの名無しさん:2009/04/24(金) 23:52:59
>>1

19 :デフォルトの名無しさん:2009/04/25(土) 01:11:27
>>1乙……っ!!!

20 :デフォルトの名無しさん:2009/04/25(土) 01:25:36
>>1
これはポニーテールがうんたらかんたら

21 :デフォルトの名無しさん:2009/04/25(土) 11:23:43
前スレのつづき
落ちそうなのでこっちで(もう話も終わると思うけど)

ここのスレはLispとSchemeの合同スレであり、派生したいヤツは勝手に派生してくれって話なのかな?

22 :デフォルトの名無しさん:2009/04/25(土) 12:59:32
もてたいためのリスプハッカー
あなた動機が不純なんだわ
フムフムヌクヌクアプアア
いつも手にして歩いてる
R6にはケチつけて
スーパーハカーを気取っているけど
何かが違うわ
かっこ かっこ かっこ かっこ
かっこ かっこ かっこばかり 先ばしり
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして schemeあなたの物じゃない


23 :デフォルトの名無しさん:2009/04/25(土) 13:00:30
人目気にするリスプハッカー
言語仕様をANSIにしてる
再帰するのがエクスタシー
呼べばnilまで帰らない
もしも誰かに聞かれたら
SICPはとうに読み終えました いい本でした
かっこ かっこ かっこ かっこ
かっこ かっこ かっこつけて 泣きたいわ
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして lispはcommon一つじゃない


24 :デフォルトの名無しさん:2009/04/25(土) 13:09:38
ロックンロールウィドウって解説つけなくてもわかるオッサンばかりのスレ

25 :デフォルトの名無しさん:2009/04/25(土) 17:00:45
おっさんですがわかりません><

26 :デフォルトの名無しさん:2009/04/25(土) 23:14:16
>>25

つttp://www.youtube.com/watch?v=saIIZhhxsZo

27 :デフォルトの名無しさん:2009/04/25(土) 23:22:45
>>26
このころ、二十歳なんだって
すごいね

copperpony (7 か月前) 表示 非表示 +12 スパムとしてマーク 返信
20歳でこの凄みは21世紀の日本でも完全に大スターになれる。
こんなに迫力があるロック歌手が今いない
舞台映えするし美人で宝塚でも大スターになれそう

28 :デフォルトの名無しさん:2009/04/25(土) 23:56:25
ひとつ賢くなった

29 :デフォルトの名無しさん:2009/04/26(日) 08:25:46
山口百恵だったんだ、「カッコ、カッコ…」の所だけは聞いたことがあった。

30 :デフォルトの名無しさん:2009/04/26(日) 09:37:39
アン・ルイスの曲だから、本人も歌ってるよ。

31 :デフォルトの名無しさん:2009/04/27(月) 20:34:33
6変数関数の3,5番目の変数だけ束縛したカリー化がしたい
metabangに入ってるかと思ったらなかった

違うテクニックを使うのが普通なんでしょうか

32 :デフォルトの名無しさん:2009/04/27(月) 20:54:14
cut?

33 :デフォルトの名無しさん:2009/04/27(月) 21:39:39
Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人が初めてプログラミング言語を習うとして
Schemeは挫折せずにこなせるレベルだよね?

初学言語がC, Pythonと比較するとどうなんだろうなあ。
学習時間(20時間、200時間、2000時間、20000時間)にみるプログラミング自体のおもしろさの度合いの推移
懼サ20時間以降は他の言語に浮気してもかまわない。むしろ推奨する。また浮気言語も含めた学習時間とする。

だから、何?と聞かれても特にないけど

34 :デフォルトの名無しさん:2009/04/27(月) 21:41:32
うほっ、文字化けした

Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人が初めてプログラミング言語を習うとして
Schemeは挫折せずにこなせるレベルだよね?

初学言語がC, Pythonと比較するとどうなんだろうなあ。
学習時間(20時間、200時間、2000時間、20000時間)にみるプログラミング自体のおもしろさの度合いの推移
・20時間以降は他の言語に浮気してもかまわない。むしろ推奨する。また浮気言語も含めた学習時間とする。

だから、何?と聞かれても特にないけど


35 :デフォルトの名無しさん:2009/04/27(月) 22:12:24
>>31 let f a b c d e f = b f a c d eみたいなのを一瞬考えたが
Lispにカリー化はないので、マクロで引数の順序かえたらいい

>>34
最初につまづくのは再帰によるループと、かっこの扱い(car,cdr,cons,list関連)
それがクリア出来そうならschemeが一番おすすめ。覚えることも他言語より少ない
ただ、これらは結構序盤にある山なのでそこが問題

個人的な経験からいえば
簡単に結果がわかる&ループがある言語から
入った方が初心者には優しいんじゃ無かろうか
その中だとCとPythonだが、Cはすすめにくい

Cはポインタ関連のわかりにくさと
副作用が多いプログラミングスタイルなので
例えばクイックソートなんかのアルゴリズム系は
関数型言語に比べてかなり理解しにくい
ただ、情報量は多い

PythonはLLなので
初心者にもさわりやすいとは思う
あと、わりとlispに近いと聞く
ただ、情報量はまだそれほど多くないかな?
しかし、Google効果で広まりつつあるようには思う

慣れてしまえば、プログラミング自体の楽しさは
Cに比べれば圧倒的にschemeかな
あと、世の中にあるコードは良質なものが多いし
いいプログラミングスタイルが身につく(ハッカーが多いので)
pythonはやったことないんでわからん

36 :デフォルトの名無しさん:2009/04/27(月) 22:16:46
>ただ、情報量はまだそれほど多くないかな?
そうでもなさそうだった

俺のおすすめルートは
 やる気ある -> scheme
 そうでない -> python
 または python -> scheme


37 :デフォルトの名無しさん:2009/04/27(月) 22:18:01
宝石が好き
 -> 金、銀、perl

38 :デフォルトの名無しさん:2009/04/27(月) 22:18:48
Ruby

39 :デフォルトの名無しさん:2009/04/27(月) 22:20:42
>>37
ブルーダイヤで洗濯しまくる

40 :デフォルトの名無しさん:2009/04/27(月) 22:26:30
perlは好きだけど
初心者にすすめるならrubyかな
perlは変なスタイルのプログラムが非常に多いから。
同じことがrubyにも言えるかもしれないが
perlよりはマシだろう、多分

41 :デフォルトの名無しさん:2009/04/27(月) 22:31:49
>>39
オサーン乙

42 :デフォルトの名無しさん:2009/04/27(月) 22:39:28
>>35

「初心者」というのは才能に関しても、興味の強さに関しても、
もちろんその他いろいろな特性(我慢強さとかね)に関しても
非常に広いスペクトルを持った集合だと思う。

なので、大雑把に「初心者」でくくるのでなく、もっと細かく
カテゴリー分けしないと、初学に最適な言語をアサインするのは難しいと思う。
最初のアサインに失敗するとプログラミング自体が嫌いになってしまうしね。

>>34

>Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人

同上。


43 :デフォルトの名無しさん:2009/04/27(月) 22:41:52
最近は入門言語がオブジェクト指向なんだよね。
みんな偉いなあ。

おいら、最初にオブジェクト指向(といっても C++ ですがw)を知ったとき、
大喜びしたのはいいけど、どうでもいいことでもクラス設計からはじめるから、
とても効率悪かったなぁ。
(その後、テンプレートを知り、以下同文。)

最近の入門者はそういう罠(?)にははまらないんだろうか。

はじめっからオブジェクト指向だと、大喜びも何もないだろうから、
そんなくだらんことはしないのかな。


44 :デフォルトの名無しさん:2009/04/27(月) 22:46:08
>はじめっからオブジェクト指向
便利さがあって当たり前の世代はまだ出会ったこととが無いけど、
たぶんニュータイプでしょう

45 :デフォルトの名無しさん:2009/04/27(月) 22:59:29
そういう意味では、アセンブラ何それ?おいしいの?って世代は多いでしょ

46 :デフォルトの名無しさん:2009/04/27(月) 23:02:32
話をlispっぽく戻すと(?)
pythonの__hoge__系関数はCLOSの総称関数的だよね。


47 :デフォルトの名無しさん:2009/04/27(月) 23:18:28
perl、 rubyは大体同じようなもの。
javaもまあ、大差ない。Cほど簡単ではないが。
しかしPythonはちょっと難しい。明らかにワンランク上。
Schemeとなったら、さらにもうワンランク上の難しさだね。



読み方が。

48 :デフォルトの名無しさん:2009/04/27(月) 23:27:28
Lisp/Schemeって日本で一番流行ったのっていつ?
人工知能で注目された時代?
それともずっとマイナー?

49 :デフォルトの名無しさん:2009/04/27(月) 23:27:41
単純なメモ帳ではプログラミングの開始もできないのはごくわずかでもない初心者に敬遠させてるよね

50 :デフォルトの名無しさん:2009/04/27(月) 23:30:33
確かに。
最初から gauche を正しく読めた人は少ないかも知れん。

51 :デフォルトの名無しさん:2009/04/27(月) 23:31:37
>>39のネタがわかった時点で>>41もおっさんだw

52 :デフォルトの名無しさん:2009/04/27(月) 23:45:16
>>35
> 最初につまづくのは再帰によるループと、かっこの扱い(car,cdr,cons,list関連)
> それがクリア出来そうならschemeが一番おすすめ。覚えることも他言語より少ない
> ただ、これらは結構序盤にある山なのでそこが問題
いわゆるループはC的(手続き型言語的)考えた方なのかなと個人的に思うんだけどなあ
初学言語がSchemeだったら違う見え方になるのかなと思うし

> PythonはLLなので
> 初心者にもさわりやすいとは思う
> あと、わりとlispに近いと聞く
> ただ、情報量はまだそれほど多くないかな?
Webドキュメントはみやすいと思う
訳書は少ないかな
最近、入門書のクズ本が増えてきたみたいだけど
まあ、メジャーや注目度の証なのかなもしれないけど

vimとかの選択肢も多少あるけど、半強制的にemacsを触ることになるのがすごく良い気もするんだけどなあ
どうなんだろう

学習コストが高いからこそ最初がいいと思うんだよなあ
"難しいんではなく学習コストがある"というのは明確に伝えるべきだけど

コンピュータに関心のある10代の子は、どのくらい忍耐力がないんだろうなあ

53 :デフォルトの名無しさん:2009/04/27(月) 23:49:32
>>49
初学者だとしても単純なメモ帳でプログラミングする感覚はよくわからないけど

ダウンロードして、ダブルクリックするだけですぐ使える環境は、さすがにあるんじゃないの?
開発環境として主流でないだけで

54 :デフォルトの名無しさん:2009/04/27(月) 23:51:21
>>49
メモ帳でも書けるじゃない。Emacsやviを使うともっと楽に書けるってだけで。
他の言語に比べて、メモ帳で書きづらいのは確かだけどさ。

でも、Emacsやviを使ってると、括弧のお陰で移動が凄い楽だから、
トントンってところな気がする。

55 :デフォルトの名無しさん:2009/04/27(月) 23:57:43
ループは言う程簡単じゃない
小学生のときN88のFor Nextを理解するのに恐しいぐらい時間かけた気がする
さらに正確に書こうと思ったらホーア論理の初歩を知っておかないと
慣れるまでまともに動作するコードが書けないから

56 :デフォルトの名無しさん:2009/04/28(火) 00:00:40
>>55

恐ろしいくらいベーマガのソースコードを打ち込んだんですね。
わかります。


57 :デフォルトの名無しさん:2009/04/28(火) 00:03:08
男ならEdwin

58 :デフォルトの名無しさん:2009/04/28(火) 00:26:20
>>55
ネットない時代だと悲惨だよね
なんの言語でもいいけど、入門書なんてなかった気がする
現行PCが30万〜40万する時代だからなあ

東京の人は別なのかもしれないが


ダウンサイジングってあるけど、これが超緩やかで2109年ぐらいが今のPC・ソフトの価格だったらどうだったんだろうなあ
お金儲けに走りすぎて、その副作用がすご過ぎる気がするなあ

大量生産・大量消費は人を幸せにしてきたか?

59 :デフォルトの名無しさん:2009/04/28(火) 00:28:21
>>55
俺はBASIC→機械語(Z80)→PASCALつまみ食い→LISP…てな順にやってきたけど
FOR NEXTやIF THEN (GOTO)でループには苦労しなかったな。
PASCALで初めて再帰を知ったときはちょっと感動した。
当時のBASICじゃローカル変数なんて当然無いから配列で擬似的にスタックを作ったりしたけど
GOSUBやFOR NEXTのネスティングは16重までだったから再帰なんて無謀だったなw

60 :デフォルトの名無しさん:2009/04/28(火) 00:44:44
C
 int 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系という新しい非互換のバージョンらしく
新しいバージョンの情報は検索であまりヒットしなくて苦労した
初心者はこっちには手を出さない方が良さそうに思う

61 :デフォルトの名無しさん:2009/04/28(火) 01:03:47
Haskell
 replicateM_ 10 $ print "hello"

しかしモナドとかあるから論外ですね

62 :デフォルトの名無しさん:2009/04/28(火) 01:12:08
Ocaml
for i=0 to 9 do (print_string "hello";) done;;
でもOcamlも初心者向きじゃないかな

63 :デフォルトの名無しさん:2009/04/28(火) 01:42:59
JavaScript
for(var i = 0; i < 10; i++){alert("hello");}
ほとんどCと同じだな。
文法はシンプルだしブラウザ上で動くから入門向けにはいいんじゃないかな
this周りに若干癖があるけど

64 :デフォルトの名無しさん:2009/04/28(火) 01:52:14
Ruby
10.times { puts "hello" }

65 :デフォルトの名無しさん:2009/04/28(火) 02:00:05
こうして見比べるとやっぱり Ruby は入門用としてはよろしくないような
気がしてきた。

Ruby で入門した後、他の言語を勉強する時に、多分、苦労するぞ。

プログラミング言語は一個できたらそれで十分、
というのだったら、Ruby でも良いとは思うんだけど。

(もっとも、そういう人が Ruby を使えるようになるかについては、
これまた、疑問なんだけど。)

66 :デフォルトの名無しさん:2009/04/28(火) 02:13:44
perl
print "hello" for (0..9);

67 :デフォルトの名無しさん:2009/04/28(火) 02:17:50
>>64
>10.times
なにそれ

コンピュータの常識や他の言語を意識して、言語仕様を決めるべきだと思うけど
その言語の性格上、現在の記述法が妥当であって統一感があればいいと思うけどなあ

Perlが流行ったのって正規表現が強力だったから?
広告宣伝に莫大なお金が投じられたわけでもないんだよね?

68 :デフォルトの名無しさん:2009/04/28(火) 02:27:49
Perl
for ($i=0;$i<10);$i++) {print "hello";}
foreach $i (0..9) {print "hello";}
とか

for i in Array.new(10)
print"hello"
end
Rubyならまぁこれでもいいけど統一感がないよな
初心者にはまったくお勧めできない

69 :デフォルトの名無しさん:2009/04/28(火) 02:33:33
Ruby
1.upto(10) {puts "hello"}
10.downto(1) {puts "hello"}

まぁ,いろいろあるね.



70 :デフォルトの名無しさん:2009/04/28(火) 02:36:16
>>69
どれが標準的な書き方なの?

71 :デフォルトの名無しさん:2009/04/28(火) 02:39:17
ちなみに

10.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 あんまり使わないし.

72 :デフォルトの名無しさん:2009/04/28(火) 02:40:15
む、いかんいかん。乗り遅れる所じゃった。
Smalltalk
1 to:10 do:[ :i | Transcript show:'hello']


73 :デフォルトの名無しさん:2009/04/28(火) 02:47:04
そうそう,Ruby だとこれもあるね.

1.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
とすれば良い.)





74 :デフォルトの名無しさん:2009/04/28(火) 02:48:35
pforthで
10 0 do ." hello" loop

factorで
10 [ "hello" print ] each

75 :デフォルトの名無しさん:2009/04/28(火) 02:52:49
Scheme
(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"))
どれが標準的?

76 :デフォルトの名無しさん:2009/04/28(火) 03:00:16
もっとHENTAIにいこうZE
((lambda (f) (f f 10)) (lambda (g n) (cond ((< 0 n) (print "hello") (g g (- n 1))))))

77 :デフォルトの名無しさん:2009/04/28(火) 03:04:19
何故,みんな「素直」に do を使わないんだw

(do ((i 0 (+ i 1))) ((= i 10)) (print "hello"))

78 :デフォルトの名無しさん:2009/04/28(火) 03:07:00
そろそろAPLがやってくる予感・・・!

79 :デフォルトの名無しさん:2009/04/28(火) 03:09:31
CommonLispで
(loop repeat 10 do (print "hello"))
>>75
たぶんGauche使ってるんだろうが標準のschemeにはdotimesはないぞ
CommonLispからの移植な
あとprintじゃなくてdisplayな

80 :デフォルトの名無しさん:2009/04/28(火) 04:22:55
>>66 >>68
ところでPerlなら
print "hello" x 10;
でいいのだが?

81 :デフォルトの名無しさん:2009/04/28(火) 04:27:07
M-x run-schemeでC-x C-eとするけど
M-x run-gosh,M-x run-guileとソースの画面も合わせて、3画面にして
goshでの評価、guileでの評価を各自のコマンドと
一気にgoshでもguileでも評価する設定できないのかな
guileが不人気みたいだから、こういうのはないか

Common Lispでもclispとsbclとできると個人的には便利なんだけどなあ

82 :デフォルトの名無しさん:2009/04/28(火) 12:04:29
(iter:iter (for i from 1 to 3) do (print "hello"))


83 :デフォルトの名無しさん:2009/04/28(火) 12:16:37
doなんか使うより
(for-each (lambda (x) (print "hello")) (iota 10 0))

>>80
じゃあrubyなら
puts"hello"*10
だな

84 :デフォルトの名無しさん:2009/04/28(火) 18:07:57
Scheme は、仕様自体はコンパクトでも取り扱っている概念や方法論がハイレベル
Lisp 系なら Emacs Lisp が初心者向きかと。Emacs も理解できイベントループや簡単な
ウィンドウ取り扱いなども学べて一石二鳥にも三鳥にもなるし

85 :デフォルトの名無しさん:2009/04/28(火) 18:27:26
Emacsのウィンドウやバッファの取り扱いはEmacsにしか通用しないだろ...
ま、Emacs自体がREPLになってる上にコードのほとんどがElispでのぞきみ放題
なのはいい勉強になると思うけんど。
英語が苦にならないならcommon lispの方がライブラリが整っていて、自前の
プログラムを1から書く分にはschemeよりいいと思うんだが。なんだか
ruby vs pythonの構図と似てるなあ。

86 :デフォルトの名無しさん:2009/04/28(火) 19:36:47
"一切ほかの言語に触りたくなく、(Scheme/Lispの中から)スクリプト言語をひとつ選ぶならどれがいい?"という質問があるけど、愚問だよね
初恋の子と付き合って、純愛を一生貫きたいみたいなもんで
3年目に浮気するからなあ
>>84
> Scheme は、仕様自体はコンパクトでも取り扱っている概念や方法論がハイレベル
言葉にするとSchemeはそういう存在のところもありそうだね
付け加えるならSchemeも初学者向きだと思う

ここのスレで実用言語としてのGaucheとLispがどういう関係なのか、興味があるところだけど
ここのスレで実用言語としてのGauche使いって多そうだよね
>>85
> ruby vs pythonの構図と似てるなあ。
触らず嫌いだけどrubyは、ないなあ
なぜか頭から却下してしまう
手続き型言語only使いからするとLisp/Schemeがそういう存在なんだろうけど

自分がググった限りだと触るならPythonがいいなあ

Scheme/Lispは親戚関係みたいに血がつながっているイメージ
なんか違う気がする
まあ、血縁関係にお金と権力が絡むと殺し合いが始まるんだけどね
日本の歴史のように

血の例はよくないね

87 :デフォルトの名無しさん:2009/04/28(火) 19:45:21
話が飛躍しすぎ

88 :デフォルトの名無しさん:2009/04/28(火) 20:05:29
2点だな

89 :デフォルトの名無しさん:2009/04/28(火) 20:43:09
>>86
日本の歴史で、
血縁関係にお金と権力が絡むと殺し合いが始まる事例を
複数あげてください。

90 :デフォルトの名無しさん:2009/04/28(火) 20:57:25
何ら具体性がない

91 :デフォルトの名無しさん:2009/04/28(火) 21:23:28
>>89
同じ年代だけど織田さんのところと斉藤さんのところがそうだよ

92 :デフォルトの名無しさん:2009/04/28(火) 21:41:11
俺のダチのツネとトモとか

93 :デフォルトの名無しさん:2009/04/28(火) 22:05:14
>>91
誰だよそれ

94 :デフォルトの名無しさん:2009/04/28(火) 22:11:29
>>91
斎藤さんとこは息子とバパで既に仲悪かったじゃん。
確かに織田さんとこに血縁者はいるけど、実質、斎藤さんとこの親子喧嘩に
義理の息子が割って入ったってかんじだから、
血縁者同士って括りでは斎藤さんとこだけの話だよね。

95 :デフォルトの名無しさん:2009/04/28(火) 22:16:18
マムシとウツケの話?
それはそうとして「バパ」って何?

96 :デフォルトの名無しさん:2009/04/28(火) 22:48:04
>>95
携帯からなんで…

97 :デフォルトの名無しさん:2009/04/28(火) 23:34:16
「初学者」って受験参考書の前書きによく使われてる言葉だよな。
あと、大学入りたての鼻息荒い学生がよく使う。

98 :デフォルトの名無しさん:2009/04/29(水) 00:07:42
>>96
それはゴメンなさい
自分の知らない言葉だと思ってググったりしてしまったw

99 :デフォルトの名無しさん:2009/04/29(水) 00:23:13
>>97
じゃあ、なんて言うんだ?

100 :デフォルトの名無しさん:2009/04/29(水) 00:27:53
『初心者』じゃない?微妙にニュアンス違うかもだけど

101 :デフォルトの名無しさん:2009/04/29(水) 00:29:12
普通は「初心者」だろうな.「初学者」なんて一般社会では聞いたことがない.

102 :デフォルトの名無しさん:2009/04/29(水) 00:29:40
>>97
言語学関の板での初心者と同義語

103 :デフォルトの名無しさん:2009/04/29(水) 00:34:42
横駄レス
俺はプログラマについて「初心者」って言うのを
リアルでは一度も聞いたことないわ。
学術の世界って、法学とか文学でもそうでしょ。
Windows使いHOWTOを「初学者」っていうと
逆に固すぎる感じがするわ。


104 :デフォルトの名無しさん:2009/04/29(水) 00:39:03
こういう場合は「人それぞれ」で話を終わらせるか
特定の個人に限定して話を続けるとよい

105 :デフォルトの名無しさん:2009/04/29(水) 00:50:25
古い地球人よ

106 :デフォルトの名無しさん:2009/04/29(水) 00:52:15
アクターじゃない!
アクターじゃない!
継続なのさ〜

107 :デフォルトの名無しさん:2009/04/29(水) 01:05:01
恥丘の男に飽きたところよ

108 :デフォルトの名無しさん:2009/04/29(水) 01:39:10
継続ってノンエンプリティブなOSでマルチタスクやってたころを思い出すかな。

109 :デフォルトの名無しさん:2009/04/29(水) 01:51:13
「少なくとも入門は済ませた俺は"初学者"ではない。むふふ」
という中二病心がうずくのさ。

110 :デフォルトの名無しさん:2009/04/29(水) 02:00:07
くっ!俺の右腕のアセンブラが火を噴く前に、あんた逃げな!!

111 :デフォルトの名無しさん:2009/04/29(水) 02:00:35
>>34があれから現れていない件

112 :デフォルトの名無しさん:2009/04/29(水) 02:17:38
お前も実は>>34だったんだよ・・・
みんなが>>34で、>>34がみんなだったんだ!うわーい



ま、Smalltalkerなおでは違うけども

113 :デフォルトの名無しさん:2009/04/29(水) 03:50:39
>>52
忍耐を要求する時点で終わってる

プログラミングは楽しくなきゃ

114 :デフォルトの名無しさん:2009/04/29(水) 07:27:10
>>113
子供にとって楽しさってなんだろうなあ
サッカーだったら活躍したらうれしい、もっとうまくなりたいとかかな
でも、ピアノとか、お習字とか、武道の習いごとは、違うよね

個人的には子供のころは馬鹿みたいに時間があって、それを退屈しないで
過ごせればなんでもいい気がするんだけどなあ

退屈しない = 楽しさかな?

115 :デフォルトの名無しさん:2009/04/29(水) 08:46:08
LisperってHHKとか使ってるの?

116 :デフォルトの名無しさん:2009/04/29(水) 10:00:18
キーボードは個人の趣味

117 :デフォルトの名無しさん:2009/04/29(水) 10:13:42
和田先生だし、Lispむけなのかな?HHKだと()打ちやすいのかなぁ?
なんて考えたのですが。

118 :デフォルトの名無しさん:2009/04/29(水) 10:21:07
>>110
そういえばcomp.lang.schemeで「継続をCで実装するにはどうするんですか〜?」って質問に"real man uses assembler."の一言でスレをストップした漢がいたなあ。
あれは、おまえの右腕だったのか@@・・・(w


119 :デフォルトの名無しさん:2009/04/29(水) 10:21:47
()は、日本語配列の方が打ちやすいな〜とか思う。

US: 9→( , 0→)
JP: 8→( , 9 →)

多くの人が小指より薬指の方が長いから、
指が届き易いんじゃないだろうか?

120 :デフォルトの名無しさん:2009/04/29(水) 12:46:16
>>119
> 指が届き易いんじゃないだろうか?
JPの0の位置って好きじゃないかも
C-u 99 ほにゃららってするね
C-u 55 ほにゃららってするね
あとC-u 22 C-n 約半ページ移動

なぜC-uのあとに左手が多いのかなと思ったら、右手の人差指でuを押して、右手の薬指で9を押すと
右手がちょっと不安定になるからっぽい
まあ、どうでもいい話でした

US配列はjp106を設定していないあの配列なのか
hhkとか使いたくないなあ

121 :デフォルトの名無しさん:2009/04/29(水) 13:37:20
>>86
Sheme/Lispで多言語の文字列生成検索関数があれば、
いいんだ!(emacs lispはいや。)

122 :デフォルトの名無しさん:2009/04/29(水) 17:38:13
>>119
小指?
いや小指より薬指は長いけど
自分は890あたりは中指薬指で打つな

123 :デフォルトの名無しさん:2009/04/29(水) 19:59:39
>>122
それだと、ホームポジションの基本から外れるじゃん。

だが、冷静に考えてみると、閉じ括弧って lisp の時、滅多に入力しない。
pairで入力するから。

だから、たまに括弧の数の調整をする時、使って、
「ああ、遠い」って思うんだよな。


124 :デフォルトの名無しさん:2009/04/29(水) 20:03:45
>>122
わからなくなもないけど、混乱しないの?
右薬指で0もありならp/もそうなの?
標準的と思われるタッチタイプにどれだけ妥当性があるのか、よくわからないがね
小指の使用率高いし
人間の適用力はすごくて、vi, emacsのESCの過度のタイプも意外と平気だからなあ

125 :デフォルトの名無しさん:2009/04/29(水) 20:23:45
俺も数字の段では小指を使わない。
これで腕は移動しなくても、手首の回転と指の折り曲げで対応できる。

>>124
> /もそうなの?

小指は短いんだから、折りたたむ位置のキーはかえって有利。

126 :デフォルトの名無しさん:2009/04/29(水) 20:36:53
クロダって凄い人なの?

127 :デフォルトの名無しさん:2009/04/29(水) 20:38:49
黒部ダムは、すごいところだ。

128 :デフォルトの名無しさん:2009/04/29(水) 21:17:56
黒田節はいつ聞いても心にしみる

129 :デフォルトの名無しさん:2009/04/29(水) 22:15:08
以前はEmacsのM-系はAltキーで
viの挿入モード抜けはESCでしてたけど
いまはどっちも^[。
Ctrlキーで代用が聞くBSやTABも^H、^I。
最近コンソールアプリで^Hが使えないものでも
^8が効くということに気が付いた。
Ctrlキーは便利なんだけど
Macだとブラウザのアクセスキーとカチ合うのが難点
wikiを見てる時に何度履歴のページを見る羽目になったことか…

130 :デフォルトの名無しさん:2009/04/30(木) 00:38:50
括弧が遠いと思うのなら、SymbolicsのキーボードみたいにUS配列の'['と']'の
位置を'('と')'に変更してしまうのもいいかも。これ結構打ちやすいよ。
'{'と'}'は滅多に使わないのでずいぶん遠くにある。あとAの左隣がRUBOUT
(DELETEに相当)というのも麻薬的な魅力がある。

http://www.pfu.fujitsu.com/hhkeyboard/kb_collection/images/symbolics.gif

131 :デフォルトの名無しさん:2009/04/30(木) 01:44:51
>>126
既存コミュニティの努力を全て無に帰して、新しい言語を構築しようって人は、
近代中世から何百年とずーっと存在し続けているのさ。
今に始まったことじゃない。

132 :デフォルトの名無しさん:2009/04/30(木) 02:44:04
ESCがずいぶん離れていて不便だ・・・と思っていたんだが
いわゆる省スペースのだとどうということもない

133 :デフォルトの名無しさん:2009/04/30(木) 03:07:31
>>131
pgの悪口言うな><
クロッティはむしろ逆の方向性だろ。

134 :デフォルトの名無しさん:2009/04/30(木) 04:06:44
キーボードの話が出たので
省スペースキーボードの KEK-EA9AU の
復活に向けて布教しようと思ったら、何故か普通に売られてた!

ヤホーイ!!
http://kakaku.com/item/01505010404/

値段が上がり続けてるのが心配だがこのキーボードはマジでオススメ
キーピッチが小さいから数字キーまでブラインドで打てるし
フルキーだから変な配置で困ることもない。

なのに全く知られてないのは何故なんだ!

135 :デフォルトの名無しさん:2009/04/30(木) 07:39:04
>>134
形が普通すぎてださいし、JIS配列だから使い物にならない。


136 :デフォルトの名無しさん:2009/04/30(木) 11:46:14
thinkpadでいいよ
乳首最高

137 :デフォルトの名無しさん:2009/04/30(木) 12:43:20
>>132
漢字キーと入れ替えちゃえばいいじゃないか
IMEのスイッチを変換に当てて使えば上段全部が遠いおれでも楽勝だぜ(無変換はSUPER)


138 :デフォルトの名無しさん:2009/04/30(木) 13:39:01
>>137
うん、でかいキーボードに戻ったらそうするだろうw
省スペースだとファンクションキーも楽に届く・・・のはいいんだが
今度は左のALTやCTRLが押しにくい

139 :デフォルトの名無しさん:2009/04/30(木) 21:25:25
>>138
小さくなるとALT,CTRLが押しにくかったりするんだよね
おれは店頭に並んでいる1000円キーボードが一番好きだね
外し方が悪いのかもしれないけど、うまくキーボードが外せなかったりするし
ブラシとエアーダストでお茶を濁している
あと、用途 来客訪問時用 and 予備用ととストックしてあるなあ
ケースバイケースで生活感のあるキーボードを見せたくない場合もあるし

乳首パッドも使っていたけど、しょせんノートパソコンだよね
持たなくて済むなら持ちたくないね
盗難がすごくこわいし、セキュリティ的にも安易に席を離れられないからなあ
デスクトップPCも盗もうと思えばできるんだろうけど
素人がやる犯罪行動コストとしてけっこうありそうだからなあ
常習者だったらあっさり行けるんだろうけど

140 :デフォルトの名無しさん:2009/05/01(金) 01:55:33
>>119-123

8 は人差指、9 は中指、0 は薬指が基本。
ttp://www.softpedia.com/screenshots/Touch-Typing-Deluxe_3.png


141 :デフォルトの名無しさん: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



142 :デフォルトの名無しさん:2009/05/02(土) 00:47:11
左手小指の付け根でCtrl押す派はどれくらいいるのだろうか?

143 :デフォルトの名無しさん:2009/05/02(土) 01:29:39
>>142
どんだけ変態なんだよ
なにかの事故で小指がないならわかるけど

144 :デフォルトの名無しさん:2009/05/02(土) 02:18:31
お前らそろそろ自重しろよ

145 :デフォルトの名無しさん:2009/05/02(土) 02:42:07
>>144
それならネタ投下しろよ

146 :デフォルトの名無しさん:2009/05/02(土) 05:36:02
プラインド・タッチの普及に於いてサイト・アンド・サウンドの果たした
役割について考察せよ。因みにWikiでは触れられていない。
これネタ

147 :デフォルトの名無しさん:2009/05/02(土) 06:57:29
>>142
わたしもやりますー
小指はあるよ

148 :デフォルトの名無しさん:2009/05/02(土) 11:57:24
>>142
俺もフルサイズのキーボードではやるよ。
ノートとかだとできなくて辛い。

>>143
某Scheme処理系作者もそうだった気がする。
結構打ちやすいよ?

149 :デフォルトの名無しさん:2009/05/02(土) 12:18:46
>>148
付け根なんでしょ?
それだとCtrlとCaps lockは交換していないよね
第一関節と第二関節の腹で押すなら、多少は想像できるけど、でもとても効率性や機動性があるとは思えない
まったり操作のときに使うの?

右手小指の付け根では成り立たないの?

すげー謎過ぎる

150 :デフォルトの名無しさん:2009/05/02(土) 12:25:34
小指の付け根あたりにもう一本指があればいいのに

151 :デフォルトの名無しさん:2009/05/02(土) 12:26:09
ホームポジションでタイプするときに小指の付け根ってちょうど左右Ctrlキーのあたりにあるけど。
付け根で押すと、押した状態でさらに指が5本ともつかえて効率的。Emacsにイイ。

152 :デフォルトの名無しさん:2009/05/02(土) 12:29:34
その態勢だったら親指が使えない

153 :デフォルトの名無しさん:2009/05/02(土) 12:39:07
Lispスレと思って開いたらタイピングスレだった

154 :デフォルトの名無しさん:2009/05/02(土) 12:41:57
あー、やっとイメージをつかめたけど
USキーボードだとCtrlの幅が多少広くなって、他のキーに接触せずに押しやすいのかな

でも、それならCtrlとCaps lockは交換する派のほうが共感できるなあ

155 :デフォルトの名無しさん:2009/05/02(土) 17:17:51
>>151
> ホームポジションでタイプするときに小指の付け根ってちょうど左右Ctrlキーのあたりにあるけど。

その体制って手首や指が手の甲の側に反るので俺はダメだ。
俺がホームポジションでタイプするとき、小指の付け根は空中ですよ。手首はパームレストの上。
手が半球をつかむような自然な形を保てる方が手の負担が少なくて楽だと俺は思うのだが、
そんなの全然大丈夫って人も沢山いるんだね。

156 :デフォルトの名無しさん:2009/05/02(土) 17:41:49
俺がホームポジションでタイプするとき、小指の付け根はCtrlキーの0.5cm上空ですよ。
手首はパームレストの上。手の負担も少ないってゆうかゼロ。

157 :デフォルトの名無しさん:2009/05/02(土) 20:57:18
>>154
致し方ないので"A"の左がコントロールになっているキーボードを社内で普及させた俺みたいなのもいる


158 :デフォルトの名無しさん:2009/05/02(土) 21:20:02
文字のキーを2つ以上同時に押すことはゲームしかありえないので
左手で文字キーを押すときは右手で右のShift, Ctrl, Altを
右手で文字キーを押すときは左手で左のShift, Ctrl, Altを
組み合わせて押す。
どんなキーボードでも有効w

159 :デフォルトの名無しさん:2009/05/02(土) 21:28:04
>>157
すげー迷惑だよ
劇的な優劣差があるわけでもなし

むしろ不便さのほうを感じるんではないだろうか
キーボード変わると作業効率落ちる
漫画喫茶でストレス感じまくり

160 :デフォルトの名無しさん:2009/05/02(土) 23:59:01
以前、某大学(東大じゃないよ)の実習用MacにHHK付けさせたのは何を隠そうこの私。

161 :デフォルトの名無しさん:2009/05/03(日) 00:46:08
俺はコントロールキーを
小指側のてのひらの付け根で押してる。
小指の付け根というのはこのことかな?

162 :デフォルトの名無しさん:2009/05/03(日) 01:12:16
Lispをやってこうと思うんですけど最近はHaskell最強の声も聞きました。
どっちがいいんですか。

163 :デフォルトの名無しさん:2009/05/03(日) 01:19:17
こういう質問をする人の思考回路がまったく理解できないな。
両方やってみて自分で選べばいいじゃん。

164 :デフォルトの名無しさん:2009/05/03(日) 01:25:26
まあ擁護してみると
どちらも勉強する価値は大いにある
しかしその価値がわかるほどに学習が進むとそれに染まってしまって
どちらかに偏って考えてしまうようになる
だから学習前のプレーンな状態で選択したいんでしょう

165 :デフォルトの名無しさん:2009/05/03(日) 01:41:49
common lispもschemeもhaskellも全部触ってみるのが一番良いと思うが。
*nixならperlだって使えるべきだし、さらに言えばsmalltalkだって教養として
知っておくべきだと思う。
逆に言えば、特定の言語に染まっちゃった人の意見なんか参考にしてどうすんの?

166 :デフォルトの名無しさん:2009/05/03(日) 01:42:29
それで他人にきいてその通りに選択するってのも気持ち悪いよな。

167 :デフォルトの名無しさん:2009/05/03(日) 01:45:45
Haskellスレにも似たようなこと書いてるのかな

168 :デフォルトの名無しさん:2009/05/03(日) 01:51:44
>>162
Haskellを触ったことないけど、興味があるんならやってみればいいんじゃないの?
>>164さんが言うような偏りは、しょうがないとしか言いようがない
某日本人が新しい言語を使うときは、さっさと大きいものをつくるらしい
例え、失敗しても、根本的にまた勉強し直して、2度目で作れればいいし
かなりハードだろうけど、目的が直接的なこともあって、かなり得るものはあるらしいね
Haskellで実用的な何ができるのか、知らないけどね

個人的にはslime.elが便利らしいんで、Common Lispがいいと思うけどね
Common Lispで何か作ったことないけどね
>>165
Perlはわかるんですが、smalltalkは必要なんですか?
smalltalkは教養としてでもいいけど、smalltalkを知っておくことってそんなに大事なの?
smalltalkを知っていなくてすごく困ることになっても、そのとき対処するなあ

169 :デフォルトの名無しさん:2009/05/03(日) 01:56:28
>>160
東工大?

170 :デフォルトの名無しさん:2009/05/03(日) 02:18:06
>>169
つOpenBSD かつ ストールマンと飲んだ人

171 :デフォルトの名無しさん:2009/05/03(日) 02:22:39
>>168
興味が無いなら勧めないけど、何でもおもしろいって感じられる年頃の時にsmalltalkの中身を見ておくのは悪いことじゃないよ
あとcupsっていうeclipseでcommon lispさわれる環境もあるのでemacs系エディタがダメならそっちも検討してみるといいかも。


172 :デフォルトの名無しさん:2009/05/03(日) 02:30:43
>>168
>smalltalkを知っていなくてすごく困ることになっても

ならないからオケ。
秘境を旅するみたいなもんで、知的好奇心があれば
満足出来ると思うけど、実用的な何かを期待するなら
無駄骨になる。一つの小さな閉じた世界を訪れるのが
楽しいと思える人向け。

173 :デフォルトの名無しさん:2009/05/03(日) 02:49:38
>>171
京都だけど勉強会ってあるんだね
次回は5月17日だって
>>172
自分の場合はLisp/Schememも秘境という感じですがw
お金儲けに直結しづらい言語っていいなあという感じでマイペースにやっています

174 :デフォルトの名無しさん:2009/05/03(日) 13:20:36
>>162
「問題の解き方」を研究したいなら Lisp、「問題の問い方」を研究したいなら Haskell

175 :デフォルトの名無しさん:2009/05/03(日) 13:28:38
>>172
Lispはまだ外界との交流が盛んだと言うか、Lispが特殊なのは記法だけだよね。
Lispが砂漠のオアシスみたいな場所だとすれば、Smalltalkは山奥の隠れ里。
人によってはエルドラドや桃源郷に思えるかもしれないけど、交流は殆ど
断たれてしまってる。

176 :デフォルトの名無しさん:2009/05/03(日) 14:06:29
SmalltalkはSqueakで子供に布教してる人もいるじゃない。

177 :デフォルトの名無しさん:2009/05/03(日) 19:03:11
lispって名前空間がややこしいですよね。俺だけ?
シンボルには変数と関数を入れることができて、
変数には関数を入れることもできるって。。
リストの先頭か #' で関数にアクセスできるけど、
変数に入れた関数には別の方法でアクセス・・慣れればしっくりくるのかな

178 :デフォルトの名無しさん:2009/05/03(日) 19:37:50
リストの先頭でマクロにアクセスできるけど
マクロは変数に入れられない

リストの先頭にはファーストクラスオブジェクトを置けないと考えれば?
関数も、そのままでは変数に入れられないから #' を使うわけで

179 :デフォルトの名無しさん:2009/05/03(日) 20:05:26
>>177
つ【Scheme】

180 :デフォルトの名無しさん:2009/05/03(日) 21:30:15
>>178-179
Scheme と CommonLisp で名前空間の扱い違うのか。
すみません、勉強不足だ。
あー、イメージは掴めそうかも。
変数の世界と 関数の世界があって x軸とy軸のように
双方向の写像の役割を #' と apply (funcall) がそれぞれ行っている。
写像なしではそれぞれの世界を行き来することはできない・・みたいな。

181 :デフォルトの名無しさん:2009/05/03(日) 21:36:50
>>180
おおざっぱなイメージだと、symbol に

"値スロット" しかないのが Lisp1
"値スロット" と "関数スロット" があるのが Lisp2

scheme とかは前者, CL つか Maclisp の血を引いてる奴は後者


182 :デフォルトの名無しさん:2009/05/03(日) 21:51:11
値、関数スロットのほかに属性とかもあるらしいね
Schemerだから詳しく知らんけど


183 :デフォルトの名無しさん:2009/05/03(日) 22:10:58
>>181-182
Thx。Scheme の方がシンプルでいいのかもなあ。
使ってる人も多そうな気が。
でも今 On Lisp 見てて面白そうだから CL もよさそうだw悩む。

184 :デフォルトの名無しさん:2009/05/03(日) 23:06:54
両方やれw
どっちも楽しいぞ

185 :デフォルトの名無しさん:2009/05/03(日) 23:50:35
CLでSchemeを実装する、という話はPAIPにもANSI Common Lispにも載っている。
しかし、SchemeでCLを実装する、という話は聞かない。
最初に複雑なCLをやっておけばSchemeのシンプルな長所も理解できるけど、
Schemeから入るとCLが単に複雑なだけに見えてしまうかもしれない。
よって最初はCLをお勧め。反論は認める。

186 :デフォルトの名無しさん:2009/05/04(月) 00:29:39
>>185
関数型言語をかじってみたい程度の動機だとSchemeがいいんじゃない?
実用的にこれをしたいという用途が明確にあるならCLに直接にいくのもあるのかもね

187 :デフォルトの名無しさん:2009/05/04(月) 00:29:41
Scheme以外のLispはレベルが低いのでスレからでていってください

188 :デフォルトの名無しさん:2009/05/04(月) 02:54:32
なんだ?そんなんで喧嘩売ってるつもりか

189 :デフォルトの名無しさん:2009/05/04(月) 02:56:35
はい、喧嘩売られてます、今

190 :デフォルトの名無しさん:2009/05/04(月) 02:59:03
>>187
レベルが低い事例は?

191 :デフォルトの名無しさん:2009/05/04(月) 03:09:25
J
 魚 魚 魚<大きな釣り針だなあ
   魚 <お口に入らないよ

192 :デフォルトの名無しさん:2009/05/04(月) 03:18:55
レベルの低い>>187が出て行けば無問題

193 :デフォルトの名無しさん: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
算数ドリル的な問題だと言語としての真価も図れないし、つまらないかな?
明日にズレ混んでもいいから、なんかやってもいいかもね

194 :デフォルトの名無しさん:2009/05/04(月) 11:55:45
>>185
> SchemeでCLを実装

on lisp に無かったっけか?

195 :デフォルトの名無しさん:2009/05/04(月) 14:18:32
>>194 CL で continuation なら見かけたような気がする


196 :デフォルトの名無しさん:2009/05/04(月) 22:27:23
最近ようやっと自分のお師匠が言っていた
「Lispはごくごく普通の言語だよ、記述がちょっと毛色の違うだけの」
と言っていた意味がよくわかった

ひょっとして書かれかた(書き方じゃない)になれてしまえばC++より優しい?


197 :デフォルトの名無しさん:2009/05/04(月) 22:31:36
ひょっとしなくても優しい、そして易しい
Forthに匹敵するくらい

198 :デフォルトの名無しさん:2009/05/04(月) 22:36:24
forceと供にあれだぞ、オビワン

199 :デフォルトの名無しさん:2009/05/04(月) 22:44:11
>>196
そうだね。
Lispを特別な言語と思い込み、それを使いこなしている(?)自分が
特別な人間だと思い込んでいるユーザがLispを特別な言語にしている。


200 :デフォルトの名無しさん:2009/05/04(月) 23:00:55
elispやCLはすごく普通だよね。ほかの言語の経験があれば割と素直っていうか。
Schemeは再帰が壁という声を聞いた。昔の話だけど。

201 :デフォルトの名無しさん:2009/05/04(月) 23:29:02
Lispは、「言語設計者様が作った構文を真面目に覚える」という能力を
プログラマーから奪う危険な言語。

202 :デフォルトの名無しさん:2009/05/05(火) 00:09:01
ある程度Lisp触って他の言語を触ってみたら
足し算するときに1回はコンパイルエラー出す

203 :デフォルトの名無しさん:2009/05/05(火) 00:13:39
>>200
単なる食わず嫌いなところがあるのかもしれないね
「ロシア語がおもしろいよ。ドストエスキーは原書で読まないと」と他人に言われても、そこまで興味を引かないもんね
>>201
よくわからない文章だね

a) Lispは、ある能力をプログラマーから奪う危険な言語である。
b) 「構文を真面目に覚える」という能力ってなんだ?
c) 能力を人から奪うという表現もすごいね

elipse(emacs)は、「言語設計者様が作った構文を真面目に覚える」という能力を
プログラマーから奪う危険な統合環境。
これなら成り立つね

204 :デフォルトの名無しさん:2009/05/05(火) 00:42:03
>>203
文盲乙

205 :デフォルトの名無しさん:2009/05/05(火) 02:14:50
>>203
Lispは構文を覚えなくていいから楽だなぁ
ってことだろ

206 :デフォルトの名無しさん:2009/05/05(火) 02:53:55
誇張表現を受け入れられない人って結構居るみたいね…

207 :デフォルトの名無しさん:2009/05/05(火) 03:02:25
ところでGuileのスレはどうするよ?
>>193の言うような対決スレとして再利用でもする?

208 :デフォルトの名無しさん:2009/05/05(火) 04:40:47
>>193,207
Guileスレを使うなら
「guile=R5RSで解く(他のLisp/Scheme/その他関数型言語の参加もあり)」
くらいの名目にした方がよいかも。

あと問題がProject Eulerなら参加する。
和訳http://odz.sakura.ne.jp/projecteuler/

209 :デフォルトの名無しさん:2009/05/05(火) 05:23:24
>>208
いいんじゃない?
それでは、パイロット版という感じで気楽にやりましょうか。

【イベント名】 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/
【備考】初心者の参加、大歓迎です。あとおもしろい企画があったら、どしどしレスしてください。


210 :209:2009/05/05(火) 12:16:51
レスつかないしw
13時から初心者部門参加ということで問題3題解くわ

とりあえず、こっちに移動します
http://pc12.2ch.net/test/read.cgi/tech/1239985829/

211 :デフォルトの名無しさん:2009/05/05(火) 12:40:25
文豪乙

212 :デフォルトの名無しさん:2009/05/06(水) 00:57:47
そもそもそんな変な時間に集まるわけねーだろ


213 :デフォルトの名無しさん:2009/05/06(水) 01:47:26
>>212
じゃあ、何時ならいいんだ?

集まらないと言っても3人集まったんだから成功だと思うんだけど

214 :デフォルトの名無しさん:2009/05/06(水) 21:59:46
午前の部と午後の部を設けるとか

215 :デフォルトの名無しさん:2009/05/06(水) 22:23:14
>>214
妥当な開始時間を聞いているのに

二部構成という企画提案になっているんだ

216 :デフォルトの名無しさん:2009/05/06(水) 23:28:20
GaucheでSchemeを学んでいます。
quoteで悩んでいます。

(list 1 2 3 4)
'(1 2 3 4)

違いがわかりません。

217 :デフォルトの名無しさん:2009/05/06(水) 23:52:02
(list 1 2 3 4)は1 2 3 4といったデータからリストを作っている
'(1 2 3 4)=(quote (1 2 3 4))はリスト(1 2 3 4)を評価せずそのまま渡している

(list 1 (+ 2 3 4))
'(1 (+ 2 3 4))
の違いを比べてみれ

218 :デフォルトの名無しさん:2009/05/07(木) 00:00:22
>>217
横槍だけど、(car (car '(1 (+ 2 3 4))))だと、評価されないけど
評価するのってどうやるの?

219 :デフォルトの名無しさん:2009/05/07(木) 00:01:17
>>217
ありがとうございます。だいぶわかってきました。
(list 1 (+ 2 3 4))
'(1 (+ 2 3 4))
だと上では(1 9)のリストが作られるんですね

対話で(1 2 3 4)と渡すとエラーが出るのは、このリストのcarが手続きでないから、という解釈でいいのですか?
作ったリストとリストリテラルの違いはありますか?

220 :デフォルトの名無しさん:2009/05/07(木) 00:40:40
'(+ 1 2 3) ; => '(+ 1 2 3)
`,(+ 1 2 3) ; => 6
`',(+ 1 2 3) ; => '6

221 :デフォルトの名無しさん:2009/05/07(木) 01:01:37
>>219
そう、(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)ということになる
いったい何を評価したいのかな?

222 :デフォルトの名無しさん:2009/05/07(木) 01:47:26
>>221
(car (cdr '(1 (+ 2 3 4))))だね

(car '((+ 1 2 3 4) 1))で、もぞもぞいじっていたから気づかなかった

223 :デフォルトの名無しさん:2009/05/07(木) 03:43:53
>>221
それ説明になってないじゃん。
(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関数が作ったかだけ。

224 :デフォルトの名無しさん:2009/05/07(木) 07:35:25
listの方はmutableで、quoteの方はimmutableだったりするんじゃない?

225 :デフォルトの名無しさん:2009/05/07(木) 11:14:36
'(list 1 2 3) -> (list 1 2 3)

226 :デフォルトの名無しさん:2009/05/07(木) 12:08:43
> list関数が作ったか、read関数が作ったかだけ。
なるほど、わかりやすいかも。

227 :デフォルトの名無しさん:2009/05/07(木) 19:16:58
(let ((let '`(let ((let ',let)) ,let))) `(let ((let ',let)) ,let))

228 :デフォルトの名無しさん:2009/05/07(木) 19:19:43
>>227でジャンプに連載されてた、テニスの王子様描いてる人がその前ぐらいに描いてたCOOLって漫画思い出した。

229 :デフォルトの名無しさん:2009/05/07(木) 19:22:52
>>223
実装が仕様って話かな
自分は、そういう意味でしか言語を理解できないけど

230 :デフォルトの名無しさん:2009/05/08(金) 13:49:40
>>224
immutableじゃない。set-car!/cdr!出来る。
>>229
仕様そのものだ。

231 :デフォルトの名無しさん:2009/05/08(金) 21:18:32
>>230
できるかどうかは実装依存じゃないのかな?
R6RSは知らないけど

232 :デフォルトの名無しさん:2009/05/08(金) 22:12:53
>>230
R6RS だと immutable だよ
R6RS 5.10

233 :デフォルトの名無しさん:2009/05/08(金) 22:45:38
>> 220
R5RSでも4.1.2にエラーだと書いてある。処理系に報告の義務がなかっただけ。

234 :デフォルトの名無しさん:2009/05/09(土) 03:09:19
クォートしたリストはつまりリテラルなので、変更できないのが常識。

235 :デフォルトの名無しさん:2009/05/09(土) 08:24:42
これからSchemeを勉強予定なのですが、
WindowsXPで遊ぶのにPLTとCHICKENどちらがお勧めでしょうか?
もしくはその他お勧めがあればご意見をいただけますでしょうか

236 :デフォルトの名無しさん:2009/05/09(土) 09:38:25
>>235
漏れなく開発環境もついてくることを考えると、PLT が一番無難じゃないかなあ。
chicken は windows だとビルドが面倒だったような気が。
遊ぶんだったら petit chez なんかでもいいかもしれんけど、
未だマルチバイトな文字に対応してないみたいだし。


237 :デフォルトの名無しさん:2009/05/09(土) 10:37:31
プロジェクトオイラーって解き始めるとクセになるね。
Lisp以外では解く気が起きない問題も結構あるし
毛色の違う言語を2,3覚えた方が良いような気がしてきた。


238 :デフォルトの名無しさん:2009/05/09(土) 11:00:53
>>237
> 毛色の違う言語を2,3覚えた方が良いような気がしてきた。
これってどういうこと?
Lispじゃだめなん?

239 :デフォルトの名無しさん:2009/05/09(土) 11:15:43
project eulerと言えばhaskell

240 :デフォルトの名無しさん:2009/05/09(土) 12:05:04
>>235
CHICKEN は最近 Ver4 になって utf-8 デフォになったためか外部ライブラリ群再構築中
PLT は Ver4 として落ち着いてきたが互換性に難あり (デフォでは else 部なし if はエラー)
私的には Ypsilon あたりが高速かつクリーンで良さげな気がす
R5RS ならこんなのも
ttp://www.geocities.jp/bneck44/hS.htm

241 :デフォルトの名無しさん:2009/05/09(土) 12:23:37
しかしifがwhenを兼ねるというなら
mapがfor-eachを兼ねてもよさそうなものだが。

242 :デフォルトの名無しさん:2009/05/09(土) 12:44:02
>>238
Lispがダメなんじゃなくて単に問題11はCの方が個人的に解きやすかっただけ。

プロジェクトオイラーの問題をいくつか解いたけど
解答はどこをみたらいいのかな?

解いたのはいいけど答えがあってるかどうかわからないので
悶悶としてきました。


243 :デフォルトの名無しさん:2009/05/09(土) 12:51:49
Project Euler のサイトで回答を入れればあってるかどうかわかる。
このスレには貼らないでね。趣味で遊んでるんで、回答とか貼られると萎える。

244 :デフォルトの名無しさん:2009/05/09(土) 12:52:49
>>242
ググると誰かの全問解答がみつかったかな
それか垢をつくると答えあわせができるんじゃないかな

垢つくつてログインまでしかしていないけど、なんかそんな感じだったよ

>問題11はCの方が個人的に解きやすかっただけ。
手続き型言語で解きたくなるけど、そこを我慢するのがLisper/schemmer

245 :235:2009/05/09(土) 13:58:03
>>236
>>240

ありがとうございます!
ご意見いただいた内容を意識してそれぞれ実際に触ってみたいと思います。


246 :デフォルトの名無しさん:2009/05/09(土) 18:49:08
Win版は使った事が無いのだけれど
入門用には完成度の高いScheme48もオススメ
R5RSに最も忠実な処理系だと思う
もちろん独自の拡張も充実してる
R6RS対応版であろう次期リリースが早くでないかとwktkして毎日のようにリポジトリを覗いてる

247 :デフォルトの名無しさん:2009/05/09(土) 20:00:39
>>216
俺もよく理解してないんだが
関数の返り値に クォート付けたリストを渡すと
呼び出し元で書き換えられる可能性があるからまずいらしい。
list で作ったリストを返したほうがいいらしい。

詳しくは On Lisp に書いてある。
http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/functionalProgramming.html
これの GOODNESS で検索した辺りに書いてある。
CommonLisp だが Schemeも変わらないよね?

248 :デフォルトの名無しさん:2009/05/09(土) 21:28:31
> (quote (quote (1 2 3)))
'(1 2 3)

> (list (quote (quote (1 2 3))))
('(1 2 3))

> (' (quote (1 2 3)))
*** ERROR

249 :デフォルトの名無しさん:2009/05/09(土) 22:07:13
チャイティンのLispだと'はQUOTEの別名扱い
(' (1 2 3)) ≡ (QUOTE (1 2 3))

250 :デフォルトの名無しさん:2009/05/09(土) 22:19:35
(' (1 2 3))だとエラーになるね。Gauche。

251 :デフォルトの名無しさん:2009/05/09(土) 22:27:01
>>235
日本語資料が一番充実してるのは Gauche だけど、Win ではちょっと不安定かも
あと、Common Lisp 寄りでときどき Scheme らしからぬとも評されたり
仕様に一番網羅的なのはおそらく Larceny で IEEE/ANSI から R6RS まで対応
事実上のリファレンス実装と言われることもあるらし

252 :デフォルトの名無しさん:2009/05/09(土) 22:35:08
' は (quote) だから ((quote (quote (1 2 3)))) の意味になる

253 :デフォルトの名無しさん:2009/05/09(土) 22:39:17
gosh> ((quote (quote (1 2 3))))
*** ERROR: invalid application: ('(1 2 3))
Stack Trace:
_______________________________________
gosh>

254 :デフォルトの名無しさん:2009/05/09(土) 22:47:48
MzScheme 様と Ypsilon 様は car が手続きじゃねえとお怒りです

255 :デフォルトの名無しさん:2009/05/09(土) 23:02:44
だーかーらー!チャイティンのLispだと言っているでしょうがぁ
CLならリードマクロテーブルをいじって通せるかもしれないけど
Schemeは規格の上では通らない

256 :デフォルトの名無しさん:2009/05/09(土) 23:27:40
>>248から先は何の話をしているのだ?

257 :デフォルトの名無しさん:2009/05/09(土) 23:36:51
S式に執着しなければ楽になれるのに。
syntax-rulesは良いね。consもquoteもmapcarもいらないから。

258 :デフォルトの名無しさん:2009/05/10(日) 11:49:03
手続き名をかっこの外に出す方式は無引数の場合が大変そう

259 :デフォルトの名無しさん:2009/05/10(日) 16:38:29
すべての関数は引数はひとつだけリストで渡します

260 :デフォルトの名無しさん:2009/05/10(日) 17:05:59
lispからcへの可読な変換をしてくれるソフトないのでしょうか?


261 :247:2009/05/10(日) 18:55:58
>>216
同じようなの過去スレで見つけたよ。
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かもしれない

262 :デフォルトの名無しさん:2009/05/11(月) 10:26:17
ひょっとして漢字コードを半角文字とみたときに
"/"が入るような文字コードの文字は
処理できないのでしょうか?

2chのdatを読ませてるんだけど
AAがよくあるdatだと、読み込みでバグって止まる

263 :デフォルトの名無しさん:2009/05/11(月) 18:04:16
マルチバイトまわりは処理系依存なのでその情報だけでは不足 (\ でなく / なら普通問題ないはず)
処理系と対象ファイルの文字コード、あとできれば止まる前後のエラーメッセージなどplz

264 :デフォルトの名無しさん:2009/05/12(火) 20:31:11
http://www.lsharp.org/

l# だってさ

265 :デフォルトの名無しさん:2009/05/12(火) 21:00:32
.NETってどうなん?

266 :デフォルトの名無しさん:2009/05/12(火) 21:39:02
いいえ鉄です

267 :デフォルトの名無しさん:2009/05/12(火) 23:17:01
>>265
死にました

268 :デフォルトの名無しさん:2009/05/12(火) 23:49:10
>>264
.net系の net Scheme っての知らんの?

269 :デフォルトの名無しさん:2009/05/13(水) 02:00:27
そんなのあるの?

270 :デフォルトの名無しさん:2009/05/13(水) 12:34:20
>>264
asdf-installでProgram Filesフォルダーにいろいろいれてくれたりするのかな

と思ったらdefineでもdefunでもなくdefなんだ

271 :デフォルトの名無しさん:2009/05/14(木) 11:00:47
>>268
http://ironscheme.codeplex.com/
これのことか?

272 :デフォルトの名無しさん:2009/05/18(月) 00:22:56
(define (fact n)
(if (zero? n)
1
(* n (fact (- n 1)))))
という風に記述できない理由は何なのでしょうか?
再帰てきにはこちらの方が自然な気がするのですが...
(Common Lispから来たのでSchemeとの違いにまだ戸惑っています。)



273 :デフォルトの名無しさん:2009/05/18(月) 00:24:01
何なの、と言われましても

274 :デフォルトの名無しさん:2009/05/18(月) 00:27:07
>>272
普通に評価できるけど何が問題なの?

275 :デフォルトの名無しさん:2009/05/18(月) 00:27:14
いや、どうして動かないのか気になりまして...
展開できるような気がするのですが....
あと、この関数を定義して使うとそのまま、フリーズしてしまうのが
こまってしまって...

276 :デフォルトの名無しさん:2009/05/18(月) 00:28:14
>>275
処理系書いてよ.動かないほうが珍しいと思うけど

277 :デフォルトの名無しさん:2009/05/18(月) 00:30:43
最後のかっこが多い

278 :デフォルトの名無しさん:2009/05/18(月) 00:31:43
すまん別に多くないか

279 :275:2009/05/18(月) 00:31:49
あれ.....端末から直接goshを使ったら動きました....
Emacsの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))
出ているのですが、上のコードとこれの違いはどこらへんなのでしょうか?

280 :デフォルトの名無しさん:2009/05/18(月) 00:35:47
環境と処理系を書いてくれ。>>272でフリーズとか意味わからん。

281 :デフォルトの名無しさん:2009/05/18(月) 00:42:14
>>279
末尾再帰。

282 :デフォルトの名無しさん:2009/05/18(月) 00:43:26
もはや尋ね尽くされた質問だが,>>272が非末尾再帰呼び出しであるのに対し
>>279は末尾再帰呼び出しになっている.>>272が「非」末尾再帰なのは
再帰呼び出し(fact (- n 1))の結果にさらにnを掛ける処理を行っているから.

283 :デフォルトの名無しさん:2009/05/18(月) 00:44:00
リロードできてなかたorz
>>279
p56, 57あたり読んでみて。 って立ち読み版か。

284 :デフォルトの名無しさん:2009/05/18(月) 14:41:59
>>272は中間記法で書くと、
5*(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)))


285 :デフォルトの名無しさん:2009/05/18(月) 16:08:41
common lispからpythonの機能をいろいろ使えるようにpython-on-lispを拡張してみました

http://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)) ;行列の積


286 :デフォルトの名無しさん:2009/05/18(月) 16:57:11
py::pyってのがエロイ。

287 :デフォルトの名無しさん:2009/05/18(月) 19:51:17
中学生かおまえは

288 :デフォルトの名無しさん:2009/05/18(月) 20:47:32
(. (.
X
Y

289 :デフォルトの名無しさん:2009/05/18(月) 21:07:45
{ {
x
Y
Cだと乳首が立つ。これが文化の違いってやつだな!

290 :デフォルトの名無しさん:2009/05/18(月) 21:10:10
>>289
乳首は立ってるだろうがペチャパイに見える


291 :デフォルトの名無しさん:2009/05/18(月) 21:18:08
貧乳乳首萌え…ないな

292 :デフォルトの名無しさん:2009/05/18(月) 21:34:57
<<
x
Y
なぜか「C++」までエロく見えてくる

293 :デフォルトの名無しさん:2009/05/18(月) 21:38:04
この期に及んでも括弧の話とは恐れ入った。

294 :デフォルトの名無しさん:2009/05/18(月) 21:40:47
>>292
上手いなw

295 :デフォルトの名無しさん:2009/05/19(火) 09:09:18
う、いかん、想像してしまった・・・
もう"Y Combinator"とか恥ずかしくて女の子に言えない orz

296 :デフォルトの名無しさん:2009/05/19(火) 11:45:03
Swankとは何なのですか?

297 :デフォルトの名無しさん:2009/05/19(火) 12:18:17
λ. λ.
X
Y

298 :デフォルトの名無しさん:2009/05/19(火) 12:23:06
>>296
SLIMEに附属する、lispのrepl環境をサーバ(デーモン)するプログラムのこと
これを使うことで複数の処理系のrepl環境を同時に使ったり、
リモートで立ち上げた環境を使うことができる

職安| λ…

299 :デフォルトの名無しさん:2009/05/19(火) 15:20:57
>>298
ありがとう。
λ・・・SLIMEも良くわかってない俺orz
Swank-Gaucheというプログラムを公開してる人のブログを見つけたのですが、
初心者では使う必要もないでしょうね?

300 :デフォルトの名無しさん:2009/05/19(火) 21:39:47
すげー便利だから頑張って入れてみれ

301 :デフォルトの名無しさん:2009/05/20(水) 19:04:30
WindowsでGauche-BoxなんだけどSwank

302 :デフォルトの名無しさん:2009/05/20(水) 19:40:03
入れれば幸せになれるかな。

303 :デフォルトの名無しさん:2009/05/20(水) 22:38:30
Emacs難しいなぁ・・・orz
invalid 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)

304 :デフォルトの名無しさん:2009/05/21(木) 00:28:30
Meadow + Slime は微妙らしい
ttp://www.lingr.com/room/common-lisp-jp/archives/2008/09/20
最後の 1/4 あたりまたは "Meadow+SLIME" 検索で

305 :デフォルトの名無しさん:2009/05/21(木) 00:51:07
ありがとうございます。ただ自分が頭悪いだけかと思ってました(*^ω^*)

306 :デフォルトの名無しさん:2009/05/21(木) 01:52:09
プログラマにしては表情豊かだな。
Lispをやると笑顔になるってか?

307 :デフォルトの名無しさん:2009/05/21(木) 02:02:20
\(^o^)/

308 :デフォルトの名無しさん:2009/05/21(木) 02:08:48
中村正三郎 乙

309 :デフォルトの名無しさん:2009/05/22(金) 09:13:05
人居ないと思ったらリンガーに行ったのか。

310 :デフォルトの名無しさん:2009/05/22(金) 14:33:04
ひょっとしてmaximaスレも他に移動してるのか

311 :デフォルトの名無しさん:2009/05/22(金) 16:07:40
ん? Lingrはとっくに終了したはずだが...

312 :デフォルトの名無しさん:2009/05/22(金) 16:23:46
いつからみんな、そんなに長崎ちゃんぽんが好きになったんだ……。

313 :デフォルトの名無しさん:2009/05/22(金) 17:02:41
IRCでいいじゃない

314 :デフォルトの名無しさん:2009/05/22(金) 20:42:38
>>310
そういうスレッドは他では下しか知らない。

最強!!数学ソフトウェア(maple, mathcad etc)
http://science6.2ch.net/test/read.cgi/math/1051275230/

315 :デフォルトの名無しさん:2009/05/22(金) 23:09:48
何で Scheme って評価順が未定義なんですか?
左からで何の不満もないと思うのですが。

316 :デフォルトの名無しさん:2009/05/22(金) 23:15:44
自由度があった方が最適化に都合がいいんじゃないかな。

たしかCも引数を評価する順序は決まってないんだよね。以前、仕事で
扱ったコードに評価順序を暗に決めてしまってたいたものがあって、
コンパイラのバージョンアップで評価順序が変わって動かなくなって
しまったことがある。つかそのデバッグをやらされた。

317 :デフォルトの名無しさん:2009/05/23(土) 00:18:50
>>316

遅延評価を積極的に持ち込むための布石として順序を未定
にしたんだと思ってた

処理系作る側から見れば, 引数をスタックに積む順番考えると
右側から評価するのが楽っちゃ楽だわな


318 :デフォルトの名無しさん:2009/05/23(土) 05:46:55
>>317
右からが楽になるのは、不定長引数で引数の数を知らなくてもcalleeが
スタックトップからのオフセットでn番目の引数にアクセスできるからじゃない?
引数の数が固定、もしくは引数の数も一緒に渡す場合は右からでも左からでも
変わらないでしょう。
Schemeの場合、左から評価して積んどいた方がrest引数をリストに畳む操作は楽。


319 :デフォルトの名無しさん:2009/05/23(土) 06:51:55
ところでなんでSchemeって
(f . x) で (apply f x) と同じ意味にしなかったの?

320 :デフォルトの名無しさん:2009/05/23(土) 06:56:43
わかりました
(f x y) は (f . (x y)) だからですね
ごめんなさい帰ります

321 :デフォルトの名無しさん:2009/05/23(土) 07:17:50
(^o^)ノシ

322 :デフォルトの名無しさん: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))ですよね?

323 :デフォルトの名無しさん:2009/05/23(土) 18:24:13
> ((lambda (y) y) (lambda (z) z))ではなく
> ((lambda (x) x) (lambda (z) z))
この二つを区別する必要はあるの?

324 :デフォルトの名無しさん:2009/05/23(土) 18:36:02
>>322
最左最内だと、まず(lambda (y) y) xここからだから正しい。
>>323
ウゼエ

325 :デフォルトの名無しさん:2009/05/23(土) 18:54:07
つーか最初の式内の(lambda (y) y)は何の意味もないだろ
ほんとに意味わかってやってんのか

326 :デフォルトの名無しさん:2009/05/23(土) 18:54:58
( ゚д゚)ポカーン

327 :デフォルトの名無しさん:2009/05/23(土) 19:09:35
gosh> ((lambda (y) y) 1)
1

328 :デフォルトの名無しさん:2009/05/23(土) 19:12:20
>>324
ありがとうございます。
用語が色々ありすぎて自身無かったので助かりました。

>>327 クマー

329 :デフォルトの名無しさん:2009/05/23(土) 19:14:29
で、2段階目はどうすんの?

330 :デフォルトの名無しさん:2009/05/23(土) 19:44:50
>>322
((lambda (x) (lambda (y) y) x) (lambda (z) z))

((lambda (x) ((lambda (y) y) x)) (lambda (z) z))
のコピペ誤り?

331 :デフォルトの名無しさん:2009/05/23(土) 20:05:50
>>330 コピペミスですね、すみません

さらに質問
以下の名古屋大の資料には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は最左最内戦略と最右最内戦略のどちらに相当するのでしょう?
直感的には最右最内に近いように思うのですが

また、類推からちょっと考えてみたのですが
最右最外簡約(あまり聞いたことがないが)と最左最外簡約というのは
同じ物ですよね。そういう用語があるかは別として


332 :デフォルトの名無しさん:2009/05/23(土) 20:25:39
普通値呼びは最左最内簡約だと思う
自分の不勉強なだけかもしれないけど最右最内簡約って聞いた事無い
カリー化のこともあるし右の項から簡約ってできるのかな?

333 :デフォルトの名無しさん:2009/05/23(土) 20:29:00
三行目は「できるのかなぁ?(できない気がする)」って意味ね


334 :デフォルトの名無しさん: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パターン


335 :デフォルトの名無しさん:2009/05/23(土) 21:36:19
そうか、ボケてた
β基の簡約手段自体は変わらないんだった
右の方のβ基から簡約するようにするだけだからあり得る話だ
関数適用の結合を右結合にするのと勘違いしてた

336 :デフォルトの名無しさん:2009/05/24(日) 00:33:52
I = λx. x として

I (I y (I y)) でテストすれば4パターン全部わかる。

337 :デフォルトの名無しさん:2009/05/24(日) 01:45:16
ここってDrSchemeも扱ってますか?
大学で使ってるんですが実行画面のキャプチャが出来なくて困ってます。OSはwindowsです。

338 :デフォルトの名無しさん:2009/05/24(日) 09:12:48
>>336 その例だと(I y (I y))とI ((I y) y)の2パターンにしかならなくないですか

339 :デフォルトの名無しさん:2009/05/24(日) 10:40:39
最内
I ((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

340 :デフォルトの名無しさん:2009/05/24(日) 11:13:54
>>337
グラボのアクセラレータによる画面は普通キャプチャできないけど、その系かな?

341 :デフォルトの名無しさん:2009/05/24(日) 12:04:05
>>341
パソコン初心者でよくわからないんですスイマセン。
Macだとcommand+shift+4とスペースバーでポインタがカメラになった後実行画面を選択するみたいなんですがwindowsにはそれにあたるものはないんですかね。

342 :デフォルトの名無しさん:2009/05/24(日) 12:05:26
Windows板の初心者スレで聞け

343 :デフォルトの名無しさん:2009/05/24(日) 13:18:38
PrintScreenボタン押せばいいんじゃね?

344 :デフォルトの名無しさん:2009/05/24(日) 13:37:26
君、軽くイラっとさせてるのに気づかないタイプでしょ?

345 :デフォルトの名無しさん:2009/05/24(日) 17:03:03
>>339
なるほど、最外も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^(木の深さ)のパターン
考えられるようにも思います
ややこしいですが

346 :デフォルトの名無しさん:2009/05/24(日) 17:05:08
(λx.x M) yは(λx.(x M)) yと書くべきでした。I Mとは別の意味です

347 :デフォルトの名無しさん:2009/05/24(日) 19:19:37
>>345
左右とか内外と言うのは、最初に簡約する箇所ではなく、最初に探す箇所です。
最初に探した箇所で簡約できなければ、別の箇所から簡約を始めて良いです。

348 :デフォルトの名無しさん:2009/05/24(日) 20:32:11
左右とか内外と言うのは、最初に探す個所ではなく、簡約する場所の探し方です。

349 :デフォルトの名無しさん:2009/05/25(月) 13:13:59
>>314
【数式処理システム】 Maxima 【Common Lisp】
http://science6.2ch.net/test/read.cgi/math/1220340695/

350 :デフォルトの名無しさん:2009/05/25(月) 19:44:09
>>347-348
ありがとうございます。やっと理解出来ました。
あと、関連して良サイトみっけました(Mosckw MLの人?)
ttp://ellemose.dina.kvl.dk/~sestoft/lamreduce/lamframes.html

call-by-valueとapplicative orderってそもそも違うものなんですね
・いつlet束縛を展開するか(ζ変換?)
・どの展開形までもっていくか(WHNFや正規形など)

新しい用語が出てきて結果としては謎が深まりましたが
この辺、まとめてある資料ってないですかね・・
applicativeとかnormalとか言われるより
leftmost outermostとかで整理してある方が私には理解しやすいです

後、大雑把に言えば最右最内/最左最内の簡約は、
プログラミング言語では関数引数をどちら側から評価するか、
というだけの違いに思えてきました

351 :デフォルトの名無しさん:2009/05/25(月) 20:30:38
Arc のアイディアってすごい惹かれるんだけど、どう思いますか?
lambda が fn だったり let とか cond も 極力簡素にするスタイル。
[+ _ 10] は cut より直感的だけど、まぁ cut でも十分かな。
scheme で真似しようと思っけど
hash table や 文字列を手続き的に呼んだりするのは無理だよね。

352 :デフォルトの名無しさん:2009/05/25(月) 20:59:05
> hash table や 文字列を手続き的に呼んだりするのは無理だよね。
Gaucheなら出来ると思うけど。

353 :デフォルトの名無しさん:2009/05/25(月) 21:17:38
object-apply メソッドな。
でも、あれって評価時にディスパッチされるんだよね?
性能的にはあんまりイケてないかも。
多用することは想定してないじゃろ

354 :デフォルトの名無しさん:2009/05/25(月) 21:18:54
スマンスマン。
なんか勘違いしてたわ

355 :デフォルトの名無しさん:2009/05/25(月) 22:44:15
>>353
これか。http://practical-scheme.net/gauche/man/gauche-refj_54.html#SEC97
本当だ、できるね。Gauche使いになろうっと。
教えてくれてありがとう。

356 :デフォルトの名無しさん:2009/05/25(月) 22:52:57
>>351
http://pc12.2ch.net/test/read.cgi/tech/1202098949/

357 :デフォルトの名無しさん:2009/05/26(火) 02:11:57
>>350
関数や関数へのポインタを扱える言語、
無名関数を扱える、動的に生成できる言語だと
引数だけじゃなくて、「関数」評価もちょっと意味が変ってきますよね。

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

358 :デフォルトの名無しさん:2009/05/30(土) 19:28:54
>>357
ありがとうございます。
ちょっとずつ読み始めました&Miranda処理系入れました
しかし、大御所は太っ腹ですね

Super Combinatorって名前からして面白そうですが
そこまで行くのにはまだしばらくかかりそうです
あと、読んだ所までですが、
β変換自体の実装にα変換が必要ってのを知り
自分のβ変換プログラムのバグを発見してしまいました
いい本教えてくれてありがとう

359 :デフォルトの名無しさん:2009/06/01(月) 11:00:37
comp.lang.lispのスパムを無視してくれるブラウザーみたいなのないでしょうか

360 :デフォルトの名無しさん:2009/06/01(月) 11:32:39
>>358
その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

361 :デフォルトの名無しさん:2009/06/01(月) 11:53:39
>>360
>α変換が必要
って書いてあるじゃん。それで合ってるんだから、変なこと教えるなよ

362 :デフォルトの名無しさん:2009/06/01(月) 16:24:30
lambda liftingって酷い名前だな
少なくとも自由変数と何か関係あるぐらいは一目でわかるように名前つけろよ・・・

363 :デフォルトの名無しさん:2009/06/02(火) 22:30:25
>>358

自分も前にラムダ式を簡約するものをSchemeで書いたことがある。
高橋先生の本を読みながらやってたんだけど完全にはできなかった。
Arcのスレにすっごく巧み書かれたのがあったと思う。Arcが発表されて
まもなくだったので驚いたよ。

364 :デフォルトの名無しさん:2009/06/02(火) 22:33:44
lambda liftingってscmのコンパイラhobbitでも使われているっていうアレかな?

365 :デフォルトの名無しさん:2009/06/02(火) 22:36:22
コンビネータとかって実用的に価値はあるの?

366 :デフォルトの名無しさん:2009/06/02(火) 23:31:25
なんかlambda droppingというのもあるみたいだ・・・もうワケワカ(w

367 :デフォルトの名無しさん:2009/06/03(水) 02:47:04
実際にコードに適用させると副作用とかあるからそのままじゃいかんよ

368 :デフォルトの名無しさん:2009/06/04(木) 06:47:01
>>363
これ?
http://natal.web.fc2.com/lambda.arc.txt

369 :デフォルトの名無しさん:2009/06/04(木) 10:45:18
schemeからCへの変換は、わりと可読性残したままできるものなのでしょうか

370 :デフォルトの名無しさん:2009/06/04(木) 12:01:34
継続呼び出しをどう扱うかでえらいことに

371 :デフォルトの名無しさん:2009/06/06(土) 12:09:16
Gaucheを使っているのですが、
渡された物がatomかどうか判別する関数って何でしょうか?
CommonLispから来たのであまりわからないのですが
atom?やatompが見当たらないような気がするのですが

372 :デフォルトの名無しさん:2009/06/06(土) 12:16:25
>>371
(define (atom? x)(not (pair? x)))


373 :デフォルトの名無しさん:2009/06/06(土) 12:55:21
ペア (コンス) も他の型と同様に型の一種でしかない。
「整数ではない」とか「文字列ではない」とかいったことを調べる述語が無いのに
(それとも CommonLisp では有ったりする?)
「ペアではない」ということだけ調べる述語があると不自然、
というような価値観が Scheme では有るように思う。
かといってミニマムな仕様を好む Scheme で全部の述語に否定バージョンを用意するのは論外だし。

374 :371:2009/06/06(土) 13:55:12
>>373
たしかCommonLispでは
integerpとかstringpとかが有った気がします。


375 :デフォルトの名無しさん:2009/06/06(土) 14:16:04
Schemeには政権を取ろうという意欲がない。
何故なら一方にCLという巨峰があり、汚い仕事でも引き受けてくれるからだ。
しかし、R6RSでは政権への意欲を見せた。
だが支持者からも反感を買い、最近は友愛の精神などとわけの分からない事を言い始めているが
結局は小沢の傀儡だろうとの批判が出ている。

376 :デフォルトの名無しさん:2009/06/06(土) 14:22:29
>>374
> integerpとかstringpとかが有った

atom? は pair? の逆だろ?
integerp の逆とかが有るか? っていう話なんだけど。

377 :371:2009/06/06(土) 14:34:31
>>376
なるほど、よくわかりました。
Lispに置けるatomという概念がまだ良くわかっていなくて
了解しました。なるほど、Schemeはpair?の逆ということですね。
Common Lispはatomも属性の一つと認識してる部分がある気がします。

378 :デフォルトの名無しさん:2009/06/06(土) 14:49:46
まー、atom処理したければ (if (pair? ... の else でいいし、
単独で使いたければ if じゃなく unless 使えばいい。
もちろん not つかったっていい。

379 :デフォルトの名無しさん:2009/06/06(土) 23:24:24
vectorとかのコンテナもatomなのはおかしいと思うのはおれだけ?
いやatomの定義が何なのか知らないので、おれの妄想の意見だが

380 :デフォルトの名無しさん:2009/06/06(土) 23:27:18
えっ

381 :デフォルトの名無しさん:2009/06/06(土) 23:36:37
コンテナがpairしかないならいいと思うんだわ>>376の意見は
でもよお


382 :デフォルトの名無しさん:2009/06/06(土) 23:38:55
(container? (vector 1 2 3)) => #t
(container? (cons 1 2)) => #t
(define (atom o) (not (container? o)))
なら納得なんだわ
schemeの審美眼的にこの辺ほったかかしなのが謎だと思うんだわ


383 :デフォルトの名無しさん:2009/06/06(土) 23:58:25
大抵の解釈では
atom=それ以上分解することができないもの
だよな?

vector(やstringも?)分類上コンテナだと思うんだわ

じゃあsymbolはどうなる?とか色々疑問は尽きない

384 :デフォルトの名無しさん:2009/06/07(日) 00:11:13
仰るとおりで

385 :デフォルトの名無しさん:2009/06/07(日) 00:12:18
pairと2要素を持つベクタとの区別は?

386 :デフォルトの名無しさん:2009/06/07(日) 00:15:22
>>385
コンテナかどうかの話なのに、それがどんなコンテナか?
なんて区別の必要があるか?
必要なら個別にpair?とか呼べば?

387 :デフォルトの名無しさん:2009/06/07(日) 00:25:20
俺はvectorがなかった頃に>>372が定石化してしまったから、
そのままatom?がない状態になっているのかと思っていた。

388 :デフォルトの名無しさん:2009/06/07(日) 00:29:01
>>360
まだ全然読めてないですが・・
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))

389 :デフォルトの名無しさん:2009/06/07(日) 04:11:11
>>388
>>>368のArcのプログラム見てみましたが
>とても短いのに、そのままschemeに移植したら動いたので感動しました

すごくうまいよね。こりゃ、かなわんなぁと。
自分は素朴な方法で教科書どおりに書いていました。


390 :デフォルトの名無しさん:2009/06/07(日) 10:00:42
すごい特殊な場合だけα変換が必要みたいに思いがちだけど
疑わしきは全部α変換しておけば確実だということと、

SICPに出てくる環境モデルのようなものが
λ計算の変数の置換にも使えるということがポイントかな。

391 :デフォルトの名無しさん:2009/06/07(日) 19:29:41
>>382
むしろ決められないから atom を定義してないんじゃね?

392 :デフォルトの名無しさん:2009/06/07(日) 19:34:50
>>382
文字列はどうするの?

393 :デフォルトの名無しさん:2009/06/08(月) 00:50:14
文字列→ char []
vector → void *[]

394 :デフォルトの名無しさん:2009/06/08(月) 01:56:34
極端な話、整数だってビットに分解できるわけだしなぁ。
ベクタの例をとってみても 「ペアでない」=「アトム」
とは言えないという意見は納得できる。
でも、その方向でつきつめていけばアトムと
言えるのはビットだけってことにならないか?
しかし、更に言えばビットで表現するのは実装の都合であって、
Scheme の意味論的にはそんなこと知ったことじゃないかもしれない。
何を以ってアトムとするかは状況によると思う。

395 :デフォルトの名無しさん:2009/06/08(月) 02:31:07
なんで atom という common lisp の用語の話で scheme が出てきてるんだ?

396 :デフォルトの名無しさん:2009/06/08(月) 10:53:07
実は AsTOMachine の略だったりして

397 :デフォルトの名無しさん:2009/06/08(月) 11:48:54
>>394
正直、極端な話はいらない

398 :デフォルトの名無しさん:2009/06/08(月) 12:00:17
common lispで書かれた数値計算のプログラムをStalinで動かしたいけど
common lispのプログラム中にatomがあるので、どう翻訳しようか悩むことはある


399 :デフォルトの名無しさん:2009/06/08(月) 12:14:49
それって悩むようなことかな・・

400 :デフォルトの名無しさん:2009/06/08(月) 17:09:16
フォートランをcommon lispに変換したコードとか読める気がしない

401 :デフォルトの名無しさん:2009/06/08(月) 17:15:53
Usenet上のcomp.lang.schemeをUsenetリーダーのアプリケーションから
読みたいのですが、newssaverというのは何処に設定すれば良いのでしょうか?
Googleグループは便利なのですが、ニュースリーダーからアクセスできるともっと楽なのです
よろしくおねがいします。

402 :デフォルトの名無しさん:2009/06/08(月) 21:40:35
>>401
gmane.org

403 :デフォルトの名無しさん:2009/06/08(月) 22:04:03
>>402
>gmane.org
ありがとう御座います。
comp.lang.schemeが見つからんとです。

404 :デフォルトの名無しさん:2009/06/09(火) 23:08:23
ところでリスパーはどんな音楽を聴くニダ?

405 :デフォルトの名無しさん:2009/06/09(火) 23:39:57
バッハだろう

406 :デフォルトの名無しさん:2009/06/09(火) 23:53:03
いけてるリスパーはバッハなんか聴くんだ。
エレクトロニキスタの俺がバッハに耐えられるかな。

407 :デフォルトの名無しさん:2009/06/10(水) 00:16:07
アニソン一筋30年〜♪

408 :デフォルトの名無しさん:2009/06/10(水) 00:18:00
なんでも聞くぞ
各種民族音楽(日本の民謡も含む)からクラシック・シャンソン・ジャズ・ロック


409 :デフォルトの名無しさん:2009/06/10(水) 00:19:16
リストじゃないの、やっぱり

410 :デフォルトの名無しさん:2009/06/10(水) 00:22:46
>ところでリスパーはどんな音楽を聴くニダ?
ここ20年音楽聞いてないかも


411 :デフォルトの名無しさん:2009/06/10(水) 00:42:11
>>409
うまい

412 :デフォルトの名無しさん:2009/06/10(水) 01:03:52
>>410
それでも括弧の奏でる旋律を感じたことがあるはずだ

413 :デフォルトの名無しさん:2009/06/10(水) 01:06:08
>>409
それニダ!!

414 :デフォルトの名無しさん:2009/06/10(水) 06:58:05
最近楽譜見るとダカーポやセーニョダルセーニョが
call/ccに脳内変換されるようになってきた。

415 :デフォルトの名無しさん:2009/06/10(水) 11:13:34
楽譜も読めないし継続がいまだにわからない俺が来ましたよ。
やっぱりLisperならヒップホップだよね?

416 :デフォルトの名無しさん:2009/06/10(水) 11:36:44
そろそろ雑談スレでも立てようか

417 :デフォルトの名無しさん:2009/06/10(水) 12:40:43
どっかでgsllが遅いって言ってた人いたけど
行列の配列のcreate deleteをlisp側でやると遅いってことでいいの?
cffi使うなら全部cで処理したほうがましってこと?

418 :デフォルトの名無しさん:2009/06/10(水) 20:10:14
scheme/gaucheでscanlに相当する関数ってありますか?

419 :デフォルトの名無しさん:2009/06/10(水) 20:12:42
>>416
こっちを再利用してもいいんじゃない?
立ててもいいと思うけど
【GNU】スクリプト言語 Guile【scheme】
http://pc12.2ch.net/test/read.cgi/tech/1239985829/

420 :デフォルトの名無しさん:2009/06/10(水) 21:48:44
つくるなら、
【色即是空 空即是色】Lisperのぼやきサロン【Lisp S式】
  とでもしといて w w w

421 :デフォルトの名無しさん:2009/06/11(木) 01:03:20
マ板に雑談向きなスレあったよーな

422 :デフォルトの名無しさん:2009/06/11(木) 01:06:33
>>420
なんでLispスレ限定なんだ

423 :デフォルトの名無しさん:2009/06/11(木) 01:18:51
マ板のスレってこんなのしかないよw
Lisperこそ真のプログラマーよ!!
http://pc11.2ch.net/test/read.cgi/prog/1175791979/
彼氏にするならだんぜんLisp使いかなぁ
http://pc11.2ch.net/test/read.cgi/prog/1241612383/

424 :デフォルトの名無しさん:2009/06/11(木) 07:30:10
>>422
schemerにとって不満? lisperと書けば含まれていると思ったけど。


425 :デフォルトの名無しさん:2009/06/11(木) 08:44:11
そういう意味じゃないと思うんだ。

426 :デフォルトの名無しさん:2009/06/11(木) 10:36:16
SchemeはLispに非ず、Algolなのです! by 黒ちゃん

427 :デフォルトの名無しさん:2009/06/11(木) 10:54:23
俺としては雑談スレというか、俺Lispの細かい仕様を相談したり
プチ自慢したり遍歴ダベったりするスレが欲しいかな。
少々次元が低くても全然構わない空気の。

428 :デフォルトの名無しさん:2009/06/11(木) 12:34:42
Lisperこそ真のプログラマーよ!!

を乗っ取りする


429 :デフォルトの名無しさん:2009/06/11(木) 21:06:16
スレ乱立しすぎだろ。Guileスレも結局、単発で終わったし。
本スレも過疎気味なのに、さらに分離すると…追っかけるの面倒

430 :デフォルトの名無しさん:2009/06/11(木) 21:22:02
おまいらたまにはArcスレの事も思い出してやってください。

431 :デフォルトの名無しさん:2009/06/11(木) 21:23:45
>>427
過疎っているのと、リアルが忙しくてかまっていられないだけだと思うよ。
低次元の話題は大歓迎なんだが。

というか、(Python) --.> guile --> lispと移行しようとがんばっているんだけど、sbclのasdf on gentooが動かなくて、パッケージとか、ライブラリが使えねーww
必要なログとか、晒すんで助けてください。

元カノのPython子とよりを戻そうかと真剣に考えたくなる。
でも、長年連れ添うなら、Lispのマクロって便利そうだよね。emacsのslimeも軽くて便利そうだし。

432 :デフォルトの名無しさん:2009/06/11(木) 21:55:30
移行とかいわず、全部使えばいいと思うよ。
どんなエラーでるか、入門Common Lispスレのほうで晒してくれたらみたげるよ。

俺は仕事でSQLをいじるとPrologがいいなぁと思い、JavaをいじるとLispがいいなぁと思う。
しかしPrologをいじると、RDBMSのイロイロやっぱ必要だよな…と思い直し、
Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。

433 :デフォルトの名無しさん:2009/06/11(木) 22:06:01
Gaucheを使っているのですが、
schemeのプログラムってどういう風に配布すれば良いのでしょうか?
ユーザーにgaucheやパッケージ依存ならパッケージのインストールまでさせるべきでしょうか?
すこし、敷居が高い気がするのですが...

それとも、./configure && make && make installでバックグラウンドでgoshやパッケージを
インストールする方式なのでしょうか?
みなさまの方法をご教授ください。

434 :デフォルトの名無しさん:2009/06/11(木) 22:06:54
並列処理でバーッと行こうぜバーッと。

435 :デフォルトの名無しさん:2009/06/11(木) 22:12:02
>>433
NSISでインストーラーを書いてGaucheごと配布

436 :デフォルトの名無しさん:2009/06/11(木) 22:44:57
>Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
python on lisp

437 :デフォルトの名無しさん:2009/06/11(木) 23:34:04
>>433
そういう用途ならPLTオススメ。

Gaucheでやるなら、>>435みたいに、本体ごと配布するのが面倒がない。
バージョンの違いとかで悩まなくていいし。

438 :デフォルトの名無しさん:2009/06/11(木) 23:52:58
Franzとか商用サポートあるじゃないか!
仕事ではとても言い出せないけど

439 :デフォルトの名無しさん:2009/06/12(金) 00:20:36
>>432
Common lispスレのほうに投稿しておきました。よろしくお願いします。
>移行とかいわず、全部使えばいいと思うよ。
サンデープログラマなんでさすがに無理です。でも、毛嫌いしているわけでなく、やるしかないような状況になったらやるんですが。
>Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
時間に特別制約なくて、Lispでもあったほうが便利ならLisperなら単機能・簡易版でいいので作りたいところですね。(一応、理想だけは高く)
lispって糊言語的な使われ方って多いんですか?

440 :デフォルトの名無しさん:2009/06/12(金) 01:20:00
>□Stalin: 激烈な最適化を施す処理系。人間の書くCコードより速いという噂。
> ttp://cobweb.ecn.purdue.edu/~qobi/software.html

ここにおいてあるQobiといかいうのscheme -> c 変換なのかな?
他にもいろいろおいてあるけど便利そうなの結構ありそう

441 :デフォルトの名無しさん:2009/06/12(金) 02:25:36
雑談も良いけど、隔月刊か季刊でいいから丸ごとLispだけの雑誌が欲しいなぁ。

シローさんが連載持ったり、グレアムおじさんの文を翻訳したのとかも載せたり。
黒田さんの「黒板に書け!」みたいな記事とか。
中村正三郎さんがAS/400絶賛する連載記事・・・ってこれは関係ないかw

442 :デフォルトの名無しさん:2009/06/12(金) 11:51:46
Scheme->C というコンパイラがあって、Stalin も最初はそれで記述されてた
たぶんそのコンパイラ用のライブラリかと

443 :デフォルトの名無しさん:2009/06/12(金) 12:02:42
schemeでslime並みにいたりれりつくせりな環境ってどれになるんでしょうか?

444 :デフォルトの名無しさん:2009/06/12(金) 12:08:50
>>443
vi

445 :デフォルトの名無しさん:2009/06/12(金) 17:01:39
>>443
マジレスすればPLTSchemeになるんじゃないかと思う。

446 :デフォルトの名無しさん:2009/06/12(金) 18:03:01
>>442
どこかでschemeにswank移植してたぞ

447 :デフォルトの名無しさん:2009/06/12(金) 19:23:16
雑誌Lisp 100% が欲しいってか?rubyあたりではそんなムックは出てたね。
渋谷の連中に期待かな。


448 :デフォルトの名無しさん:2009/06/12(金) 21:35:07
渋谷の連中って何

449 :デフォルトの名無しさん:2009/06/12(金) 22:18:01
shibuya.lisp

450 :デフォルトの名無しさん:2009/06/12(金) 23:16:11
創刊当時の月刊I/Oみたいな雰囲気でLisp/Schemeの記事満載の雑誌が欲しい。
無いもんはゲリラ的に自分たちで作っちゃうもんね〜というノリが懐かしい。
「Schemeで人工知能を」「Lispでロボット犬を制御する」なんてタイトルでさ。


451 :デフォルトの名無しさん:2009/06/12(金) 23:32:19
shibuya.lispで会誌みたいなのをつくって見れば良いのでは
開催時に配布とか、プログラマの人も暇じゃないけど
今のshibuya.lispの開催間隔を見る限り記事一つ二つなら
かけるぐらいの期間だろうから

452 :デフォルトの名無しさん:2009/06/12(金) 23:51:12
>>450
> 創刊当時の月刊I/Oみたいな雰囲気でLisp/Schemeの記事満載の雑誌が欲しい。
月刊I/Oみたいな雰囲気というのがよくわからないけど。
雑誌の意味ってどのくらいあるの? すごくがんばって、季刊誌だろうから、タイムリーさは狙えないよ。

Webのほうがタイムリーさがあるから、Webでいいし。
本という形式にこだわるなら、専門書でいいと思うしなあ。


やっぱり、あれか、ノスタルジーというやつか。

453 :デフォルトの名無しさん:2009/06/13(土) 00:15:26
連載「Lispで書くMultics」

454 :デフォルトの名無しさん:2009/06/13(土) 00:33:26
>>452
興味の無い記事、専門外の記事も一緒に付いてくるのが技術雑誌のいいところなんだよ

455 :デフォルトの名無しさん:2009/06/13(土) 00:40:28
Lispの雑誌なんて読んでたら女の子がうざいほど寄ってきて困るだろ。

456 :デフォルトの名無しさん:2009/06/13(土) 00:52:26
>>454
ものすごく質が高ければ買うかもしれないけどなあ。

最近は、定期購読している雑誌はないし、新聞もWebで済ませちゃっているなあ。
本当は紙媒体で読みたいんだけどなあ。

457 :デフォルトの名無しさん:2009/06/13(土) 01:06:38
興味なくても専門外でも、専門技術の記事で埋まってる雑誌なら喜んで買うぜ。
半分広告な雑誌ならノーサンキュー。

458 :デフォルトの名無しさん:2009/06/13(土) 01:22:58
Lisp関連の学会の論文集読め。

459 :デフォルトの名無しさん:2009/06/13(土) 01:48:35
論文集ほど堅くなくってのがミソなんじゃないかな?
コミケとかで売ってくれないかなぁ。

460 :デフォルトの名無しさん:2009/06/13(土) 02:12:56
comp.lang.lispで十分じゃね
しかも雑誌みたいに広告もある

461 :デフォルトの名無しさん:2009/06/13(土) 03:14:28
Oh!MZやOh!Xはいい雑誌だったな
これでレポートが書けるとか言われたもんだ
今はこんな雑誌出せないのかなぁ

462 :デフォルトの名無しさん:2009/06/13(土) 08:15:48
最近、BeagleBoard($149)を使ってるんだがGuileが標準で入ってる。

OSはDebian/Ubuntu/Handheld Mojo/Angstrom/Androidのどれでもおk。
エディタはもちろんVim。
消費電力はたったの2W。Atomでも30Wぐらい喰うのを考えると信じられない。
ファンレスなので静か。

http://dkc1.digikey.com/us/en/mkt/beagleboard.html

知らない人は日経Linuxの7月号を読んでみて。

463 :デフォルトの名無しさん:2009/06/13(土) 10:28:00
副作用がある関数の名前に ! を付けるのはナイスな慣習だと思うよね?
マクロも名前だけでパッと見で分かるようにしたらいいと思うんだ。
だって、関数と違って引数が評価されないかもしれないんだよ。
例えば先頭を大文字にするとかがいいかな。

464 :デフォルトの名無しさん:2009/06/13(土) 10:54:20
季刊 Lisp!

465 :デフォルトの名無しさん:2009/06/13(土) 11:42:37
>>443
quack.el

466 :デフォルトの名無しさん:2009/06/13(土) 12:21:12
活動資金のない渋谷には本は難しいんじゃないかな。鯖とも手弁当なんでしょ。

>>463
年季入ったLisperに言わせると、!や?は発音にこまるからという話も。
「reverse!」「reverseね」「ちがうreverse!」「reverse?」「えっ」「えっ」

467 :デフォルトの名無しさん:2009/06/13(土) 13:19:07
! 「あんせーふ」
? 「ぷれでぃけーと」

reverse! 「りばーすあんせーふ」
reverse? 「りばーすぷれでぃけーと」

468 :デフォルトの名無しさん:2009/06/13(土) 13:36:48
>>466
手弁当のほうが何の制約もなく、無闇に成果を出す必要がなくていいと思うが。

469 :デフォルトの名無しさん:2009/06/13(土) 13:40:10
let* 「れっとあぬす」

470 :デフォルトの名無しさん:2009/06/13(土) 13:42:16
記事すらほとんどないのに
Lispの専門誌なんて出るわけないだろw

471 :デフォルトの名無しさん:2009/06/13(土) 13:50:21
*はスターって読んでる

472 :デフォルトの名無しさん:2009/06/13(土) 13:51:21
話題なんていくらでもある。


473 :デフォルトの名無しさん:2009/06/13(土) 14:02:24
論文みたいにかっちり書かなくてもいいなら記事はあるでしょ。


474 :デフォルトの名無しさん:2009/06/13(土) 14:03:35
記事にしないと話題にならない。

475 :デフォルトの名無しさん:2009/06/13(土) 14:56:01
すいません、プログラッミングGaucheで勉強しよと思ってるんですが、
最初の方で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)

476 :デフォルトの名無しさん:2009/06/13(土) 14:59:25
何ができませんのか?

477 :デフォルトの名無しさん:2009/06/13(土) 15:04:44
>>476さん
C-c s で、そんなコマンドありませんって言われますorz

478 :デフォルトの名無しさん:2009/06/13(土) 15:14:31
"\C-c s"ならC-c スペース sって意味になるから
多分C-c スペース sと入力すれば動く筈
C-c sにしたけりゃ"\C-c s"を”\C-cs"にしてみて

479 :デフォルトの名無しさん:2009/06/13(土) 15:35:25
>>478さん
ありがとうございます!!
御指摘いただいた箇所をなおしたらできました。
あと、先頭のutf-8のとこもおかしかったみたいでそこがよく分かりません
まじ感謝です。

480 :デフォルトの名無しさん:2009/06/13(土) 16:11:07
>>479
もしWindowsならGaucheboxを使えばいいと思うよ。
http://sourceforge.net/project/showfiles.php?group_id=25227&package_id=275266&release_id=639668


481 :デフォルトの名無しさん:2009/06/13(土) 16:18:01
A*アルゴリズムを使いたいけど実装方法がわかりません。
誰か代りに実装して


482 :デフォルトの名無しさん:2009/06/13(土) 23:23:57
AIMAのサンプル見れ

483 :デフォルトの名無しさん:2009/06/14(日) 04:38:57
(define a '(1 2 3))
と定義して
(list 0 `,@a)
は駄目なんですね。できてもよさそうなんだけどなぁ

484 :デフォルトの名無しさん:2009/06/14(日) 06:33:38
@ってなに?

485 :デフォルトの名無しさん:2009/06/14(日) 07:06:45
`(list 0 ,@a)






父さん・・・酸素欠乏症に罹って・・

486 :デフォルトの名無しさん:2009/06/14(日) 07:13:51
>>483
perl では list(0, @a) とできますが
lisp 系では (apply list 0 a) と書きますね

487 :デフォルトの名無しさん:2009/06/14(日) 12:05:22
>>486
あ、こういうときapplyか。ありがとう。
でも apply より (list 0 `,@a) の方が直截的で、何がやりたかったか明確じゃないですか。
これを許すとまずい事があるのかな。
apply や funcall 使うのがあんまり美しくないから
common lisp より scheme って人も結構いると思うんだよなぁ。

>>485
それだと (list 0 1 2 3 4) が返ってきちゃうよ。

488 :デフォルトの名無しさん:2009/06/14(日) 12:17:18
Common Lispでやりたいのか、Schemeでやりたいのか
どういう結果が欲しいか
はっきり書かないと

489 :デフォルトの名無しさん:2009/06/14(日) 12:26:27
>>488
ごめんなさい、最初に書いてなかった。schemeです。

490 :デフォルトの名無しさん:2009/06/14(日) 12:36:51
>>487
> でも apply より (list 0 `,@a) の方が直截的で、何がやりたかったか明確じゃないですか。

そうか?

491 :デフォルトの名無しさん:2009/06/14(日) 12:41:51
(0 1 2 3) がほしかったら`(0 ,@a)だな


492 :デフォルトの名無しさん:2009/06/14(日) 12:42:29
俺は`(0 ,@a)ってやるな
しかし、applyこんな風に使えるんだな

493 :デフォルトの名無しさん:2009/06/14(日) 12:50:34
ちなみに
`(0 ,@a) == `(0 . ,a) == (cons 0 a) == (apply list 0 a)
パイソニアンが見たら青筋たてそうだな(笑

494 :493:2009/06/14(日) 12:55:30
あ、見た目が同じだけどリストの構造は違うものになるんだった。すまん。

495 :デフォルトの名無しさん:2009/06/14(日) 13:17:38
>>491-492
リストが欲しい時はそれが自然ですね。
他の関数の引数に展開したい時は apply で我慢するかぁ。

>>490
違う?要は apply があんま好きじゃないってだけなんだけど。
scheme だと ((car (list + -)) 1 2) ができるって知った時はナイス!って思った。

496 :デフォルトの名無しさん:2009/06/14(日) 13:26:59
>>494 仲間はずれはapplyで作ったやつ?

497 :デフォルトの名無しさん:2009/06/14(日) 17:07:32
(append '(0) a)

498 :デフォルトの名無しさん:2009/06/14(日) 21:49:52
>>495
perl知らないせいか (list 0 `,@a) じゃ何がやりたかったかさっぱりわからなかった。
aの中身は実行時にしか決定されないからコンパイルするとlistでなくapplyが
呼ばれる。ソースコードに書いていないのに。むしろわかりにくい。

499 :デフォルトの名無しさん:2009/06/14(日) 22:53:09
apply使うと損した気分になったり不愉快になる

500 :デフォルトの名無しさん:2009/06/14(日) 23:12:44
病院へ池

501 :デフォルトの名無しさん:2009/06/14(日) 23:29:34
Applyが嫌いならMicroSoftyなら良いのか?

502 :495:2009/06/14(日) 23:53:15
>>498
俺だって perl 知らないよ。

えー、分かりやすいよ。
apply って大体にして、scheme では変数をリストの先頭に置いて関数を呼び出せるんだから
実質、この用途 (リストに格納されている要素を引数として関数に渡す)
のためだけの関数でしょ?
`( ,@a) で展開できるんだから `,@a も展開できたっていいじゃん。
apply なんて不要になるよ。

503 :デフォルトの名無しさん:2009/06/15(月) 00:15:45
quasiquote をとびこえて更に外側の括弧が表すリストの一部になるというのはダサいだろ。
list の場合だったらともかく、マクロだったらどう展開されるやら想像がつかん。
かと言ってマクロ展開より先にスプライシングするわけにもいかんし。

504 :デフォルトの名無しさん:2009/06/15(月) 00:30:36
>>503
quasiquote の展開はリード時にやんなきゃ駄目じゃない?
とはいえリード時には関数かマクロかわからないしなあ。

確かに、単純な場合にはよさげにみえるけど、
ちょっと入り組んだことになっただけで落とし穴だらけになりそうだね。


505 :デフォルトの名無しさん:2009/06/15(月) 00:41:00
aがリストかどうかもわからん

506 :502:2009/06/15(月) 01:03:52
>>503
あー、マクロ内で使われるとまずいのね。確かに。
apply だったら自動的に関数only だからそこは大丈夫だったのか。
んじゃ、マクロ内では `,@ は自粛でいいじゃんw。駄目?
だって apply も 関数にしか適用できないんだからお相子だって

507 :502:2009/06/15(月) 01:08:33
>>505
それはこれに限らず ,@ 全てが受ける制約じゃん

508 :デフォルトの名無しさん:2009/06/15(月) 01:10:58
まあ、おそらく自分よりはるかに頭の良い人が必要だと思って
残してある機能なわけだから、、、と俺なら考えるかな。

509 :デフォルトの名無しさん:2009/06/15(月) 01:23:33
>>506
そろそろ実装方針を示してはくれんか。

510 :デフォルトの名無しさん:2009/06/15(月) 02:28:17
>>508
paul 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をいじればできるのかな。どうすりゃできるだろ

511 :デフォルトの名無しさん:2009/06/15(月) 02:45:01
http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3AS%E5%BC%8F%E3%81%AE%E7%90%86%E7%94%B1
このページのapplyの項と同じ話題かな?

512 :デフォルトの名無しさん:2009/06/15(月) 06:18:44
盛り上がってるところ悪いんだけどマクロと関数を混同してるんじゃないかな。
(define (conc-len x) (apply + (map length x)))
の定義のように、applyの最終的な評価の際に使われる引数が式の読み込み時に
わかるという保証はないんだよ。,@じゃこの関数は定義できないでしょ?

513 :デフォルトの名無しさん:2009/06/15(月) 08:45:30
>>512
ごめん、よく分からない。
,@ って実行時に展開されないの?
(define (conc-len x) (+ `,@(map length x))) じゃ駄目?

514 :デフォルトの名無しさん:2009/06/15(月) 08:50:09
quasiquote まわりは全部 syntax だよ

515 :デフォルトの名無しさん:2009/06/15(月) 09:09:28
ttp://www.math.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC39
「コンマアットマークは、リストかベクタの<qqテンプレート>内部に書かなければならない」

516 :デフォルトの名無しさん:2009/06/15(月) 10:08:49
gosh> (car ',@x)
unquote-splicing

517 :デフォルトの名無しさん:2009/06/15(月) 10:54:36
分かりやすいといいつつ続く文章が説明に全くなっていない件について。
自分の脳内が世界の全てって人なんだろうなあ。

518 :デフォルトの名無しさん:2009/06/15(月) 11:41:03
>>517
えー、分かりやすいよ。
lisp って大体にして、言語を拡張できるのが売りなんだから
実質、この用途のためだけの言語でしょ?
perl で展開できるんだから lisp も展開できたっていいじゃん。
perl なんて不要になるよ。

519 :デフォルトの名無しさん:2009/06/15(月) 11:47:44
replのreadの段で,@を自分の思うように仕込めばいいじゃん


520 :デフォルトの名無しさん:2009/06/15(月) 12:12:38
>>518
> 実質、この用途のためだけの言語でしょ?

へー

521 :デフォルトの名無しさん:2009/06/15(月) 14:39:08
>>513
一言で言えばnoです。
マクロと関数の違いについて理解していますか?式の変換と評価の違いがわかりますか?

522 :デフォルトの名無しさん:2009/06/15(月) 15:12:54
backquoteは、
`(,x y ,z)と書くところを、
'(`x y `z)と書ければ、
'(x y z)との字面の対象性上は美しいが、
中を見なければquoteすら効率的に評価できなくなる。O(1)→O(n)

>>513もそうだが、"全体"の構造や評価に影響を与える"部分"があるのはよくない。

523 :デフォルトの名無しさん:2009/06/15(月) 17:37:21
Perlは展開「できる」というか、展開「しちゃう」言語なんだよな。
展開させないために、リファレンスという機能を使わなきゃいけない。

>>522
> "全体"の構造や評価に影響を与える"部分"があるのはよくない
ここ同意。美しくもないし、わかりやすくもないと思う。

そういう展開をさせたいという意志を、applyが一手に引き受けている現状のほうが、
俺には綺麗だし把握しやすい。

524 :デフォルトの名無しさん:2009/06/15(月) 19:11:38
どっちがいいかっていうことには主観的な部分もあるだろうけど、
少なくとも Lisp はこういう理由でこういう選択をした、ってことだ。

525 :513:2009/06/15(月) 20:26:30
>>517
確かに説明になってなかったね。すまん。

>>519
自分の外の括弧に展開させることなんてできないんじゃない?
やっぱやろうとしたら要素に `,@ がある括弧は apply に読み替えるって
動作が必要だから、処理系の実装になっちゃうから無理だな。
しかもそのチェックがコストだろうし。

>>521
,@ が実行時に展開してるように見えたから混同しちゃった。
どうやって ,@ は可変のリストを展開できるんだろうって思ったけど
たぶん apply に変換させてるだけなんだよね?

>>522-523
よくない派が多数か。んじゃやっぱあんまいけてないんだろうな。これはあきらめる。

526 :デフォルトの名無しさん:2009/06/15(月) 20:33:30
お前ずばり、昔来たquote判ってないちゃんだろ
ネタ提供ありがとう

527 :デフォルトの名無しさん:2009/06/15(月) 20:42:35
横レスだけど、quoteとか評価とかってなにげに難しいですよね。
本読んでCPSやYコンビネータはわかった気になったけど、
何時までもquoteや評価のあたりで何かモヤモヤしてる。

528 :デフォルトの名無しさん:2009/06/15(月) 22:30:15
>>525
あきらめるってのが良くわからないけど(まるでこのスレを起点に何かを動かすつもりだったみたいな)、
試しにそういう動作をするマイLispを作って遊んでみたらどう?
で、使ってみたらこんな感じだった、って報告を後日改めてここに書き込むとか。

529 :デフォルトの名無しさん:2009/06/16(火) 01:27:38
>>525
例えば psyntax には pure Scheme な quasiquote の実装があるから
眺めてみるといいんじゃない
ttp://www.cs.indiana.edu/chezscheme/syntax-case/

530 :デフォルトの名無しさん:2009/06/16(火) 03:53:44
>>526
その人とは違うよ。
>>528
そうだね。マイLisp作れたら面白そうだ。
汚いやり方でも少なくとも俺には合ってるからね。
俺がSICP読み終える頃には楽勝で実装できるんだろ、きっと。
>>529
quasiquoteは100行くらいか。
syntax だけじゃ多分無理だけど参考にするわ

531 :デフォルトの名無しさん:2009/06/16(火) 04:23:16
quasiquote って効率を考えずに実装するだけならば外側から順に再帰的に
consとappendに展開するマクロみたいな感じですむからそんなに難しくないと思う。

`@,で展開するのはもはやquasiquoteとは別の文法を導入しているような気が。
別にあっても悪くはないと思うけどもこれだけだと単なるapplyの中置演算子版みたいだし、
特殊な文法用意するのはlispらしくないし別にapplyつかえばいいじゃんということな気がする


532 :デフォルトの名無しさん:2009/06/16(火) 04:49:20
>>530
SICP読破を目指して本ばっかり読んで頭でっかちになるより、ちゃんと手を動かして
コードを書きつつ試行錯誤して正しい理解を身につけてほしいと思う今日この頃。
べつにトンチンカンなことを言ってスレを賑わすのが悪いと言ってるんじゃないだが、
本に書いてある意味論以外に、コードがどういう流れで処理されて実行結果に
たどり着くのかという流れを理解してから物を言った方がいいよ。

それとquasiquoteのオレサマ実装ぐらいSICPなんて読まんでもHaskellの48時間で
書くやつで誰でもできると思うけど。

533 :デフォルトの名無しさん:2009/06/16(火) 06:56:16
SICPは量は多いかもしれないが難解ではないよ。
本当に難しくなるのは、SICPで扱っていない枝葉末節が絡んできた時。

534 :デフォルトの名無しさん:2009/06/16(火) 07:53:23
しかしapplyも変な仕様だよな。
Schemeも同じ仕様なのはどういうわけだろ。
(append (list arg1 ...) args)をas isにすれば、
コンパイル時に余計なコンスセルを消費しないのは確かだけど、
余計なお世話のような気がする。
便利主義の昔のLispはまあいいとしても。

535 :デフォルトの名無しさん:2009/06/16(火) 09:08:38
彼は高校生くらいだろ
気持ちわかるよ
俺も滝に打たれるような気持ちでアセンブラ書いてた時期があったから
これが済んだらスーパープログラマーになってるはず、みたいなw
まあ無駄にはなってないけどさ

536 :デフォルトの名無しさん:2009/06/16(火) 19:15:53
http://codepad.org/g2dULeuu

537 :デフォルトの名無しさん:2009/06/16(火) 21:16:20
ふつう48時間かかるものが、
枝葉末節を知っているだけで生産性が100倍以上になるわけだ。

538 :530:2009/06/16(火) 22:10:10
>>536
おー、`,@ で展開ができるよ! ありがとう、面白い。>>512もできた。
mzsceme は #%app で関数実行の前に細工ができるのか。
#mzscheme よく分からないけど (require m) は (require "filename") だよね。

539 :デフォルトの名無しさん:2009/06/17(水) 11:53:24
>>538
モジュール名

540 :デフォルトの名無しさん:2009/06/17(水) 12:42:36
悪い意味じゃなくて、Gauche本がSchemeの全て
な人が増えた気がする。


541 :デフォルトの名無しさん:2009/06/17(水) 12:52:39
初学者に読んで貰うような本が出たら、
それしか読んでない人が増えるのは当たり前だわな。
アホですか?(悪い意味ではなく)

542 :デフォルトの名無しさん:2009/06/17(水) 14:18:14
それしか読んでない≠それを全てと考える
なはずなのにそれがイコールで結ばれじゃう単細胞が多いってこと

543 :デフォルトの名無しさん:2009/06/17(水) 14:54:56
maximaのコードを高速化したい
compileでcommon lispに変換はできる
それをschemeで動くようにしてstalinで実行が一番高速なんだろうか

544 :デフォルトの名無しさん:2009/06/17(水) 17:39:23
YpsilonとStalinってどっちが速いの?

545 :デフォルトの名無しさん:2009/06/17(水) 17:39:48
stalinに決まってるだろボユゲ

546 :デフォルトの名無しさん:2009/06/17(水) 17:40:58
>>543
生きている間にコンパイル終らないよ

547 :デフォルトの名無しさん:2009/06/17(水) 18:32:53
stalin自身を高速化したいときはどうすんの

548 :デフォルトの名無しさん:2009/06/17(水) 19:22:23
最適化をしないようなオプションを設定する(本末転倒)

549 :デフォルトの名無しさん:2009/06/17(水) 19:22:41
stallinを動かすマシンを高速化する

550 :デフォルトの名無しさん:2009/06/17(水) 21:35:45
Gauche本は参考文献を示していない。

551 :デフォルトの名無しさん:2009/06/17(水) 23:27:27
>>550
だから?
別に気にするところじゃないだろ。

552 :デフォルトの名無しさん:2009/06/18(木) 09:17:07
君も気にし過ぎでは。

553 :デフォルトの名無しさん:2009/06/20(土) 03:28:11
schemeからcommon lispへのtranslaterはないみたいだけど
逆はあった.

common lispからschemeに乗り換えて見ようかと思うんだけど
大幅に違うのは継続ぐらい?

554 :デフォルトの名無しさん:2009/06/20(土) 03:32:06
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme:マクロ:CommonLispとの比較:意味論

555 :デフォルトの名無しさん:2009/06/20(土) 06:53:11
>>553
Lisp-1とLisp-2の違いとか、結構色々違いがあると思うけど。

556 :デフォルトの名無しさん:2009/06/20(土) 09:16:29
専ブラからだったら「リンクをコピー」でないと
http://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

557 :デフォルトの名無しさん:2009/06/21(日) 16:50:46
オレオレlispを作ってみたいのでちょっと質問

schemeでは#fのみが偽だそうですが
Common lisp使いから見たらこれはどうなんでしょうか

なんとなく、#fと()がどちらも偽のほうが使いやすそうには思いますが
問題になるケースがあったりするのでしょうか?

558 :デフォルトの名無しさん:2009/06/21(日) 16:57:35
型チェックを厳しくしたいか、
(not-empty? x)の代わりにxが書ける簡便さを選ぶかの違い。
あなたのセンスで決めてOK

559 :デフォルトの名無しさん:2009/06/21(日) 16:59:08
オレオレlispならいいけど、オラオラschemeを目指す場合、
意味が変わるので既存のschemeのコードがそのまま動かない
問題になるのはそれぐらい
既存のコードがきっちり動くってのはそれだけで楽しいから
昔scheme作った時泣く泣く準拠させたよ
中途半端はよくないと思った

560 :デフォルトの名無しさん:2009/06/21(日) 17:10:24
なるほど。
作りたいのはオラオラschemeに近いので
とりあえず#fのみにしとくのが無難そうですね
ありがとう

561 :デフォルトの名無しさん:2009/06/21(日) 22:19:05
>>559
それschemeじゃなくなっちゃうよ、Schemeみたいな俺Lispだよ

Schemeを名乗るならRnRSに準拠しないと。
Lisp属を名乗るだけならなんでもいいけどさ。

;;;; commonlispを名乗ると完成するまで大変過ぎる


562 :デフォルトの名無しさん:2009/06/21(日) 22:49:08
変なのきた

563 :デフォルトの名無しさん:2009/06/21(日) 22:50:30
SchemeはRnRSにあらず
RnRSからSchemeが生まれたんじゃなくて
RnRSは後からできたわけでしょ?
他人に使わせることや複数人で開発することがあるとすれば
規格準拠にしたほうがいいに決まっているけど

564 :デフォルトの名無しさん: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)))

565 :デフォルトの名無しさん:2009/06/21(日) 23:37:10
(define (tmap f t)
(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)))

566 :デフォルトの名無しさん:2009/06/22(月) 00:08:38
lisp/schemeでリファクタリングしてると、時間があっという間に過ぎてしまうんですが、同じ
経験をしている人いますか?

567 :デフォルトの名無しさん:2009/06/22(月) 03:30:41
>>564
(define tmap (lambda (f x) (if (pair? x) (map (cut tmap f <>) x) (f x))))

568 :デフォルトの名無しさん:2009/06/22(月) 06:12:44
>>564
普通に書くと再帰が二カ所あるので、単純な繰り返しにはできない
末尾呼び出し版でよければ、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))

569 :デフォルトの名無しさん:2009/06/22(月) 06:44:58
>>564
(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 '() '()))

570 :デフォルトの名無しさん:2009/06/22(月) 07:00:57
On Lispに書いてあるみたく継続使ってもいいよね。

571 :デフォルトの名無しさん:2009/06/22(月) 07:21:29
リストの入れ子ならともかく
木構造ならcdrも'()でもpairでもない場合があるだろ。


572 :デフォルトの名無しさん:2009/06/22(月) 07:54:59
二分木ならともかく
木構造なら子が3個以上の場合があるだろ。

573 :デフォルトの名無しさん:2009/06/22(月) 08:23:16
どちらも矛盾しないお

574 :デフォルトの名無しさん:2009/06/22(月) 08:45:26
571は572を包含するが、逆はムリ。
Lispの汎用的な処理で木構造といえば普通は571の方の定義。copy-treeとか。
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_t.htm#tree
これはCommon Lispだけど、Schemeがこれに異を唱えるという話も聞かない。

575 :デフォルトの名無しさん:2009/06/22(月) 08:50:36
ただし564はそれを意図したものではないと思われる。

576 :デフォルトの名無しさん: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))))


577 :デフォルトの名無しさん:2009/06/22(月) 09:49:16
この場合はどうする?
(tmap null? '((() 2) (3 (() 5))))
;こうなって欲しい
((#t #f) (#f (#t #f)))

578 :デフォルトの名無しさん:2009/06/22(月) 10:26:36
(branch (leaf 1) (leaf 2))みたいにタグをつけないと
(leaf ())と(branch)の違いが曖昧になるね

579 :デフォルトの名無しさん:2009/06/22(月) 10:36:43
>>576 末尾再帰のものも、最初はそういうのから始めて継続渡しに変換して作る。
練習がてら、やってみたら。
(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? にかえるという実にそのものの変更で所望の動作に。

580 :デフォルトの名無しさん:2009/06/22(月) 23:06:49
(quote ())と(#%app)の違い。

581 :564: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)) ())

582 :デフォルトの名無しさん:2009/06/23(火) 00:59:09
ドットペアについては方針が分かれるよな
リスト表現としてのツリーを普段どう見てるか
・対応する →初心者
・無視する →中級車
・エラーにする →高級車


583 :デフォルトの名無しさん:2009/06/23(火) 01:43:54
car だけに

584 :デフォルトの名無しさん:2009/06/23(火) 01:46:36
クダーらないギャグを言うなよ。

585 :デフォルトの名無しさん:2009/06/23(火) 01:48:47
てめーもクッダらねーぞ

586 :デフォルトの名無しさん:2009/06/23(火) 01:52:39
こんな時だけ加速するなw

587 :デフォルトの名無しさん:2009/06/23(火) 02:20:07
carだけに

588 :デフォルトの名無しさん:2009/06/23(火) 04:51:56
ヌルポ

589 :デフォルトの名無しさん:2009/06/24(水) 04:20:36
Structural Operational Semantics
http://tinyurl.com/lv4dzf

590 :576: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))

591 :デフォルトの名無しさん:2009/06/25(木) 12:17:36
つ ((null? t) (cont t))
tmap-cps自体を関数として使うつもりがあるなら
内部でvaluesを決めうちしちゃだめよ

592 :デフォルトの名無しさん:2009/06/25(木) 13:08:42
>>590
次はクロージャを使わずに継続をスタックで表現してみよう

593 :デフォルトの名無しさん:2009/06/25(木) 13:22:41
>>590
>(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).

594 :デフォルトの名無しさん:2009/06/26(金) 09:08:05
GIMPのscript-fu (基本的にR5RS準拠) では
真偽値 #t, #f とは別に TRUE, FALSE の定数が用意されています。

標準のダイアログで真偽値を受け取ると TRUE, FALSE で受け取ってくるので
条件判定を

(if (= flag TRUE) 処理)

と書かなければいけないのですが、マクロなどを使って

(if flag 処理) と書けるようにするにはどうすれば良いでしょうか?

595 :デフォルトの名無しさん:2009/06/26(金) 10:09:07
>>594
うちのWindows上のGIMP 2.6.6でマクロを評価すると、
Script-Fuコンソール固まるから詳しいことは言えないけど、
hygienicじゃない伝統的なマクロは使えるみたいだから、

(define-macro (dialog-if test then . else)
`(if (= ,test TRUE) ,then ,@else))

みたいなのでいいんじゃないか。

最悪、マクロ使えないなら、他の処理系でS式変換すればいいと思う。

596 :デフォルトの名無しさん:2009/06/26(金) 10:19:17
再帰を全て末尾再帰に変形する手続きとか論文のネタになってそうなものだけど
どなたかご存じない?

597 :デフォルトの名無しさん:2009/06/26(金) 10:22:21
CPS?
foldrとfoldlの双対性?

598 :デフォルトの名無しさん:2009/06/26(金) 11:22:23
>>595
GIMP2.6.5で試したところ期待通りの動作になりました。
ありがとうございます。

599 :デフォルトの名無しさん:2009/06/26(金) 23:44:46
最近思うこと
schemeはカリー化を言語組み込みでサポートしたほうが
シンプルになるように思うんだけど
今からそんなことをせずともpa$もcutもあるわけで
R6RSはすでに十分実用的になってしまった感がする

R5RSまでのシンプルさのが、良いなぁ

600 :デフォルトの名無しさん:2009/06/27(土) 11:04:33
前にも言ったけどね
R5RSのマクロはcons, quote, quasiquote, mapなど一切使わないで書けるよ
という意味でLisp界にとって危険な存在だからね
黒歴史ということにしたい人もいるだろう

601 :デフォルトの名無しさん: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 "/")

でも引数全部埋めないと実行できないから不便か


602 :デフォルトの名無しさん: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))

603 :デフォルトの名無しさん:2009/06/27(土) 15:53:12
>>602
うん、だからカリー化って意味ねーなと思って
つーかカリー化前提でデフォルト値の提供ってどうすんの?

そもそも引数たくさんあるような関数なら
自力でmake-httpみたいなパラメータ固定化手段を用意するだろうし


604 :デフォルトの名無しさん:2009/06/27(土) 16:00:44
足し算とか、引数の性質が簡単なやつならカリー化もいいけど
引数に値と関数を取るようなやつとか、
関数をいくつも引数にとって関数を返す関数なんかをカリー化したら
保守できなくなりそうだよ

>>599
試しに作って公開してみてよ

605 :デフォルトの名無しさん:2009/06/27(土) 17:09:16
カリー化はS式にターメリックやらスパイスを使えばいいよ

606 :デフォルトの名無しさん:2009/06/27(土) 17:43:41
それ何て

607 :デフォルトの名無しさん:2009/06/27(土) 19:54:04
ここできいて良いかわからないですが
gauche-glをcygwinで動かせた人います?

608 :デフォルトの名無しさん:2009/06/27(土) 20:35:17
やったことないけど出来るはず。
ちなみにMingwでは出来た。

609 :デフォルトの名無しさん:2009/06/27(土) 21:07:16
cygwinで0.8.13では動いたよ
0.8.14ではなんかしらんがコケた

610 :デフォルトの名無しさん:2009/06/27(土) 21:16:31
OpenBSDでguile-1.9.0のビルドがコケるんでソースを追ってみたんですが
guileもboehm-gcを使ってたって知りませんでした
それも5.2とか古いver
よく今まで動いてたなとゾッとしました(メジャープラットフォームでは問題なかろうけど)
Changes in 1.9.0を読んでかなりワクワクしながらビルドしたんですけど
コケるんで萎えて放置中
偶数版リリースまで待ったほうがいいのかなぁ
1.8までのプラットフォームでちゃんと動くようになれば2.0はかなり期待大

611 :デフォルトの名無しさん:2009/06/28(日) 17:15:24
>>608
これを聞いて、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が使いたいのですが
バイナリ配布してる箇所って、他にないですかね・・

612 :デフォルトの名無しさん:2009/06/28(日) 17:19:58
ほげとふがをわはとむすにすればうまくいくかもしれない。わけない。

613 :デフォルトの名無しさん:2009/06/28(日) 19:42:22
>>611
http://saito.s4.xrea.com/?Gauche

614 :デフォルトの名無しさん:2009/06/28(日) 20:26:25
>>613はリンク切れ

615 :デフォルトの名無しさん:2009/06/28(日) 21:05:08
>>614
悪い
今再Up中だからちょっとまってくれや

616 :デフォルトの名無しさん:2009/06/28(日) 21:08:26
>>614
準備出来たでー

617 :デフォルトの名無しさん:2009/06/28(日) 21:14:09
>>613
どうやってビルドしているんだろうか。詳しい手順が知りたい。


618 :611:2009/06/28(日) 21:39:27
>>616
再アプ乙です!!
今、gauche-glの動作を確認しました
これで思う存分図形言語で遊べる、ありがとう

619 :デフォルトの名無しさん:2009/06/29(月) 01:04:48
>>617
忘れた。
でも、ひっかかったのはしょーもないことばっかりだった気がする。
ひっかかったところをそのつど修正すればだいたいいけるよ。
もしかしたら Gauche 自体もちょっとは弄ったかもしんない。

620 :デフォルトの名無しさん:2009/06/29(月) 01:16:01
>>618
Cygwin でなくてよかったんかい?
Mingw でビルドした Gauche はいくつかの機能が使えないよ。
重大なのはプロセスとスレッド関連くらいだけど。

621 :デフォルトの名無しさん:2009/06/30(火) 14:53:46
問題ない
窓使いでcygwin版を使いたがる人は少ないはず

622 :デフォルトの名無しさん:2009/07/01(水) 14:37:48
schemeをさらにシンプルにしようと思って
こんなのを考えてみたんだけどどう思う?
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))

623 :デフォルトの名無しさん:2009/07/01(水) 14:41:18
「リストを末尾の要素に持つリスト」はどう表現するの、それ。

624 :デフォルトの名無しさん:2009/07/01(水) 14:49:58
普通に'(1 2 (1 2))という感じです
(cfold (lambda (x y) (conss y x)) () '(1 2 (1 . 2)))
(cfold (lambda (x y) (conss y x)) () '(1 2 (1 2)))

ただ、空リストからなるリストは表現できないので
これは不備だなぁ
conssを片側だけにしてもreverseは動かないし

625 :デフォルトの名無しさん:2009/07/01(水) 15:01:49
ああ、言ってる意味がわかった
(cdr '((1 2)))が()だから今動いてるけど
そうじゃなかったら動かないですね
そういう意味ではリストの末尾は必ずatomじゃないとダメになるから
これじゃダメだ

626 :デフォルトの名無しさん:2009/07/01(水) 21:12:08
ボクの考えた最強のLISP(Scheme)!
ってネタは尽きないよな
気持ちは判るが、妄想垂れ流す前に一度それで組んでみろよ
>>622みたいなのはすぐ作って確認できるだろ
どう思う?って、俺はまたキチガイかと思ったよ

627 :デフォルトの名無しさん:2009/07/01(水) 21:46:01
>>626
作らない奴はクソだ,と思っているんだろうけど,
設計は設計で,そっちも大事だと思うぞ。
全部作ってみろで返すのはひどい。

628 :デフォルトの名無しさん:2009/07/01(水) 21:57:45
そういうネタだらけでスレが埋まってしまうのは困るけど
閑散としている時のネタとしてはアリじゃないかな

629 :デフォルトの名無しさん:2009/07/02(木) 00:05:48
S式を2分木として見ればどうやっても歪に見える

ドットペアを含むリスト(1 2 . 3)は
 /\
1  /\
  2   3

リスト(1 2 3)は
 /\
1  /\
  2  /\
    3   nil

主観ではcdrがconsかnilに統一されてる後者の方がシンプルだと思う
前者はcdrがatomという可能性をいつも意識するからハゲそう


630 :デフォルトの名無しさん:2009/07/02(木) 02:24:46
竹内先生の入門本が増補改訂版で出るらしいんだが、
Schemeなのかな。CLなのかな。

631 :デフォルトの名無しさん:2009/07/02(木) 09:28:58
ICFPのプログラミングコンテスト、Steele兄貴の招待講演が
Organizing Functional Code for Parallel Execution: or, foldl and foldr Considered Slightly Harmful
ってなってるが、foldは悪なのだろうか
内容が気になるな

632 :デフォルトの名無しさん:2009/07/02(木) 09:51:32
foldじゃなくてl or rだよ。
シーケンシャルなのを問題にしてるんでしょ。

>>630
これかな?
http://www.amazon.co.jp/初めての人のためのLISP-ソフトウェアライブラリ-3-竹内-郁雄/dp/4781904548
特定の言語を対象としている本じゃないよ。このスレのように。
トピックスが増えるんじゃないのかな。

633 :デフォルトの名無しさん:2009/07/02(木) 10:04:34
演算がmonoidalならfoldも並列化できる

(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最高!!ってな流れになったりならなかったりという予想

634 :デフォルトの名無しさん:2009/07/02(木) 10:26:36
>>632
HMVはお取り寄せ可能になってる。
http://www.hmv.co.jp/product/detail/3608319
発行年月 : 2009年06月
出版社 : 翔泳社

http://seshop.com/には載ってないが


635 :デフォルトの名無しさん:2009/07/02(木) 12:14:49
予約受付中?
http://www.bk1.jp/product/03125439

636 :デフォルトの名無しさん:2009/07/02(木) 16:08:20
>>633
wじゃなくてz使ってよ、気色悪いw

637 :デフォルトの名無しさん:2009/07/02(木) 18:41:29
うはxxxxxxxxxおkxxxxxxxxxxxxxxxx

638 :デフォルトの名無しさん:2009/07/02(木) 18:59:01
>>634
書店の人が出版社に確認してくれた。当初予定より遅れて
平成21年12月2日だそうだ。楽しみだね。

639 :デフォルトの名無しさん:2009/07/02(木) 23:15:22
>>638
\(^o^)/

640 :デフォルトの名無しさん:2009/07/03(金) 00:05:29
入門Gaucheで勉強してるけどp64から急に難しくなってきたぜでもがんばるぜ

641 :デフォルトの名無しさん:2009/07/03(金) 00:07:24
LittleSchemer読もうぜ

642 :デフォルトの名無しさん:2009/07/03(金) 00:21:15
>>641
ありがとうだぜさっそくポチるぜ。

643 :デフォルトの名無しさん:2009/07/03(金) 02:43:14
竹内センセの本が出るのか。それは全力で買いだ。

644 :デフォルトの名無しさん:2009/07/03(金) 04:18:45
一冊あれば十分だけどなw

645 :デフォルトの名無しさん:2009/07/03(金) 04:55:07
増補で付録とか付くんかな?
竹内先生の本は持ってるけど、記念で買おう。

646 :デフォルトの名無しさん:2009/07/03(金) 05:50:44
lisp本、wktkしてきたぜ。

647 :デフォルトの名無しさん:2009/07/03(金) 06:20:20
初めての人向けじゃなくって
もっと突っ込んだの書いて欲しいな


648 :デフォルトの名無しさん:2009/07/03(金) 06:34:49
竹内先生監修シリーズって感じで、5人ぐらいに書かせればいいんじゃねえ?

649 :デフォルトの名無しさん:2009/07/03(金) 09:42:11
Lispじゃないけどそういう感じの本あったよね。
意外と面白くなかったw
それより雑誌bitのTAOの連載を合本したら面白いのに。


650 :デフォルトの名無しさん:2009/07/03(金) 10:45:35
今思えば、ビューティフルコードは初心者に媚びない所だけはよかった
日本であれぐらい書ければ、もっちーがファビョることもなかっただろうに

651 :デフォルトの名無しさん:2009/07/03(金) 18:26:23
>>647
あの本は初心者向けの本じゃないよ。
Lispマニア向けの本だ。初心者が読んでもそれなりに楽しめるけど。

652 :デフォルトの名無しさん:2009/07/03(金) 18:29:18
LISPの本と思わずに、T先生と生徒のかけあいを楽しめばいいんだ。

653 :デフォルトの名無しさん:2009/07/03(金) 20:12:01
初心者向けと書かれるとおれそんなんじゃないし読むことないや
と結局買っても積んだままにしてしまう
お決まりの言語のおさらいを数章割かれてるのを見ると頭に来るからだ
いっそのこと超上級者向けのが興味をそそられる

654 :デフォルトの名無しさん:2009/07/03(金) 20:24:17
>>653
SICP も初心者向だよwW


655 :デフォルトの名無しさん:2009/07/03(金) 21:51:02
だから1章で飽きて放り投げちゃったんだよ。

656 :デフォルトの名無しさん:2009/07/03(金) 22:05:20
目次みて1章はつまんなそうだと思ったら3章あたりから読み始めればよかったのに。

657 :デフォルトの名無しさん:2009/07/04(土) 00:37:31
良い本は、
例え初心者向けと銘打たれていても、
光る記述で満ち溢れており、
熟練者でも楽しめるものなのだ。
だからグルの書いた本は面白いのだ。

658 :デフォルトの名無しさん:2009/07/04(土) 01:45:12
苫米地先生の事ですね。わかります。

659 :デフォルトの名無しさん:2009/07/04(土) 01:54:17
>>658
ビビッタ。
実は、最近なぜか洗脳について勉強していたりする。関係あるの?

660 :デフォルトの名無しさん:2009/07/04(土) 02:01:58
Lisperじゃん。

661 :デフォルトの名無しさん:2009/07/04(土) 02:02:46
とまちゃんだけはガチ

662 :デフォルトの名無しさん:2009/07/04(土) 02:04:31
sage忘れたすまぬ

663 :デフォルトの名無しさん:2009/07/04(土) 03:21:58
竹内本は目次の時点で駄目だな

664 :デフォルトの名無しさん:2009/07/04(土) 03:34:00
無縁の衆生ですな。

665 :デフォルトの名無しさん:2009/07/04(土) 05:49:37
>>655
もったいないお化けが出るぞ

666 :デフォルトの名無しさん:2009/07/04(土) 19:46:29
The Little Schemer買ったお。たくさん勉強するお。

667 :デフォルトの名無しさん:2009/07/05(日) 10:42:05
shibuya.lispどうだった、行った人?

668 :デフォルトの名無しさん:2009/07/05(日) 12:41:05
>>667
面白かったよ。#4あるならLTしようと思ったくらいには(TTはなんいどたかい)。

669 :デフォルトの名無しさん: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))

670 :デフォルトの名無しさん:2009/07/05(日) 13:11:03
引数のバインディング変えても外からは見えないだろ。

int f(int x) {
x = 10;
}
やってるのはこれと同じ

671 :デフォルトの名無しさん:2009/07/05(日) 13:17:32
>>669
set! は変数とオブジェクトの結び付き (束縛) を付け替えるオペレータ。
set-car! や set-cdr! はオブジェクト (consセル) の中身を変更するオペレータ。
ってことを念頭に置いて考えるとわかりやすいかも。
あまりに根本的すぎることなのでそこを理解できてないようだとちょっと説明しづらい。

672 :デフォルトの名無しさん:2009/07/05(日) 13:26:06
> また、test関数では内部でtをset!しているにもかかわらず
> その変更は影響がないように見えますが何故なのでしょうか

処理系がわからんから何とも言えんが、
おそらくその処理系は、クォートされたリストをすべての関数呼び出しで共有するように作られているんだと思う。

test 内の (define t '(()())) のところでは、
すべての関数呼び出しで共有される '(()()) というリストを t に束縛する、みたいな処理が行われる。
そこで、(test sa) を実行してしまうと、そのリストが '(1 ()) に書き換えられてしまう。
そのため、次回以降の test の呼び出しでは、'(1 ()) というリストが t に束縛されてしまう。

そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけないことになってるので、
こんな処理をすること自体が間違い。
やるんだったら、毎回リストを生成するようにする。

(define t (list '() '())

673 :デフォルトの名無しさん:2009/07/05(日) 13:55:51
問題をきちんと理解してから解答を考えよう
って約束したじゃないですかー

674 :デフォルトの名無しさん:2009/07/05(日) 14:02:00
>>672
> 処理系がわからんから何とも言えんが、

むしろ何も言うな

675 :デフォルトの名無しさん:2009/07/05(日) 14:29:33
おまえがな。

676 :デフォルトの名無しさん:2009/07/05(日) 15:05:14
shibuya.lispの参加者、もっと感想・ネタを書いてくれ。
悪口・不満的な話は、直接、主催者にメールでもしてくれ。

677 :デフォルトの名無しさん:2009/07/05(日) 15:24:01
いずれ上がるだろう動画を楽しみに待つ

678 :デフォルトの名無しさん:2009/07/05(日) 15:48:43
http://www.nicovideo.jp/mylist/13373941

679 :デフォルトの名無しさん:2009/07/05(日) 15:53:09
ニコに挙げたのか
つべで探してたわ

680 :デフォルトの名無しさん:2009/07/05(日) 15:53:51
感謝。既に上がってるのは想定外だった

681 :デフォルトの名無しさん:2009/07/05(日) 15:54:39
つべはこっち。
http://www.youtube.com/view_play_list?p=C7D5490AD455E464


682 :デフォルトの名無しさん:2009/07/05(日) 17:24:59
>>670-672
ありがとうございます

>>671
関数の引数はjavaのように、
実体を指すポインタのコピーが渡ると考えれば良いですよね
set!だとコピーしたポインタ自体を変更しても元データには全く影響がないが
set-car!だと、コピーしたポインタの指す先を変更するので
引数にset-car!しても破壊的変更が可能

だとすれば、参照渡しで実現出来る
関数の実引数の実体を直接書き換えるような
関数の作成は不可能ですね

>>672
>そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけない
これは初めて知りました。これが原因ですね
コードはGaucheとGuileで試したのですが
どちらもクォートされたリストは共有されるような実装ってことですね

683 :デフォルトの名無しさん:2009/07/05(日) 18:31:28
>>682
> クォートされたリストは共有されるような実装ってことですね

確か Gauche の場合は REPL が起動してるときは共有されないはず。
だからといってそれを期待しちゃだめなんだけど。

Gauche のマニュアルから引用 ↓

注: R5RSは、リテラル式の値を変更するのはエラーであるとしています。
しかしGaucheはペアとベクタについてはそれが定数であるかどうかをチェックしておらず、
set-car!やvector-set!等の破壊的手続きによってそれらの値を変更してもエラーは報告されません。
そうした場合の動作は不定です。

684 :デフォルトの名無しさん:2009/07/05(日) 18:45:19
参照渡しって何か
ダイナミックスコープっぽいような気がするけど
この二つは何か関係あるのかな?

685 :デフォルトの名無しさん:2009/07/05(日) 18:48:13
>>684
関係ない。

686 :デフォルトの名無しさん:2009/07/05(日) 18:49:34
全く関係ない。
参照渡しは仮引数/実引数バインディングスタイルの一つ
ダイナミックスコープは自由変数のルックアップスタイルの一つ

687 :デフォルトの名無しさん:2009/07/05(日) 18:52:02
そんなめんどうな話なのか?
局所変数と大域変数の話なのでは。
湯浅先生の「Scheme入門」だとP32〜。

688 :デフォルトの名無しさん:2009/07/05(日) 18:58:16
koguro さんのトークは資料が見やすくていいなー

689 :デフォルトの名無しさん:2009/07/05(日) 19:13:16
いちいちそんな糞本挙げなくていいよ

690 :デフォルトの名無しさん:2009/07/05(日) 19:19:18
湯浅先生を糞呼ばわりできるお前って何様?

691 :デフォルトの名無しさん:2009/07/05(日) 19:23:28
俺は>>689じゃないけど、その先生が立派な人で、その本が立派なものだったとしても時代にそぐわなくなることってあると思うんだよなー。
湯浅先生の名前があればもう否定しどころがないみたいな言い方じゃなくて、もっと良い点と悪い点を検討する必要はあるんじゃないの?
もちろん、糞本って言う方もどのへんが糞なのか示さないと議論にならんけど。

692 :デフォルトの名無しさん:2009/07/05(日) 19:49:36
とりあえず糞って言っとこう的な煽りは2chの華だねw

693 :デフォルトの名無しさん:2009/07/05(日) 19:51:06
たいした人でもないのに
いちいち先生つけるなよ

694 :デフォルトの名無しさん:2009/07/05(日) 19:52:53
何の脈絡もなく
湯浅の糞本持ち出す687ってなんなんだろう?

695 :デフォルトの名無しさん:2009/07/05(日) 20:03:58
名著はちゃんと読んだ方がいいと思うぞ。
おっと、ここは2chだったな。玉石混交ですな。

696 :デフォルトの名無しさん:2009/07/05(日) 20:13:11
読む本は選べ
時間の無駄

697 :デフォルトの名無しさん:2009/07/05(日) 21:01:42
嫉妬ってみっともないなとオモタ

698 :デフォルトの名無しさん:2009/07/05(日) 21:05:35
糞本の宣伝に嫉妬とか

699 :デフォルトの名無しさん:2009/07/05(日) 21:06:09
釣れますか

700 :デフォルトの名無しさん:2009/07/05(日) 21:18:47
>>690
生暖かく見守っといてやれって。

701 :デフォルトの名無しさん:2009/07/05(日) 21:24:08
湯浅の本なんて有り難がってよんでんのか

702 :デフォルトの名無しさん:2009/07/05(日) 22:23:54
ところでここLispスレ

703 :デフォルトの名無しさん:2009/07/05(日) 23:57:54
うっかりSICP

704 :デフォルトの名無しさん:2009/07/06(月) 05:04:12
>>677
そういうことじゃないだろ。
実際に参加したの感想が聞きたいんだが。

いいアイデアが浮かんだとか、もっと○○の分野を勉強しようと思ったとか、その他いろいろ。

705 :デフォルトの名無しさん:2009/07/06(月) 08:04:38
マ板行けよ

706 :デフォルトの名無しさん:2009/07/06(月) 09:12:44
Scheme入門はちょっと古すぎる気がしないでもないな
内容もCommonLisp入門とほぼ同じだし。
でも絶版とはいえ某所でpdfでくばってたから結構読んでる人は居るんじゃないかな

707 :デフォルトの名無しさん:2009/07/06(月) 12:32:27
>>701
ありがたがってるかどうか別として、先人への敬意が無い連中って
人として問題ありってことだと思うよ。

708 :デフォルトの名無しさん:2009/07/06(月) 12:47:26
世界初のCL実装

709 :デフォルトの名無しさん:2009/07/06(月) 12:48:13
世界初のCL実装でしょ。
MITあたりの人達もびっくりしたという。

710 :デフォルトの名無しさん:2009/07/06(月) 12:52:02
Little Schemerに出てくるYコンビネーターってどういう利点があるの?
難しくてめげそう。だれか教えれ。プリーズ

711 :デフォルトの名無しさん:2009/07/06(月) 12:56:15
実用上たいして意味は無い
(define (fact n) (if (= n 1) 1 (* n (fact (- n 1))))
みたいなのを、factっていう名前を使わずに
無名関数のみで定義できるという意義がある

712 :デフォルトの名無しさん:2009/07/06(月) 12:57:21
そうそう。KCLをわずか2人で開発した日本が世界に誇るLisperだぜ。
本の内容は今となっては古い部分もあるが基本的な考え方は変わらないだろ。

713 :デフォルトの名無しさん:2009/07/06(月) 13:01:27
util.sparse が組込みになってないのは、
やっぱ普通のスクリプト言語的用途だと従来のハッシュテーブルの方が効率はいいってことでいいんだよね?

714 :デフォルトの名無しさん:2009/07/06(月) 13:08:15
>>710
無名関数のみで定義できるという意義ってナーヌ?

715 :デフォルトの名無しさん:2009/07/06(月) 13:13:46
λ計算には関数定義なんてない
無名関数だけで再帰の計算が出来ることがわかれば
λ計算だけで、色々な計算が出来ることが示せるわけ

716 :デフォルトの名無しさん:2009/07/06(月) 13:16:46
スマヌ。
λ計算だけで、色々な計算が出来ることが示せると何が証明できるの?

717 :デフォルトの名無しさん:2009/07/06(月) 13:19:42
ちょっとは自分で調べれ
チャーチ・チューリングとかでググってみそ

718 :デフォルトの名無しさん:2009/07/06(月) 13:26:54
>>717
ググッた。
「チャーチ=チューリングのテーゼとは、「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと同一視しようという主張である。
このクラスはチューリング・マシンで実行できるプログラムのクラス、ラムダ記法で定義できる関数のクラスとも一致する。
よって簡単にはテーゼは、計算が可能な関数とは、その計算を実行できるような有限のアルゴリズムが存在するような関数、
よっておおよそコンピュータで実行できる関数と同じだと主張する。」

つまり、「SchemeはYコンビネータがあれば計算可能な再帰関数を有限のステップで計算可能ですYO!」ってことでおk?

719 :デフォルトの名無しさん:2009/07/06(月) 13:31:18
「あれば」じゃなくて「あるので」の方が正しいニホンゴかなw

720 :デフォルトの名無しさん:2009/07/06(月) 13:38:34
schemeはYコンビネータを使わなくても計算可能な関数は計算出来る
普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当

721 :デフォルトの名無しさん:2009/07/06(月) 14:22:44
>普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当

おお、そういうことなのか。でもよく考えると「計算できる関数」ってどういう意味かわからん。
とりあえず漏れの使う程度の関数は「計算できる関数」ってことか?
じゃ、無限ループするようなバグがある関数は「計算できない関数」ってクラスなのか?
どういう違いがあるとそうなるんだろう?

722 :デフォルトの名無しさん:2009/07/06(月) 14:49:14
「Lisp脳」の謎に迫る - Schemeプログラマの発想
http://karetta.jp/book-node/gauche-hacks/023107

上のページのように問題をリストの加工と捉えて
(map 何らかの加工 (iota 100 1))
という風にすると、確かに処理が分かりやすいんだけど、
一旦、処理の過程の無駄なリストにメモリが使われますよね。
iota 10000000000 とかリストがでかくなった時を考えると、困ると思うのですが
僕が神経質なだけでしょうか。

723 :デフォルトの名無しさん:2009/07/06(月) 15:07:17
(map f (iota 100 1))の場合で、仮にリストを順に辿って最後に結果を返す関数をgとして
(g (map f (iota 100 1))のようにすればgの実装次第では
コンパイルの結果、Cでfor (i = 1; i <= 100; ++i) {...}と書いたようなループになって
中間リストは一切作られない…ような最適化をする為の理論とかはあります
common lispのseriesライブラリ等は、この手の中間リスト消去をある程度してくれると聞いてます

724 :デフォルトの名無しさん:2009/07/06(月) 15:43:34
>>722
無駄を省くプログラミング技術はLisp, Schemeでも重要。

ただし、よいプログラマは本当に無駄なところだけ、改良しようとする。
(iota 1 10000000000)のセル消費が他に比べて負担が
大きいプログラムの多くはトイプログラムじゃないですか?

725 :デフォルトの名無しさん:2009/07/06(月) 16:10:07
Haskellでも使えばいい

726 :デフォルトの名無しさん:2009/07/06(月) 16:49:50
>>722
SICPにある遅延を使ったストリームによればいいんじゃない。

今のコンピューターはたっぷりメモリがあるんだし富豪プログラミングでも
いいとは思うけど。

727 :デフォルトの名無しさん:2009/07/06(月) 19:09:25
>>721
「ゲーデルの世界」(海鳴社)にそういった計算可能関数の話があった。
今、読んでいるところ。λ、チューリングマシンとの関係の説明も
あったと思う。とりあえず原始帰納的関数から理解しようとしている。
Schemeが理解の助けになるかもしれない。

728 :デフォルトの名無しさん:2009/07/06(月) 20:34:49
>>723-726
ありがとうございます。
>>724
>本当に無駄なところだけ
やたらめったら改良するより、労力のコスパが高いところを見つけて改良すれば十分って話ですよね。

>>726
3.5.1にこの話題が出てますね。
ちょっと難しいけど、これがベストな解決策だろうなぁ。
遅延ストリームを使い始めると、何でこれ遅延ストリーム使わないの!!って思うようになりそうだ。

>富豪プログラミングでもいいとは思うけど。
反復だと時間さえかければ解けるものが
リスト渡しだと記憶空間の限界に達したら絶対に解けないというのは
僕には気持ち悪さが残ります。

729 :デフォルトの名無しさん:2009/07/06(月) 20:39:24
足りなくなったら考えればいいのよ

730 :デフォルトの名無しさん:2009/07/06(月) 20:59:14
2000年問題、文字コード、IP枯渇・・・

731 :デフォルトの名無しさん:2009/07/06(月) 21:38:55
>>727
チャーチ=チューリングのテーゼによれば、アルゴリズムのある関数は全て計算可能である。
つまり、アルゴリズムを学ぶことが計算可能関数を学ぶことに相当している。
そしてアルゴリズムを学ぶ際にはSchemeが理解の助けになる。

簡単にまとめると、「Yコンビネータがあるチューリング完全な言語ではアルゴリズムのある関数は全て計算可能である」ということになる。
あたりまえの事だけど、数学的に保証してくれてるので安心してプログラミングして計算ができるわけだ。

732 :デフォルトの名無しさん:2009/07/06(月) 23:58:44
Yコンビネータの話とλ計算の話をごっちゃにしてはいけない。
コンビネータの話とλ計算の話はもともと別の話。それが途中で
コンビネータの理論はλ計算の理論に翻訳可能だとわかったので、
同時に語られることが多いというだけ。

コンビネータ理論の歴史は古くて1920年代にSchonfinkelと言う人が始めて
Curry(カリー化のカリー)が発展させた。

733 :デフォルトの名無しさん:2009/07/07(火) 00:18:57
Yコンビネータに関する疑問について言えば、Yコンビネータの存在意義という
のは、確か再帰の概念が存在しない言語において再帰と同等の物を導入するため、
だったと思う。

734 :デフォルトの名無しさん:2009/07/07(火) 00:50:34
そういえば、ものまね鳥、あれからすぐに図書館に
返したんだけど。借りられたかな。


735 :デフォルトの名無しさん:2009/07/07(火) 01:25:05
ここで>>368のリンク先にあるラムダ式を簡約するArcのプログラムを読むと感動すること請け合いである。

736 :デフォルトの名無しさん:2009/07/07(火) 07:39:45
>>713
詳しいことはドキュメントに書いてあるよ

737 :デフォルトの名無しさん:2009/07/07(火) 11:14:49
まだ実験的なものかと思ってたのでドキュメント見てなかった
でも、英語の説明しかねーや。 読むのめんどい。

ところで、 sparse って名前だと sparse な何かわからんので、
モジュール名はあんまりよくないと思った。
Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…

738 :デフォルトの名無しさん:2009/07/07(火) 11:28:27
保守的GCと心中する気がなければ、ただの一時しのぎだろ

739 :デフォルトの名無しさん:2009/07/07(火) 20:07:45
>>737
> Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…

その発想は鳴かった

740 :デフォルトの名無しさん:2009/07/07(火) 23:26:48
>>731
計算可能な関数には3つの系譜があるようだ。
○ゲーデル〜クリーニ 一般帰納的関数
○チャーチ λ−定義可能な関数
○チューリング チューリングマシンで実行できる関数

ゲーデルの流れだと原始帰納的関数は計算可能関数。
Lispの本の例題に登場するアッカーマン関数は原始帰納的関数ではないのだけど
帰納的関数であり計算可能関数らしい。階乗計算とかフィボナッチ数とかは
原始帰納的関数なんだと思う。詳しい方、間違ってたら補正してください。



741 :デフォルトの名無しさん:2009/07/07(火) 23:49:28
>>740
チューリングマシンと等価なのは部分再帰関数であって、原始再帰関数は
部分再帰関数の部分集合に過ぎない。

742 :デフォルトの名無しさん:2009/07/07(火) 23:54:14
>>740
あんまりわかんないなら,書き込まなくていいと思う.

743 :デフォルトの名無しさん:2009/07/08(水) 00:23:08
ボイスコッド正規形ならクリーニアンクロージャ作れるからラムディ

744 :デフォルトの名無しさん:2009/07/08(水) 00:46:46
帰納的定義のackermann functionってこんな感じ?

(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...

745 :デフォルトの名無しさん:2009/07/08(水) 08:32:21
>>741
740ではないが,
原始帰納関数 ⊆ 部分再帰関数 ⊆ 一般帰納関数
ということになるってこと?
部分再帰関数と一般帰納関数の違いって何?

746 :デフォルトの名無しさん:2009/07/08(水) 09:48:29
function = partial function∪total function

747 :デフォルトの名無しさん:2009/07/08(水) 09:58:51
>>745
一般再帰(帰納的)関数の定義は?Kleeneの言うgeneral recursive function
の意味で言っているのなら、部分再帰関数の真部分集合。なぜなら部分再帰関数は
全域関数でもありうるから。

つまり、
原始再帰関数 c 一般再帰関数 c 部分再帰関数
ということ。ちなみに、原始再帰関数も真部分集合だぞ。Ackermann関数がその一例。

つーかおまい情報系出身か?この辺は一般常識だぞ。
門外漢なら計算理論の教科書を読むべき。

748 :デフォルトの名無しさん:2009/07/08(水) 10:11:31
>>746
partial function ⊃ total function


749 :デフォルトの名無しさん:2009/07/08(水) 13:01:30
オレ、門外漢なんで高橋先生の「計算論」を読んでみた。
関数と部分関数ってのがあるんだね。そこを強調するのに
部分帰納的関数という言い方をするんだそうだ。
一般帰納的関数はゲーデルの本にあった言い方で
クリーニの1936年の論文らしい。邦訳があったら読んでみたい。

750 :デフォルトの名無しさん:2009/07/08(水) 15:57:45
→ゲーデルのセミナーでの言い方
ゲーデルは共同研究やセミナーで使っただけで、
帰納的関数について長らく公表しなかった。
ゲーデルにとっては公表するほどの成果ではなかったらしい。

751 :デフォルトの名無しさん:2009/07/08(水) 16:26:45
ゲーデルは算定可能という概念も提案した。
結局、これら6つの同等性が証明されてチャーチの提唱へ。

752 :baka:2009/07/08(水) 17:40:48
すいません、LittleSchemerが難しいと感じるのってやばいですか?
いま2章のand again, and again...のとこなんですが意味わかめです。

753 :デフォルトの名無しさん:2009/07/08(水) 18:17:37
どこがわからないんですか?

754 :baka:2009/07/08(水) 18:59:32
>>753
すいみません自己解決しました。

>What is the meaning og the line
>((null? l) #t)

を(#f #t) と勘違いしてました。
先に出てるdefine lat中の文章のことなんですね。もっとしっかりと読まねば。

755 :デフォルトの名無しさん:2009/07/08(水) 19:11:45
しっかりしろバカ

756 :デフォルトの名無しさん:2009/07/08(水) 21:27:55
再帰関数(帰納的関数)は数学的に扱いやすい良い性質があるようですが、
なぜ関数プログラミングが世の中の主流になれないのですか?

757 :デフォルトの名無しさん:2009/07/08(水) 21:29:43
>>747
情報出身じゃないっす。興味あるだけの人。
そうか一般再帰関数って最小解操作を許す全域関数(total function)の
ことだったのか。


758 :デフォルトの名無しさん:2009/07/08(水) 21:33:58
>>756
世の中の現象を反映させるにはオブジェクト(対象)指向じゃないとだめだろ
世の中にあるのは対象なのだから。

んでもって、対象間の関係が数学である。
オブジェクト指向開発されたシステムの真に理想的な姿というか関係が
”数学”になる、んだろ。
関数だけ持ってきても対象が無い(というか対象とは?と言う話になる)
からどうしようもないとかそういう話じゃない?よく知らんが。

759 :デフォルトの名無しさん:2009/07/08(水) 22:17:21
>>758
アフォ

760 :デフォルトの名無しさん:2009/07/08(水) 22:41:17
>>758
ほんとに知らなすぎでワロタ

761 :デフォルトの名無しさん:2009/07/08(水) 22:49:49
いえいえ。

762 :デフォルトの名無しさん:2009/07/08(水) 23:00:31
“不運”(ハードラック)と“踊”(ダンス)っちまったんだよ
に似てる

763 :デフォルトの名無しさん:2009/07/09(木) 01:43:38
schemeってすばらしいですねぜひきわめたい。

764 :デフォルトの名無しさん:2009/07/09(木) 01:50:35
頑張れ
Lisp/Schemeは面白いぞ

765 :デフォルトの名無しさん:2009/07/09(木) 04:37:15
リリカルlisp ベルカ式はパターンマッチを主体としている

766 :デフォルトの名無しさん:2009/07/09(木) 15:04:18
ΣxΣyf(x,y)な計算をSchemeで処理するはどう書けばいいんでしょうか。
Rubyで書くとこんな感じなんですが…

v = 0.0
(0..10).to_a.each do |x|
 (0..10).to_a.each do |y|
  v += f(x, y)
 end
end


767 :デフォルトの名無しさん:2009/07/09(木) 15:23:06
色々あると思うけど例えば
(dotimes (i 10)
(dotimes (j 10)
(set! v (f i j))))


768 :デフォルトの名無しさん:2009/07/09(木) 15:25:47
SRFI-42で (sum-ec (: x 11) (: y 11) (f x y))

769 :デフォルトの名無しさん:2009/07/09(木) 17:02:45
(fold
(lambda (n i) (+ i (f (car n) (cdr n))))
0
(map (lambda (x)
(map (lambda (y)
(cons x y)
) (iota 11))
) (iota 11))
)
unko

770 :デフォルトの名無しさん:2009/07/09(木) 17:13:02
これぐらいならやはりlist comprehensionが一番かな

771 :デフォルトの名無しさん:2009/07/09(木) 17:20:17
List comp(ryはlexical syntaxで読みやすさを獲得するから、
あまりLisp向きじゃないね。
http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/

772 :デフォルトの名無しさん: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))))


773 :デフォルトの名無しさん: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))

774 :デフォルトの名無しさん:2009/07/10(金) 09:42:18
>>773
再帰関数ではあるが、原始再帰関数ではない。

775 :デフォルトの名無しさん:2009/07/10(金) 16:26:55
>>774
ありがとうございました。
区別がわかってきました。

776 :デフォルトの名無しさん:2009/07/10(金) 17:24:17
set! による破壊的代入がなければ絶対に書けないプログラムって
どういう種類のものですか?


777 :デフォルトの名無しさん:2009/07/10(金) 17:26:59
無限リストとかじゃね

778 :デフォルトの名無しさん:2009/07/10(金) 18:11:07
クリンゴン、エンタープライズの位置座標
フェイザー砲の残りエネルギー、ダメージ

779 :デフォルトの名無しさん:2009/07/10(金) 20:56:17
lispでStar Trekか
http://www.xn--t8jcq9c.jp/~take/trek/trek-manj.html

780 :デフォルトの名無しさん:2009/07/10(金) 21:51:43
>>779
あるんだねぇ。GCLで動いたよ。
あっけなくやられてしまった。

781 :デフォルトの名無しさん:2009/07/11(土) 16:46:50
さっき知ったんだが
schemeのcondって継続渡しみたいな構文をサポートしているんだな
(cond ((or #f '(1 2 3)) => cdr))

782 :デフォルトの名無しさん: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)))

783 :デフォルトの名無しさん:2009/07/11(土) 23:18:25
>n個の要素の括弧の付け替えからなるリスト
もうちょっと厳密に

784 :デフォルトの名無しさん:2009/07/11(土) 23:48:43
>>783
わかりにくくてすみません
言い換えると
一度に2つの要素の足し算しかできない+を使って
n個の要素を全て足すとしたときの
可能な計算の順序の指定の仕方と同じです

1+2+3は(1+2)+3と1+(2+3)の計算法があります
これは(cata '(1 2 3))に対しての
((1 2) 3)
(1 (2 3))
に相当します

785 :デフォルトの名無しさん:2009/07/12(日) 00:01:04
・二分木である
・葉にしか要素がない (>>784で言えば数)
・分岐には要素がない (>>784で言えば+)
という場合、要素数がn個なら木の種類は? と同じ問題。

・要素の間の何処に分岐点を持ってくるかの数え上げ
・二つの部分木に分けた後の分割統治
を考えればわかるでしょ。



786 :デフォルトの名無しさん:2009/07/12(日) 01:16:07
規則とかいってるからサンプル眺めるだけでえいやっと思い付こうとしてるのかな。
n=1からn=4, 5くらいまで自分で書き出してみれば考え方もわかりそうなものだが。


787 :デフォルトの名無しさん:2009/07/12(日) 07:18:12
>>785
出来ました。ありがとうございます
(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)))

788 :デフォルトの名無しさん:2009/07/12(日) 08:28:51
()を評価したら()でええの?
エラーではないの?

789 :デフォルトの名無しさん:2009/07/12(日) 09:08:13
規定ではエラーだねぇ

790 :デフォルトの名無しさん:2009/07/12(日) 09:11:14
>>787
(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))

791 :デフォルトの名無しさん:2009/07/12(日) 10:40:02
>>788
'()のがいいですね。Gaucheだとエラーにならないので
他の処理系使うまで気づきませんでした

>>790
(1 2 3)を(1 . (2 3))のように見たら
>>784を満たしているので
中途半端ですが満足してしまいました
多分ちょっといじればその出力に出来ると思います

792 :デフォルトの名無しさん:2009/07/12(日) 11:01:56
>>791
自分も考えてみたけどけっこう難しい例題だと思うよ。
根本的に書き直さないといけないんじゃない?悪いけど。

793 :デフォルトの名無しさん:2009/07/12(日) 11:21:17
そんなことない、ちょっと書き直したら動きましたよ

>>792さんも考えてるかもしれないのでヒントだけ
ネストしたmapの中身を修正するだけです

794 :デフォルトの名無しさん:2009/07/12(日) 11:28:04
ちなみに srfi-42 使えばこんなに簡単

(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))))

795 :785:2009/07/12(日) 11:34:56
実はドット対で二分木を構成した方が分かりやすい
とアドバイスを入れるかどうか迷った。
結局元の問題と違っちゃうから書かなかったけど。

796 :デフォルトの名無しさん:2009/07/12(日) 11:42:04
(define (cata xs)
(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))))))

うんこーどですが、どうでしょうか

797 :796:2009/07/12(日) 11:43:40
駄目ですた

798 :デフォルトの名無しさん:2009/07/12(日) 11:50:51
>>794
これは神コード・・srfi-42かぁ

799 :792:2009/07/12(日) 17:53:13
>>793
やっぱ、難しい。考えて相互再帰のこんなの↓考えた。
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)))))

800 :792: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))
>

801 :デフォルトの名無しさん:2009/07/12(日) 20:35:35
>>800
おめでとん
自分の環境では、
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)))

802 :デフォルトの名無しさん:2009/07/13(月) 11:09:33
>>758
すまん、まじめに反応してみるが、
それは命題論理->一階述語論理の流れでは歴史的事実だが、
そこでの対象指向自体は、関数プログラミングとOOプログラミング
を篩にかけるものではない。FOLレベルのオブジェクトであれば、
関数プログラミングだろうがなんだろうがまあ存在する。

また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
すべてという意味なら、それは正しくない。

803 :デフォルトの名無しさん:2009/07/13(月) 15:42:48
何も理解してないバカと説明する気のないバカ

804 :デフォルトの名無しさん:2009/07/13(月) 16:29:33
数値計算に比べて数式処理は世の中の主流になれないみたいな感じなのかな?
map f (map g xs) == map (f . g) xsとか、数式処理みたいなものだと思うんだけど。

805 :デフォルトの名無しさん:2009/07/13(月) 17:05:23
う〜ん、難しくてよくわからないな。

x = x + 1 みたいな変なのがプログラミングの世界ではまかり通ってる
のだけど、こんなの普通の高校や大学初年で習う数学じゃ扱えないはず。
高度な数学なら扱えるのかな?もっと詳しくお聞きしてみたいです。

806 :デフォルトの名無しさん:2009/07/13(月) 17:19:31
数式処理が主流になれない理由は、解析的に解けない問題がたくさんあるから、だね。

807 :デフォルトの名無しさん:2009/07/13(月) 17:38:25
>>805
http://en.wikipedia.org/wiki/Fixpoint_theorem

808 :デフォルトの名無しさん:2009/07/13(月) 18:44:18
set-car!とset-cdr!を使って
(define a (list 1 2))
このaを'()にすることは可能ですか?

809 :デフォルトの名無しさん:2009/07/13(月) 18:54:26
gosh> (define a (list 1 2))
a
gosh> (set-car! a 'quote)
#<undef>
gosh> (set-cdr! a '(()))
#<undef>
gosh> a
'()

810 :デフォルトの名無しさん:2009/07/13(月) 19:11:28
手品みたいですね
()にも出来るのでしょうか?

811 :デフォルトの名無しさん:2009/07/13(月) 19:22:14
>>804
それは、より正しくは、Numeric ComputationとSymbolic Computationとの
比較のことだと思うが、そうであるとして、
それと、関数プログラミングとそれ以外(おそらく命令型?)の比較は同型ではない。
NCとSCは、806の言うとおり、そもそも活用できる問題領域に大きな差がある。

>>805
x = x + 1 は算数の意味論で言えば明らかに偽な文だが、数学の世界であってもこれが
有意義になる意味論を定義することはできる。
なので一般性をもってその観点でそれを否定することはできない。
命令型プログラミング言語において、この式または文が、x + 1 が環境への参照であり、
x = は環境への束縛の操作であるという意味論であることを想起させにくいという点で
いえば同意。

812 :デフォルトの名無しさん:2009/07/13(月) 20:43:07
>>810
set-car!,set-cdr!は対象がpairであることまでは破壊しないので、
pairとしての表現を持たない空リストにするのは無理じゃないかな。

813 :デフォルトの名無しさん:2009/07/13(月) 20:53:23
gosh> (let ((src (list 'a 'a)))(set-car! src 'quote) (set-cdr! src '(()))(eval src (interaction-environment)))
()

;; unko-

814 :デフォルトの名無しさん:2009/07/13(月) 21:42:37
>>805
> x = x + 1

C/C++ では lvalue と rvalue を区別してフォーマルな意味論を与えられている。
後付けの感は拭えないが、ちゃんと扱える理屈は存在する。
厳密な意味においては数学的とは言えない面はあるけど、
プログラミングに必要な要素ってのを考えると充分な妥協だと思う。

815 :デフォルトの名無しさん:2009/07/13(月) 22:25:27
>>805
Hoare 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対応の何と実用的なことか…

816 :デフォルトの名無しさん:2009/07/13(月) 22:39:18
>>805
代入と等式を混乱していないか

817 :デフォルトの名無しさん:2009/07/13(月) 23:02:30
http://tinyurl.com/mwees3
なんで16年前のメールがgoogleグループにあるんだ?

818 :デフォルトの名無しさん:2009/07/13(月) 23:09:09
ログが残っているから

819 :デフォルトの名無しさん:2009/07/13(月) 23:34:06
http://tinyurl.com/m92nbe
5月には圏論をやっとる。

820 :デフォルトの名無しさん:2009/07/13(月) 23:42:43
直リン張らないほうがいいな。すまん。

821 :805:2009/07/14(火) 07:36:23
>>815
知りたかったのはそういうことです。
関数プログラミングは高校で習った帰納的定義、数学的帰納法など
普通の数学の延長にあるように思えました。
一方、命令型の破壊的代入を主体とするものには理屈はあるのだろうか?
と思っていました。実用的なものが関数型だけで書けるとは思ってないのですが。

822 :デフォルトの名無しさん:2009/07/14(火) 07:58:33
Static single assignment的に、
X_1 = X_0 + 1
と考えると面白い。
あるlambda式をlambda droppingすると、それは、
対応するSSA文をoptimal変換したことと同じ。

823 :デフォルトの名無しさん:2009/07/14(火) 09:11:10
>>821
それならホーア論理じゃなくてチューリング機械じゃないの?

824 :デフォルトの名無しさん:2009/07/14(火) 11:49:11
・表示的意味論(ピラミッドの頂点=神)
数学の延長。

・公理的意味論
ホーア論理。長い証明を書く羽目に。

・操作的意味論(食われるだけの存在=ミジンコ)
抽象機械。

825 :デフォルトの名無しさん:2009/07/14(火) 16:03:26
>>824
言いたいことはわからなくもないが、3つとも数学だろ。

826 :デフォルトの名無しさん:2009/07/14(火) 16:25:00
>>821
意味論というより、命令型プログラミングの根拠となる計算モデルを
知りたいということではないのか?
だとすれば、RAMモデルでは破壊的代入が定義されている。

827 :デフォルトの名無しさん:2009/07/14(火) 22:34:41
>>824
Aczelの項書換えシステム。文脈原理。

828 :デフォルトの名無しさん:2009/07/14(火) 23:08:19
>>805が知りたいこととは違うかもしれないが
プログラミング言語論に関しては
構文論(syntax)と意味論(semantics)という大きな分類がある
>>824の分類は意味論(semantics)の中での分類

構文論はx=x+1の数学的な意味は考えずに
これら言語の構造自体について扱う
式の「意味」という意味では
代入に=ではなく:=や<-を代入に割り当てている言語もあるわけで
構文と意味は独立なわけ

そもそも数学は代入のような副作用ってあまり扱ってないように思う
俺が知っている中で副作用を扱っているのは
線形論理ぐらいかなぁ
A:「100円持っている」
B:「80円以上持っていればパンが買える」
C:「50円以上持っていればチョコレートが買える」
A→Bは真
A→Cは真
よって「100円持っているならばパンとチョコレートが買える」

829 :デフォルトの名無しさん:2009/07/14(火) 23:31:26
線形論理ってアスペルガー症候群みたいな感じだね。

830 :デフォルトの名無しさん:2009/07/15(水) 00:14:28
逆では?
線形論理では、上の例でA→B∧Cが成り立たない。

831 :デフォルトの名無しさん:2009/07/15(水) 04:13:43
>>828
805です。自分でも何を知りたいのか混乱していました。
表示的意味論です。
「プログラム意味論」横内寛文著(赤本)は持っているのですが
よく理解できていません。R^5RSに収録されているのは表示的意味論
とのことで理解したいとは思うのですが。

ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
そうですが何故なのかと思っています。

832 :デフォルトの名無しさん:2009/07/15(水) 05:12:42
Operational Semanticsは意味論を勉強してなくても簡単に理解できるからな。

833 :デフォルトの名無しさん:2009/07/15(水) 05:18:25
> 「プログラム意味論」横内寛文
その本読んでみたいんだけど売ってないんだよね。

834 :デフォルトの名無しさん:2009/07/15(水) 12:17:28
>>831
>ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
>そうですが何故なのかと思っています。

表示的意味論が分かり難い上に実装にも証明にもあまり役に立たないから。
しかもR5RSのは矛盾だかあいまいさが証明されてたはず。

835 :デフォルトの名無しさん:2009/07/15(水) 17:43:24
>>805
意味論を理解することが目的なら、もう少し具体的に今どこがわからないのかを
示せばここで解説される可能性はある。

意味論がさっぱりわからん、ということでしかないとすると、本読め、以外にない。

意味論を理解することが目的じゃなくて、何かをするために意味論を理解したい
なら、目的を示した方がいいと思う。それについて助言可能かもしれない。

836 :デフォルトの名無しさん:2009/07/15(水) 18:08:29
>>828
いや、変数、変項、というのは形式的な数学では日常茶飯事だから、
代入というのは数学でもよくある概念じゃないか? それは人間の
頭の中で実施されることが多いが、何かを証明するときに紙に
書いたりもする。

よくある概念であるがゆえ、それ自体が明示的な対象となるのは数学基礎論
にはなるが。

あと、一見代入だからといって副作用を伴うとは限らない。
述語論理のユニフィケーションとかもあるし。

837 :デフォルトの名無しさん:2009/07/15(水) 18:17:42
代入?いいえ項書換えです

838 :デフォルトの名無しさん:2009/07/15(水) 18:25:32
>>835
805です。数学がわからないと数学を必要とするコンピューターの理論も
理解できないのではないかと思いしばらくの間、数学の勉強に行っていました。
目的はプログラムと数学との関連の理解です。
本を読みつつ、ご助言を仰ぐこともあるかもしれません。よろしくお願いいたします。


839 :デフォルトの名無しさん:2009/07/15(水) 18:49:37
真面目に勉強するなら2chにレスしてないで本読めでぶ

840 :デフォルトの名無しさん:2009/07/15(水) 19:03:00
>>839
ああ、ここは2chだってことを忘れてた。でも玉石混交だから。

841 :デフォルトの名無しさん:2009/07/15(水) 19:18:18
>>838
それなら、まずは計算可能性理論を勉強してみると良いな。

842 :デフォルトの名無しさん:2009/07/15(水) 20:27:45
>>838
上にでてきたfjとか。2chだとせっかくの話が消えてしまう。
ただ、迷惑にならないようにしたほうがいいだろうけど。

843 :デフォルトの名無しさん:2009/07/15(水) 21:04:29
>>802
>また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
>すべてという意味なら、それは正しくない。

難しい話になるとは思うのですが、現時点では”数学”とは何を指している
言葉だといえるのですか。
マックレーンはアイディアを抽出化して形式化したものが数学だ、形式機能主義だ
と言ってるんですけど、それって、つまり数学的対象とはあくまで形式という事なんですか。

確かに、理解していないバカではある。書いてて確かに思う。
けど、表立っては出ないがこういう話が問題になる分野領域は存在する気がするんだよね。

844 :デフォルトの名無しさん:2009/07/15(水) 21:16:33
もう十分以上の情報が出ているぞ

耳学問としょうもないプライドのせいで
無知だとかバカだとか思われたくないからいつまでも演説を続けるんだろうが
いいかげん黙れ

845 :デフォルトの名無しさん:2009/07/15(水) 21:19:29
805=815で釣りでもやってるのかと思ったが

846 :802:2009/07/15(水) 22:41:53
>>844
おお、すまなかった。誰を指しているかがイマイチわからんが、
この流れをつくった私がいけないのだろう。

>>843
というわけで、すまんが退散しようと思う。844の言うとおり、
結構いろいろな情報が出ているので、参考にして欲しい。

お邪魔しました。



847 :デフォルトの名無しさん:2009/07/16(木) 01:17:17
>>844
混在してわけがわからないことになってるけど、いくつか独立した話しが
並行して進んでいるんだよ。
それに、そんなぶっきらぼうに言っちゃうとみんなびっくりしてしまうよ。

848 :デフォルトの名無しさん:2009/07/16(木) 01:43:59
たまに情報学板のことも思い出してあげてください。

849 :デフォルトの名無しさん:2009/07/16(木) 01:48:23
確かに最近の話題は情報学板の方が向いてるな。
あそこ過疎りすぎだけど、見てる奴はそれなりにいるっぽい。

850 :デフォルトの名無しさん:2009/07/16(木) 03:37:46
>>838
数学とか理論計算機科学の話題だったらプログラム板はやめておいたほうがいいよ。
でたらめな情報が多すぎてろくなことがないから。

851 :デフォルトの名無しさん:2009/07/16(木) 04:02:29
>>850
情報学板に移動するよ。ありがとう。


852 :デフォルトの名無しさん:2009/07/16(木) 08:45:47
ERR5RS(だっけ?)って幾らかでも流行ってるんですか?

853 :デフォルトの名無しさん:2009/07/16(木) 13:51:52
顧みるにR5RS自体流行ってるかな?
お察しください

854 :デフォルトの名無しさん:2009/07/16(木) 16:05:08
LOL邦訳本ってamazonじゃ普通に買えないんだろうか。
ページはあるんだけど、なぜかプレミア価格の出品しかない。(´・ω・`)

855 :デフォルトの名無しさん:2009/07/16(木) 22:57:07
まさかすぐに絶版にしたりしないよね?

856 :デフォルトの名無しさん:2009/07/17(金) 00:11:40
SICPの悪文と格闘している間にLOL翻訳が出てしまったんだな。
On Lispも積読になってるが、LOLも積読しとく事にしよう。
以上チラ裏でした(・∀・)

857 :デフォルトの名無しさん:2009/07/17(金) 01:43:00
>>854
Let 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冊 在庫有り

858 :デフォルトの名無しさん:2009/07/17(金) 01:43:50
>>855
弱小出版会社だから、東販/日販の初回取り扱いが少なかったんだと思う。
注文すれば、出版社に発注されるでしょう。在庫はしているだろうから。

859 :デフォルトの名無しさん:2009/07/17(金) 05:31:14
ふぁびょったってしゃーない。

860 :デフォルトの名無しさん:2009/07/17(金) 05:33:54
と書いたけど、LOLが売れるとはおもえない。グレアムのような知名度もなけりゃ
LOLそのものがそれほど定評だったレビューもなかった。
なにより、極度にマニアックだから。
細く長く生き残ればよいという本だと思う。

861 :デフォルトの名無しさん:2009/07/17(金) 05:55:53
On Lisp はついてけないけどLOLは単にLisp最強伝説本として楽しめた

862 :デフォルトの名無しさん:2009/07/17(金) 07:36:45
COMIC LOL

863 :デフォルトの名無しさん:2009/07/17(金) 13:09:17
LOLは前提知識それほど必要ないの?

864 :デフォルトの名無しさん:2009/07/17(金) 13:28:47
いまから買いに行こうと思ってたのに・・・・・

865 :デフォルトの名無しさん:2009/07/17(金) 14:49:16
>>863
コードが短くて解説がうまいから分かった気分になれる

866 :863:2009/07/17(金) 16:44:02
>>865
じゃあ丘リスパーの漏れにぴったりでつね(自嘲

867 :デフォルトの名無しさん:2009/07/18(土) 02:23:20
>>852
ERR5RSは、実際に対応してるのはLarcenyくらい。
提唱者のWilliam D Clingerが開発してるから当然だけど。
Ypsilonは対応予定。Gaucheもそのうち対応する予定。予定は未定。
他は知らない。

ちなみに、ERR5RSで書いてる人はいる。主にLarceny-usersとかに。
というわけで、will先生の活躍に御期待下さい。

868 :デフォルトの名無しさん:2009/07/19(日) 07:43:54
連休中、みなさんはLOLを読みふけるのでしょうか^^

869 :デフォルトの名無しさん:2009/07/19(日) 09:23:21
とりあえず著者はVimmerってとこまで読んだ。

870 :デフォルトの名無しさん:2009/07/19(日) 09:38:45
とりあえずForth最高!ってところまで読んだ。

871 :デフォルトの名無しさん:2009/07/19(日) 11:43:17
postscript万歳!ってところまで書いた


872 :デフォルトの名無しさん:2009/07/19(日) 12:36:02
LOL、オビの煽りに苦笑い、スルーw

873 :デフォルトの名無しさん:2009/07/19(日) 13:46:39
lolって略はネトゲ的にどうなんだろう

874 :デフォルトの名無しさん:2009/07/19(日) 13:55:47
LOLは元々ネトゲ用語じゃないよ

875 :デフォルトの名無しさん:2009/07/19(日) 18:40:27
MUDからUsenetに輸入された可能性もあるので一概にそうとも言えない

876 :デフォルトの名無しさん:2009/07/19(日) 21:09:04
emacs論だけ立ち読みすれば十分な本だな

877 :デフォルトの名無しさん:2009/07/19(日) 22:35:35
>>854
今見ると「一時的に在庫切れですが、商品が入荷次第配送します。 」だそうですよ

878 :デフォルトの名無しさん:2009/07/19(日) 22:48:12
タイトルがかっこいい
class over defとは違うんですみたいな

879 :デフォルトの名無しさん:2009/07/20(月) 00:51:52
lol=laugh out loudly だからwwwwwwwww だよ。

880 :デフォルトの名無しさん:2009/07/20(月) 21:28:37
Lispは関数型言語じゃない。まで読んだ。

881 :デフォルトの名無しさん:2009/07/20(月) 21:59:02
すみません、私はschme大好き人間なんですが、
common lispの defunが嫌いです。「でふん」っていう語感が。
やっぱしscheme最強でしょ。

882 :デフォルトの名無しさん:2009/07/20(月) 22:02:31
致命的なまでに英語が苦手なようだなw

883 :デフォルトの名無しさん:2009/07/20(月) 22:05:35
でふん
デフィネ

884 :デフォルトの名無しさん:2009/07/20(月) 23:05:35
つか気に入らないなら自分で好きな名前にすればいいじゃない
これだから最近scheme始めたガキは困る

885 :デフォルトの名無しさん:2009/07/21(火) 00:39:46
(defmacro define (fun_arg body)
`(defun ,(car fun_arg) ,(cdr fun_arg) ,body))

886 :デフォルトの名無しさん:2009/07/21(火) 00:58:24
すみません、私はschme大好き人間なんですが、
common lispの funcallが嫌いです。「ふんこーる」っていう語感が。
やっぱしscheme最強でしょ。

887 :デフォルトの名無しさん:2009/07/21(火) 01:08:10
labels使え

888 :デフォルトの名無しさん:2009/07/21(火) 01:19:29
let over set!

889 :デフォルトの名無しさん:2009/07/21(火) 03:07:15
letrec over μ

890 :デフォルトの名無しさん:2009/07/21(火) 03:17:25
scheme大好きな私ですがたった一つ好きになれないのがランバダです。
語感が嫌ですね。

891 :デフォルトの名無しさん:2009/07/21(火) 03:40:41
コードギアスでさぁ、
ルルーシュが C.C. の名前を呼ぶ場面があるでしょ。
call/cc を見るたびに連想するんだ

892 :デフォルトの名無しさん:2009/07/21(火) 04:01:29
でっかいアニメ好きです

893 :デフォルトの名無しさん:2009/07/21(火) 04:39:34
俺はCCガールズっていう人達見ると思い出すな。

894 :デフォルトの名無しさん:2009/07/21(火) 04:49:01
それじゃあ、思い出さないんですね。見ることないもんね。


895 :デフォルトの名無しさん:2009/07/21(火) 05:01:59
その代わりにCCレモンをよく見るからね。

896 :デフォルトの名無しさん:2009/07/21(火) 08:54:45
lispのコードを出してくれるyacc,lexって有りますか?


897 :デフォルトの名無しさん:2009/07/21(火) 09:19:46
CCっていったらサクラだろJK

898 :デフォルトの名無しさん:2009/07/21(火) 09:25:46
俺もNHKでやってるという免罪符で見てた>CCさくら
なんか色使いが綺麗だったし
話自体はよくわからなかった

899 :デフォルトの名無しさん:2009/07/21(火) 09:57:57
それを言うならリリカルなんて

900 :デフォルトの名無しさん:2009/07/21(火) 10:46:49
リリカル・トカレフ・キルゼムオール

901 :デフォルトの名無しさん:2009/07/21(火) 11:03:05
りこさんのエロ画像キボンヌ

902 :デフォルトの名無しさん:2009/07/21(火) 13:09:07
おまいはこっちに行けw
http://pc12.2ch.net/test/read.cgi/tech/1183396621/

903 :デフォルトの名無しさん:2009/07/21(火) 13:42:06
もっとネタscheme処理系を!


904 :デフォルトの名無しさん:2009/07/21(火) 13:44:06
いぷしろん萌え

905 :デフォルトの名無しさん:2009/07/21(火) 16:17:27
VSCM萌え

906 :デフォルトの名無しさん:2009/07/21(火) 20:47:00
Mathematica 萌え

907 :デフォルトの名無しさん:2009/07/21(火) 21:29:44
割と普通に関数型として使えるのには感心したが
正直書きにくかった

908 :デフォルトの名無しさん:2009/07/21(火) 22:30:28
Little Schemerを読んでるんですが、Qを読んですぐAを読むっていう
ただ読んでるだけなんですが、
みなさんはちゃんと自分で答えを考えながら読んでるんですか?

909 :デフォルトの名無しさん:2009/07/21(火) 22:32:49
俺は考えて読んだけど、好きなようにすればいいんじゃないかな。
一度全部読んでから、次は自分で考えれば?
たぶん二回目でも100点にはならないと思うから、
二回読むことには意味があると思う。


910 :デフォルトの名無しさん:2009/07/22(水) 00:26:36
>>909
なるほど、ありがとうございます。
いま3章の終りに来ていますがなかなかなか複雑で頭を使います。がんがる。

911 :デフォルトの名無しさん:2009/07/22(水) 02:23:55
LOLなんだけど、ざっと斜め読みしてたら、
マクロを本当に使いこなせるのはSchemeで修行してきた人達だ。
みたいなことが書いてあった。

912 :デフォルトの名無しさん:2009/07/22(水) 04:29:56
Schemerのほうが偉い症候群ですねわかります

913 :デフォルトの名無しさん:2009/07/22(水) 17:44:32
↓ここからCLerの猛反論

914 :デフォルトの名無しさん:2009/07/22(水) 18:19:14
まあ最近はSchemeからこの世界に入って、
Schemeで修行せずにCommon Lisp入る人の数の方が少ない、
ってのはそれほど間違ってないと思う。
Schemeは取り上げる大学が多いからね。
そんな噛みつくことじゃないのでどうでもいい。

915 :デフォルトの名無しさん:2009/07/22(水) 19:25:41
C99/C++のコメントを除去したかったので
コードを書いたんだけどえらい遅い
改良するとしたらどの辺でしょうか?

最初非末尾再帰版で書いて
末尾再帰に書き直したのですが
相互再帰関数は通常最適化されないのですかね?
処理時間が通常の再帰版と同じで
250kbのファイル(5千行中4000行がコメント)
を処理するのに100秒かかります

コード(続く)

916 :デフォルトの名無しさん:2009/07/22(水) 19:29:01
;remove comment
(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) '()))))

917 :デフォルトの名無しさん:2009/07/22(水) 20:18:56
>>915
test の中の (length lst)

918 :デフォルトの名無しさん:2009/07/22(水) 20:21:17
コメントが現れる度string->listしてる所、
(test "/*" l)とかを
(test `,(string->list "/*") l)
にしとくとか。(test側も修正)
それと、100秒掛かるって言われても判らんから
環境と処理系も書いて欲しいな

919 :デフォルトの名無しさん:2009/07/22(水) 20:25:49
あ、`',(string->list "/*")にしないとだめだったかな
動かしてないから間違ってたらごめん

920 :デフォルトの名無しさん:2009/07/22(水) 21:03:42
(define (test str)
 ;; Let Over Lambda
 (let ((l (string->list str)))
  (lambda (lst) ...)))

(define test/* (test "/*"))
(define test*/ (test "*/"))
(define test// (test "//"))

921 :デフォルトの名無しさん:2009/07/22(水) 21:19:19
lengthをやめたら、100秒が3秒になりました
長さはmaxで2と固定なので
(if (or (not (pair? lst)) (not (pair? (cdr lst)))) #f ...)
に変更しました

また、string->listの箇所も修正するとさらに早くなりました
(環境はGauche+cygwin)
ありがとうございました!

922 :デフォルトの名無しさん:2009/07/22(水) 21:24:16
上の"/*"みたいな最終的にstring->listに掛かるようなやつって
gaucheじゃ定数伝播してくれないのかな

923 :デフォルトの名無しさん:2009/07/23(木) 12:29:59
数値計算を主体でプログラムしてると
あまり自分でマクロを作る場面に出くわさない
on lispのマクロはそのまま使ったりするけど

924 :デフォルトの名無しさん: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)))

925 :デフォルトの名無しさん:2009/07/23(木) 13:28:31
何が?

926 :デフォルトの名無しさん:2009/07/23(木) 17:44:08
いや、なんでもない

927 :デフォルトの名無しさん:2009/07/23(木) 17:48:00
let/ccってのはPLTやGaucheにあるね

928 :デフォルトの名無しさん:2009/07/24(金) 00:17:53
redditから
ttp://www.google.com/search?hl=en&q=recursion

929 :デフォルトの名無しさん:2009/07/25(土) 04:03:28
エロファイルのサンプルをダウンロードして来ました.このファイルはzipで圧縮されておりファイル名の末尾がアルファベットもしくは数字+拡張子zipになっており,展開すると拡張子が取れたディレクトリ名の中にファイル名+拡張子wmvのファイルが出現します.
例:
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

教えてくださいエロい人


930 :デフォルトの名無しさん:2009/07/25(土) 05:16:08
zshで
unzip *.zip
for d in *a; mv ${d%a}[bcd]/*.wmv $d
for d in *1; mv ${d%1}[234]/*.wmv $d
rmdir *

試してないけど。

931 :デフォルトの名無しさん:2009/07/25(土) 05:18:15
> unzip *.zip

訂正
for f in *.zip; unzip $f


932 :デフォルトの名無しさん:2009/07/25(土) 09:45:41
MatzLispを搭載してるmfilerで展開&連番リネーム

933 :デフォルトの名無しさん:2009/07/25(土) 18:25:06
MatzLispなんてLispはありません
Lispと言うからにはS式とマクロがないと駄目です

934 :デフォルトの名無しさん:2009/07/25(土) 19:28:09
lisp--

935 :デフォルトの名無しさん:2009/07/25(土) 19:52:08
l4u…

936 :デフォルトの名無しさん:2009/07/25(土) 20:07:36
AVRやPICで使えるSchemeってある?LEGO Mindstrom用は見つけたけどマイコン用は見つからなかった。

937 :デフォルトの名無しさん:2009/07/25(土) 20:09:27
stalinでCコード吐かせてgccでコンパイルする

938 :929:2009/07/25(土) 21:15:23
なんだ結局正規表現に頼るのか

939 :デフォルトの名無しさん:2009/07/25(土) 21:19:55
こういう時のための正規表現だからね。

まぁ、正規表現に親を殺されて憎んでいるから絶対使いたくないとか、
そういう理由があるなら仕方ないかもしれんが。

940 :デフォルトの名無しさん:2009/07/25(土) 21:50:57
正規表現殺人事件
「私は見ました!! 彼はバックトラックに轢き殺されたんです!!」

941 :デフォルトの名無しさん:2009/07/25(土) 22:10:15
オートマでした

942 :デフォルトの名無しさん:2009/07/25(土) 22:47:25
>>936 Marc Feeleyの研究室で何年か前にPIC用Schemeコンパイラを作ってた人がいたと思う。


943 :デフォルトの名無しさん:2009/07/25(土) 22:54:44
>>938
やりたければ SRE でも PEG でも使うがいい。
やろうとしてることがいかにもスクリプト言語的なので、
手段だってそれに見当ったものになるだけだろ。
そこに Lisp らしさを求めたところでナンセンスなだけだ。

944 :929:2009/07/25(土) 23:30:41
>>943
> やりたければ SRE でも PEG でも使うがいい。
SRE S-expression Regular Expression
PEG Parsing Expression Grammar
ですね.勉強します.

> やろうとしてることがいかにもスクリプト言語的なので、
はい,あえてこういう問題をLisperはどう考えるか知りたくてきいてみました.
ありがとうございました.



945 :デフォルトの名無しさん:2009/07/26(日) 01:33:50
>>944
というか、そもそもLisp族での回答が出てないじゃないか。

典型的なパターンだと、ディレクトリを探索する手続きに、
ファイルごとの処理を行う手続きを渡すのがLisp的だと思う。
文字列のマッチングとかは、SREとかPEGとかあるけど、
特別Lisp的に、ってのは無いんじゃない?

946 :デフォルトの名無しさん:2009/07/26(日) 03:30:51
まぁ、質問が悪すぎたね。
物事を「無駄に難しく」解決したくてLispをやってる人なんて、
そう居ないわけだからさぁ。

947 :デフォルトの名無しさん:2009/07/26(日) 05:04:52
だが、SICPの日本語は無駄に難しい。

948 :デフォルトの名無しさん:2009/07/26(日) 06:05:22
質問者の頭が悪すぎた

949 :デフォルトの名無しさん:2009/07/26(日) 07:46:32
>>946
そうだったのか。おれは"物事を「無駄に難しく」解決したくてLispをやってる"と思ってた。
頭の体操のために開発された言語だと思っていたが間違っていたか。、

950 :デフォルトの名無しさん:2009/07/26(日) 08:11:56
まぁ、間違ってるね。
言語としてのLispは、ラムダ算法の表現法として開発されたのであって、頭の体操の為ではないし、
「頭の体操」が主に指向するのは、物事を「無駄に難しく」解決することではなく「美しく」解決することだし、
(その美しさを理解or表現する力を身につけるのが「難しい」ということはあり得るけど)
句点のあとに読点つけるのは、正式な日本語としても、2chによく見られる崩しとしてもおかしいし。

951 :デフォルトの名無しさん:2009/07/26(日) 08:38:17
「。、」 は

↓こんな風に落ち込んでる人の顔文字だと解釈した。
。、
-

952 :デフォルトの名無しさん:2009/07/26(日) 09:21:18
>>950
読点消し忘れたからってそんなに喜ぶなよ。
ラムダ算法の表現法として開発されたということはラムダ算法に無縁の人には
いらない言語ということか納得できる答えだ。頭の体操の定義はおいといてい
らない人には頭の体操以外のなんでもない。

953 :デフォルトの名無しさん:2009/07/26(日) 09:38:13
> 言語としてのLispは、ラムダ算法の表現法として開発されたのであって、

リスト処理用の言語として作られたんであって、ラムダは用語以外関係ない。


954 :デフォルトの名無しさん:2009/07/26(日) 10:25:17
>>952
何をムキになって、相手の言葉からできるだけ相手が辿り着いて欲しく無さそうな結論を見出す
中二病っぽいクソゲーを頑張ってるのかわからないけど、
最初に開発した人の目的なんて、その後の人々にはそこまで関係のあるものではないよ。
Unix開発したい人だけがCを使うわけでもなし。

955 :デフォルトの名無しさん:2009/07/26(日) 10:27:58
あと、「いらない人には」って条件つけちゃったら何でもアリだよな。
板チョコから人命まで、「いらない人には価値を見出すことができない」のは共通でしょ?

956 :デフォルトの名無しさん:2009/07/26(日) 10:33:29
あなたもわざわざ構いなさんなw

957 :デフォルトの名無しさん:2009/07/26(日) 10:35:21
>>953
リスト処理用のFORTRANライブラリとして歩みだし、
ラムダ算法の表現を模索するうちにプログラミング言語となった。
といってもそれほど間違ってないと思う。

958 :デフォルトの名無しさん:2009/07/26(日) 10:44:41
>>956
でも、そんな長くない文章でかなり凄いこと言いまくってて、つい反応してしまうだろうこれはw
「Xの定義はおいといて、X以外のなんでもない」って物言いも、かなりキてるし。
「頭の体操のために開発された言語」という話を「いらない人には頭の体操」まで一気に前線下げて、
それを鼻息のパワーアップでカバーしようとしてるのも、えらくシュールだし。
なんか変な資質あるぞ、この子w

959 :929:2009/07/26(日) 10:55:16
なるほど,Lispにとってこういう問題は難しいのですね.
Lisperと名乗る人も身近なものにはLispを使わない.
ググったところで教科書の写経をするページしか見つからないわけですね.


960 :デフォルトの名無しさん:2009/07/26(日) 11:12:44
おれがよく行くアニメ系板ならわんさかこーゆーのいるけど。

>>959
Lispに限らず他言語のスレ行っても「ファイラでやれ」「シェルでやれ」って反応が殆んどだと思うが。
あーでもrake使ってエロ画像整理とかはやってる人が稀にいるかもしれん。

正しく道具を使い分けるよう心がけてる人が多いのはどの辺だろうねぇ。

961 :デフォルトの名無しさん:2009/07/26(日) 11:14:52
ttp://evalwhen.com/pregexp/index.html
正規表現も自前で実装するのが Lisp クオリティ

962 :デフォルトの名無しさん: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 >))
こういうのって既にあったりします?
それか既存の関数の組み合わせでもっと楽に作れたりしませんかね


963 :デフォルトの名無しさん: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 >))

964 :デフォルトの名無しさん:2009/07/26(日) 11:37:04
>>959
どういう過程を辿ってそういう結論に至ったのかは知らないけど、
別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。
某ネ実ゲーの武器の性能計算したりとか、もう日常感たっぷり。

ネット見ると結構そういうのあると思うんだけどな。
ニコニコのコメント抜き出したり、WinampをSchemeで操作したりしてる人とかいたよ。

965 :929:2009/07/26(日) 11:40:01
> 正規表現も自前で実装するのが Lisp クオリティ
正規表現を必要としないのが Lisp クオリティと思ってた.

966 :デフォルトの名無しさん:2009/07/26(日) 11:51:17
>>916とかは正規表現では出来ない例
正規表現で出来ない問題を出せよ

967 :929:2009/07/26(日) 11:58:49
>>964
> >>959
> どういう過程を辿ってそういう結論に至ったのかは知らないけど、
> 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。

はい,945の方がおっしゃってるように
ディレクトリを探索する手続きに,ファイルごとの処理を行う手続きを渡すというのは理解できるのですが
ここで正規表現って発想ではなくリードマクロを使って...てのを期待してました.



968 :929:2009/07/26(日) 11:59:36
>>966
> >>916とかは正規表現では出来ない例
> 正規表現で出来ない問題を出せよ

やりたいことはエロファイルの整理です.

969 :デフォルトの名無しさん:2009/07/26(日) 12:04:17
エロファイルの整理がしたいんじゃなくて
Lispのリードマクロを使った回答を知りたい、が正しいんじゃないの?

その目的なら>>930-931で回答が出てるんだから

970 :929:2009/07/26(日) 12:10:38
やりたいことは,エロファイルの整理
知りたいことは,シェルスクリプトなどで簡単にできる問題を lisp脳はどう考えるかです.

971 :デフォルトの名無しさん:2009/07/26(日) 12:17:12
シェルスクリプト使うよ

972 :デフォルトの名無しさん:2009/07/26(日) 12:17:30
(define (a x)
(let ((end (last x)))
(cond ((isalpha end) 'place_a)
((isnum end) 'place_1)
(else (error "tukareta")))))
(for-each a ero)
'placeの所はフォルダにおく処理

973 :デフォルトの名無しさん:2009/07/26(日) 12:27:17
>>970
rename.pl(1)使います。

974 :デフォルトの名無しさん:2009/07/26(日) 12:32:52
>>967
俺その>>945

リーダーマクロについて、何か勘違いをしてる気がする。
根本的に正規表現とは違う層の概念だよ。
独自の記法をS式にマッピングするだけ。

単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
パーザコンビネータとかがそれ。上に出てるPEGとか。

975 :デフォルトの名無しさん:2009/07/26(日) 12:56:46
>>958
あなたには頭の体操は「美しく」解決しなきゃいけないのかそれともそうではないのか。
「美しく」とはどういうことかなどを定義されることをお勧めします。そしてその後レス
してください。

976 :929:2009/07/26(日) 14:30:38
>>974
> リーダーマクロについて、何か勘違いをしてる気がする。

いえ,理解出来ていないというか,誤解しているのでしょう.
だから,相手に対して勘違いをあたえる.

> 根本的に正規表現とは違う層の概念だよ。
> 独自の記法をS式にマッピングするだけ。

ディレクトリ(ファイル)名のリストを作る.そのリストを読み込む際,リードマクロを使って処理をディスパッチする.のかなぁって考えました.

> 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
> パーザコンビネータとかがそれ。上に出てるPEGとか。

文字列処理で正規表現使わない.リードマクロを使う.と言う発想じゃなくPEGを使うって発想するのですね.

977 :デフォルトの名無しさん:2009/07/26(日) 14:44:38
>> リーダーマクロについて、何か勘違いをしてる気がする。
>いえ,理解出来ていないというか,誤解しているのでしょう.

勘違いして理解してるから誤解だろ。

978 :デフォルトの名無しさん:2009/07/26(日) 15:06:02
>>976
リードマクロは表現をS式にマッピングする機能だって上で出てるだろうが。
書いてある表現のパースは必要なんだよ。
違う層の話が入り混じっててわけわかんなくなってるぞ。

979 :デフォルトの名無しさん:2009/07/26(日) 15:20:13
まあ確かにcfgやreは無駄に難しいから
素朴な再帰下降パーサーを高階関数とかで改良していこうという方針は正しい気がする

そして、Perlのような言語がそういう方針転換をするよりも
過去の成果物にとらわれないLispのほうが有利だと言えないこともない

980 :デフォルトの名無しさん:2009/07/26(日) 19:08:54
50以上レスが進んでるから何かと思えばずっと雑談か
暇だなおまいら

981 :デフォルトの名無しさん:2009/07/26(日) 19:53:39
処理系何使ってるあたしはGauche。

982 :デフォルトの名無しさん:2009/07/26(日) 20:40:58
            /\___/ヽ
         /ノヽ       ヽ、
         / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ
         | ン(○),ン <、(○)<::|  |`ヽ、
         |  `⌒,,ノ(、_, )ヽ⌒´ ::l  |::::ヽl  
.        ヽ ヽ il´トェェェイ`li r ;/  .|:::::i |
        /ヽ  !l |,r-r-| l!   /ヽ  |:::::l |
       /  |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄
       /   | .|           | .| ,U(ニ 、)ヽ
      /    | .|           | .|人(_(ニ、ノノ

983 :デフォルトの名無しさん:2009/07/26(日) 20:51:39
テキスト処理を主体としたいわゆる「スクリプト言語」的な使い方をするなら Gauche はやはり強いよなぁ。
日本語の扱いをちゃんとしているところがよい。
Ypsilon なんかはやたら高速なのがよい。
まぁ、用途によるんじゃね?


984 :デフォルトの名無しさん:2009/07/26(日) 20:58:51
Gaucheとclisp、newlispを入れてる
newlispは簡単にwindow出せたりして面白いよ

985 :デフォルトの名無しさん:2009/07/26(日) 21:30:14
ベタで申し訳ないが、schemeの健全なマクロって必要なのか?
正直 ` , ,@ (gensym) だけのほうがスマートだし、変数捕捉されるのも考慮してこそマクロだと思うんだけどなぁ。
schemeの仕様作ってる人は何を心配してるんだろう。ユーザのこと心配してくれてるのかな。
(PGが人が使う用の為に作っちゃダメっていってたよ。)

986 :デフォルトの名無しさん:2009/07/26(日) 21:30:36
ノシ clisp

987 :デフォルトの名無しさん:2009/07/26(日) 21:35:59
不健全なマクロはきたない。健全なマクロのほうが美しい。

988 :デフォルトの名無しさん:2009/07/26(日) 21:54:42
` gensym を必要としなくなれば
シンボルやコンスが無い言語でもマクロが書けるようになるかもしれない

989 :デフォルトの名無しさん:2009/07/26(日) 22:11:13
>>985
モジュール化が絡んでくるとそう単純な話ではない。
scheme と CL ではスコープのルールも若干違う。
健全性に固執しすぎなのは確かかもしれないけど、
Scheme 的な一貫性のためには必要だと思うよ。


990 :デフォルトの名無しさん:2009/07/26(日) 22:21:20
>>985
scheme では同じ名前のシンボルは常に同じシンボルなので、
gensym では名前の衝突を本質的には回避できない。

991 :985:2009/07/26(日) 22:28:07
なるほど。今まで馬鹿みたいに「うは、ペアeval apply ぐるぐる最強!」とか思ってたけど、
ことはそう単純じゃないのね。もうちょっと精進するよ。馬鹿みたいなこといってごめんね。

992 :デフォルトの名無しさん:2009/07/26(日) 23:09:19
純粋さよりも簡潔さを重んじるSchemeとしてはそれこそ
シンプルな古典的マクロの上に保健的マクロを構築するアプローチのほうが合っていると思う
R5RSのなかでもsyntax-rulesは浮いているように感じる

993 :デフォルトの名無しさん:2009/07/26(日) 23:46:52
>シンプルな古典的マクロの上に保健的マクロを構築する

挫折した奴がここにおわす

994 :デフォルトの名無しさん:2009/07/26(日) 23:52:29
>シンプルな古典的マクロの上に保健的マクロを構築する

これをまじめにやろうとすると、言語の構文をほぼ全て上書きして
意味論を追加するってこと
LISPだから可能なんだけど
おれは挫折した

995 :デフォルトの名無しさん:2009/07/27(月) 01:06:27
シンプルさを保つべきだって考えと現実問題を解決するときに少々の汚れ仕事を請け負っても良いの2派閥の間の溝だからなぁSchemeとCommonLISP


996 :デフォルトの名無しさん:2009/07/27(月) 05:59:54
>シンプルな古典的マクロの上に保健的マクロを構築する
Alex Shinn さんの chibi-scheme がそういうような方向性かな
Syntactic Closure の上に Explicit Renaming と Syntax Rules を実装してる
Syntax Rules はまだ動いてないところもあった気がするが
ttp://synthcode.com/wiki/chibi-scheme

997 :デフォルトの名無しさん:2009/07/27(月) 08:13:36
CommonLisp(笑)、Scheme(笑)

これからはF#の時代だからwww

998 :デフォルトの名無しさん:2009/07/27(月) 08:23:37
名前に#が付く言語ってwindows以外のOSで動くの?


999 :デフォルトの名無しさん:2009/07/27(月) 08:32:57
Monoでそれなりには動くらしいよ
使ったことないからよく知らんけど

1000 :デフォルトの名無しさん:2009/07/27(月) 09:25:26
SML#があるじゃん

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

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

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