全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
Lisp Scheme Part26

1デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/24(金) 20:36:36
>>1('-')乙 これは1乙じゃなくていちもつなんだからね!
15デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/25(土) 01:11:27
>>1乙……っ!!!
20デフォルトの名無しさんsage2009/04/25(土) 01:25:36
>>1
これはポニーテールがうんたらかんたら
21デフォルトの名無しさんsage2009/04/25(土) 11:23:43
前スレのつづき
落ちそうなのでこっちで(もう話も終わると思うけど)

ここのスレはLispとSchemeの合同スレであり、派生したいヤツは勝手に派生してくれって話なのかな?
22デフォルトの名無しさんsage2009/04/25(土) 12:59:32
もてたいためのリスプハッカー
あなた動機が不純なんだわ
フムフムヌクヌクアプアア
いつも手にして歩いてる
R6にはケチつけて
スーパーハカーを気取っているけど
何かが違うわ
かっこ かっこ かっこ かっこ
かっこ かっこ かっこばかり 先ばしり
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして schemeあなたの物じゃない
23デフォルトの名無しさんsage2009/04/25(土) 13:00:30
人目気にするリスプハッカー
言語仕様をANSIにしてる
再帰するのがエクスタシー
呼べばnilまで帰らない
もしも誰かに聞かれたら
SICPはとうに読み終えました いい本でした
かっこ かっこ かっこ かっこ
かっこ かっこ かっこつけて 泣きたいわ
リスプハッカー・ウィドウ
リスプハッカー・ウィドウ
いい加減にして lispはcommon一つじゃない
24デフォルトの名無しさんsage2009/04/25(土) 13:09:38
ロックンロールウィドウって解説つけなくてもわかるオッサンばかりのスレ
25デフォルトの名無しさんsage2009/04/25(土) 17:00:45
おっさんですがわかりません><
26デフォルトの名無しさんsage2009/04/25(土) 23:14:16
>>25

ttp://www.youtube.com/watch?v=saIIZhhxsZo
27デフォルトの名無しさんsage2009/04/25(土) 23:22:45
>>26
このころ、二十歳なんだって
すごいね

copperpony (7 か月前) 表示 非表示 +12 スパムとしてマーク 返信
20歳でこの凄みは21世紀の日本でも完全に大スターになれる。
こんなに迫力があるロック歌手が今いない
舞台映えするし美人で宝塚でも大スターになれそう
28デフォルトの名無しさんsage2009/04/25(土) 23:56:25
ひとつ賢くなった
29デフォルトの名無しさんsage2009/04/26(日) 08:25:46
山口百恵だったんだ、「カッコ、カッコ…」の所だけは聞いたことがあった。
30デフォルトの名無しさんsage2009/04/26(日) 09:37:39
アン・ルイスの曲だから、本人も歌ってるよ。
31デフォルトの名無しさんsage2009/04/27(月) 20:34:33
6変数関数の3,5番目の変数だけ束縛したカリー化がしたい
metabangに入ってるかと思ったらなかった

違うテクニックを使うのが普通なんでしょうか
32デフォルトの名無しさんsage2009/04/27(月) 20:54:14
cut?
33デフォルトの名無しさんsage2009/04/27(月) 21:39:39
Internet(YouTube, Web browsing, mail, etc)レベルの利用のコンピュータに関心のある人が初めてプログラミング言語を習うとして
Schemeは挫折せずにこなせるレベルだよね?

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

だから、何?と聞かれても特にないけど
34デフォルトの名無しさんsage2009/04/27(月) 21:41:32
うほっ、文字化けした

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

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

だから、何?と聞かれても特にないけど
35デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/27(月) 22:16:46
>ただ、情報量はまだそれほど多くないかな?
そうでもなさそうだった

俺のおすすめルートは
 やる気ある -> scheme
 そうでない -> python
 または python -> scheme
37デフォルトの名無しさんsage2009/04/27(月) 22:18:01
宝石が好き
 -> 金、銀、perl
38デフォルトの名無しさんsage2009/04/27(月) 22:18:48
Ruby
39デフォルトの名無しさんsage2009/04/27(月) 22:20:42
>>37
ブルーダイヤで洗濯しまくる
40デフォルトの名無しさんsage2009/04/27(月) 22:26:30
perlは好きだけど
初心者にすすめるならrubyかな
perlは変なスタイルのプログラムが非常に多いから。
同じことがrubyにも言えるかもしれないが
perlよりはマシだろう、多分
41デフォルトの名無しさんsage2009/04/27(月) 22:31:49
>>39
オサーン乙
42デフォルトの名無しさんsage2009/04/27(月) 22:39:28
>>35

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

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

>>34

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

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

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

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

はじめっからオブジェクト指向だと、大喜びも何もないだろうから、
そんなくだらんことはしないのかな。
44デフォルトの名無しさんsage2009/04/27(月) 22:46:08
>はじめっからオブジェクト指向
便利さがあって当たり前の世代はまだ出会ったこととが無いけど、
たぶんニュータイプでしょう
45デフォルトの名無しさんsage2009/04/27(月) 22:59:29
そういう意味では、アセンブラ何それ?おいしいの?って世代は多いでしょ
46デフォルトの名無しさんsage2009/04/27(月) 23:02:32
話をlispっぽく戻すと(?)
pythonの__hoge__系関数はCLOSの総称関数的だよね。
47デフォルトの名無しさんsage2009/04/27(月) 23:18:28
perl、 rubyは大体同じようなもの。
javaもまあ、大差ない。Cほど簡単ではないが。
しかしPythonはちょっと難しい。明らかにワンランク上。
Schemeとなったら、さらにもうワンランク上の難しさだね。



読み方が。
48デフォルトの名無しさんsage2009/04/27(月) 23:27:28
Lisp/Schemeって日本で一番流行ったのっていつ?
人工知能で注目された時代?
それともずっとマイナー?
49デフォルトの名無しさんsage2009/04/27(月) 23:27:41
単純なメモ帳ではプログラミングの開始もできないのはごくわずかでもない初心者に敬遠させてるよね
50デフォルトの名無しさんsage2009/04/27(月) 23:30:33
確かに。
最初から gauche を正しく読めた人は少ないかも知れん。
51デフォルトの名無しさんsage2009/04/27(月) 23:31:37
>>39のネタがわかった時点で>>41もおっさんだw
52デフォルトの名無しさんsage2009/04/27(月) 23:45:16
>>35
> 最初につまづくのは再帰によるループと、かっこの扱い(car,cdr,cons,list関連)
> それがクリア出来そうならschemeが一番おすすめ。覚えることも他言語より少ない
> ただ、これらは結構序盤にある山なのでそこが問題
いわゆるループはC的(手続き型言語的)考えた方なのかなと個人的に思うんだけどなあ
初学言語がSchemeだったら違う見え方になるのかなと思うし

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

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

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

コンピュータに関心のある10代の子は、どのくらい忍耐力がないんだろうなあ
53デフォルトの名無しさんsage2009/04/27(月) 23:49:32
>>49
初学者だとしても単純なメモ帳でプログラミングする感覚はよくわからないけど

ダウンロードして、ダブルクリックするだけですぐ使える環境は、さすがにあるんじゃないの?
開発環境として主流でないだけで
54デフォルトの名無しさんsage2009/04/27(月) 23:51:21
>>49
メモ帳でも書けるじゃない。Emacsやviを使うともっと楽に書けるってだけで。
他の言語に比べて、メモ帳で書きづらいのは確かだけどさ。

でも、Emacsやviを使ってると、括弧のお陰で移動が凄い楽だから、
トントンってところな気がする。
55デフォルトの名無しさんsage2009/04/27(月) 23:57:43
ループは言う程簡単じゃない
小学生のときN88のFor Nextを理解するのに恐しいぐらい時間かけた気がする
さらに正確に書こうと思ったらホーア論理の初歩を知っておかないと
慣れるまでまともに動作するコードが書けないから
56デフォルトの名無しさんsage2009/04/28(火) 00:00:40
>>55

恐ろしいくらいベーマガのソースコードを打ち込んだんですね。
わかります。
57デフォルトの名無しさんsage2009/04/28(火) 00:03:08
男ならEdwin
58デフォルトの名無しさんsage2009/04/28(火) 00:26:20
>>55
ネットない時代だと悲惨だよね
なんの言語でもいいけど、入門書なんてなかった気がする
現行PCが30万〜40万する時代だからなあ

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


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

大量生産・大量消費は人を幸せにしてきたか?
59デフォルトの名無しさんsage2009/04/28(火) 00:28:21
>>55
俺はBASIC→機械語(Z80)→PASCALつまみ食い→LISP…てな順にやってきたけど
FOR NEXTやIF THEN (GOTO)でループには苦労しなかったな。
PASCALで初めて再帰を知ったときはちょっと感動した。
当時のBASICじゃローカル変数なんて当然無いから配列で擬似的にスタックを作ったりしたけど
GOSUBやFOR NEXTのネスティングは16重までだったから再帰なんて無謀だったなw
60デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 01:03:47
Haskell
 replicateM_ 10 $ print "hello"

しかしモナドとかあるから論外ですね
62デフォルトの名無しさんsage2009/04/28(火) 01:12:08
Ocaml
for i=0 to 9 do (print_string "hello";) done;;
でもOcamlも初心者向きじゃないかな
63デフォルトの名無しさんsage2009/04/28(火) 01:42:59
JavaScript
for(var i = 0; i < 10; i++){alert("hello");}
ほとんどCと同じだな。
文法はシンプルだしブラウザ上で動くから入門向けにはいいんじゃないかな
this周りに若干癖があるけど
64デフォルトの名無しさんsage2009/04/28(火) 01:52:14
Ruby
10.times { puts "hello" }
65デフォルトの名無しさんsage2009/04/28(火) 02:00:05
こうして見比べるとやっぱり Ruby は入門用としてはよろしくないような
気がしてきた。

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

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

(もっとも、そういう人が Ruby を使えるようになるかについては、
これまた、疑問なんだけど。)
66デフォルトの名無しさんsage2009/04/28(火) 02:13:44
perl
print "hello" for (0..9);
67デフォルトの名無しさんsage2009/04/28(火) 02:17:50
>>64
>10.times
なにそれ

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

Perlが流行ったのって正規表現が強力だったから?
広告宣伝に莫大なお金が投じられたわけでもないんだよね?
68デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 02:33:33
Ruby
1.upto(10) {puts "hello"}
10.downto(1) {puts "hello"}

まぁ,いろいろあるね.

70デフォルトの名無しさんsage2009/04/28(火) 02:36:16
>>69
どれが標準的な書き方なの?
71デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 02:40:15
む、いかんいかん。乗り遅れる所じゃった。
Smalltalk
1 to:10 do:[ :i | Transcript show:'hello']
73デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 02:48:35
pforthで
10 0 do ." hello" loop

factorで
10 [ "hello" print ] each
75デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 03:04:19
何故,みんな「素直」に do を使わないんだw

(do ((i 0 (+ i 1))) ((= i 10)) (print "hello"))
78デフォルトの名無しさんsage2009/04/28(火) 03:07:00
そろそろAPLがやってくる予感・・・!
79デフォルトの名無しさんsage2009/04/28(火) 03:09:31
CommonLispで
(loop repeat 10 do (print "hello"))
>>75
たぶんGauche使ってるんだろうが標準のschemeにはdotimesはないぞ
CommonLispからの移植な
あとprintじゃなくてdisplayな
80デフォルトの名無しさんsage2009/04/28(火) 04:22:55
>>66 >>68
ところでPerlなら
print "hello" x 10;
でいいのだが?
81デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 12:04:29
(iter:iter (for i from 1 to 3) do (print "hello"))
83デフォルトの名無しさんsage2009/04/28(火) 12:16:37
doなんか使うより
(for-each (lambda (x) (print "hello")) (iota 10 0))

>>80
じゃあrubyなら
puts"hello"*10
だな
84デフォルトの名無しさんsage2009/04/28(火) 18:07:57
Scheme は、仕様自体はコンパクトでも取り扱っている概念や方法論がハイレベル
Lisp 系なら Emacs Lisp が初心者向きかと。Emacs も理解できイベントループや簡単な
ウィンドウ取り扱いなども学べて一石二鳥にも三鳥にもなるし
85デフォルトの名無しさんsage2009/04/28(火) 18:27:26
Emacsのウィンドウやバッファの取り扱いはEmacsにしか通用しないだろ...
ま、Emacs自体がREPLになってる上にコードのほとんどがElispでのぞきみ放題
なのはいい勉強になると思うけんど。
英語が苦にならないならcommon lispの方がライブラリが整っていて、自前の
プログラムを1から書く分にはschemeよりいいと思うんだが。なんだか
ruby vs pythonの構図と似てるなあ。
86デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/28(火) 19:45:21
話が飛躍しすぎ
88デフォルトの名無しさんsage2009/04/28(火) 20:05:29
2点だな
89デフォルトの名無しさんsage2009/04/28(火) 20:43:09
>>86
日本の歴史で、
血縁関係にお金と権力が絡むと殺し合いが始まる事例を
複数あげてください。
90デフォルトの名無しさんsage2009/04/28(火) 20:57:25
何ら具体性がない
91デフォルトの名無しさんsage2009/04/28(火) 21:23:28
>>89
同じ年代だけど織田さんのところと斉藤さんのところがそうだよ
92デフォルトの名無しさんsage2009/04/28(火) 21:41:11
俺のダチのツネとトモとか
93デフォルトの名無しさん2009/04/28(火) 22:05:14
>>91
誰だよそれ
94デフォルトの名無しさんsage2009/04/28(火) 22:11:29
>>91
斎藤さんとこは息子とバパで既に仲悪かったじゃん。
確かに織田さんとこに血縁者はいるけど、実質、斎藤さんとこの親子喧嘩に
義理の息子が割って入ったってかんじだから、
血縁者同士って括りでは斎藤さんとこだけの話だよね。
95デフォルトの名無しさんsage2009/04/28(火) 22:16:18
マムシとウツケの話?
それはそうとして「バパ」って何?
96デフォルトの名無しさんsage2009/04/28(火) 22:48:04
>>95
携帯からなんで…
97デフォルトの名無しさんsage2009/04/28(火) 23:34:16
「初学者」って受験参考書の前書きによく使われてる言葉だよな。
あと、大学入りたての鼻息荒い学生がよく使う。
98デフォルトの名無しさんsage2009/04/29(水) 00:07:42
>>96
それはゴメンなさい
自分の知らない言葉だと思ってググったりしてしまったw
99デフォルトの名無しさんsage2009/04/29(水) 00:23:13
>>97
じゃあ、なんて言うんだ?
100デフォルトの名無しさんsage2009/04/29(水) 00:27:53
『初心者』じゃない?微妙にニュアンス違うかもだけど
101デフォルトの名無しさんsage2009/04/29(水) 00:29:12
普通は「初心者」だろうな.「初学者」なんて一般社会では聞いたことがない.
102デフォルトの名無しさんsage2009/04/29(水) 00:29:40
>>97
言語学関の板での初心者と同義語
103デフォルトの名無しさんsage2009/04/29(水) 00:34:42
横駄レス
俺はプログラマについて「初心者」って言うのを
リアルでは一度も聞いたことないわ。
学術の世界って、法学とか文学でもそうでしょ。
Windows使いHOWTOを「初学者」っていうと
逆に固すぎる感じがするわ。
104デフォルトの名無しさんsage2009/04/29(水) 00:39:03
こういう場合は「人それぞれ」で話を終わらせるか
特定の個人に限定して話を続けるとよい
105デフォルトの名無しさんsage2009/04/29(水) 00:50:25
古い地球人よ
106デフォルトの名無しさんsage2009/04/29(水) 00:52:15
アクターじゃない!
アクターじゃない!
継続なのさ〜
107デフォルトの名無しさんsage2009/04/29(水) 01:05:01
恥丘の男に飽きたところよ
108デフォルトの名無しさん2009/04/29(水) 01:39:10
継続ってノンエンプリティブなOSでマルチタスクやってたころを思い出すかな。
109デフォルトの名無しさんsage2009/04/29(水) 01:51:13
「少なくとも入門は済ませた俺は"初学者"ではない。むふふ」
という中二病心がうずくのさ。
110デフォルトの名無しさんsage2009/04/29(水) 02:00:07
くっ!俺の右腕のアセンブラが火を噴く前に、あんた逃げな!!
111デフォルトの名無しさんsage2009/04/29(水) 02:00:35
>>34があれから現れていない件
112デフォルトの名無しさんsage2009/04/29(水) 02:17:38
お前も実は>>34だったんだよ・・・
みんなが>>34で、>>34がみんなだったんだ!うわーい



ま、Smalltalkerなおでは違うけども
113デフォルトの名無しさんsage2009/04/29(水) 03:50:39
>>52
忍耐を要求する時点で終わってる

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

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

退屈しない = 楽しさかな?
115デフォルトの名無しさんsage2009/04/29(水) 08:46:08
LisperってHHKとか使ってるの?
116デフォルトの名無しさんsage2009/04/29(水) 10:00:18
キーボードは個人の趣味
117デフォルトの名無しさんsage2009/04/29(水) 10:13:42
和田先生だし、Lispむけなのかな?HHKだと()打ちやすいのかなぁ?
なんて考えたのですが。
118デフォルトの名無しさんsage2009/04/29(水) 10:21:07
>>110
そういえばcomp.lang.schemeで「継続をCで実装するにはどうするんですか〜?」って質問に"real man uses assembler."の一言でスレをストップした漢がいたなあ。
あれは、おまえの右腕だったのか@@・・・(w
119デフォルトの名無しさんsage2009/04/29(水) 10:21:47
()は、日本語配列の方が打ちやすいな〜とか思う。

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

多くの人が小指より薬指の方が長いから、
指が届き易いんじゃないだろうか?
120デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/04/29(水) 13:37:20
>>86
Sheme/Lispで多言語の文字列生成検索関数があれば、
いいんだ!(emacs lispはいや。)
122デフォルトの名無しさんsage2009/04/29(水) 17:38:13
>>119
小指?
いや小指より薬指は長いけど
自分は890あたりは中指薬指で打つな
123デフォルトの名無しさんsage2009/04/29(水) 19:59:39
>>122
それだと、ホームポジションの基本から外れるじゃん。

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

だから、たまに括弧の数の調整をする時、使って、
「ああ、遠い」って思うんだよな。
124デフォルトの名無しさんsage2009/04/29(水) 20:03:45
>>122
わからなくなもないけど、混乱しないの?
右薬指で0もありならp/もそうなの?
標準的と思われるタッチタイプにどれだけ妥当性があるのか、よくわからないがね
小指の使用率高いし
人間の適用力はすごくて、vi, emacsのESCの過度のタイプも意外と平気だからなあ
125デフォルトの名無しさんsage2009/04/29(水) 20:23:45
俺も数字の段では小指を使わない。
これで腕は移動しなくても、手首の回転と指の折り曲げで対応できる。

>>124
> /もそうなの?

小指は短いんだから、折りたたむ位置のキーはかえって有利。
126デフォルトの名無しさんsage2009/04/29(水) 20:36:53
クロダって凄い人なの?
127デフォルトの名無しさんsage2009/04/29(水) 20:38:49
黒部ダムは、すごいところだ。
128デフォルトの名無しさんsage2009/04/29(水) 21:17:56
黒田節はいつ聞いても心にしみる
129デフォルトの名無しさんsage2009/04/29(水) 22:15:08
以前はEmacsのM-系はAltキーで
viの挿入モード抜けはESCでしてたけど
いまはどっちも^[。
Ctrlキーで代用が聞くBSやTABも^H、^I。
最近コンソールアプリで^Hが使えないものでも
^8が効くということに気が付いた。
Ctrlキーは便利なんだけど
Macだとブラウザのアクセスキーとカチ合うのが難点
wikiを見てる時に何度履歴のページを見る羽目になったことか…
130デフォルトの名無しさんsage2009/04/30(木) 00:38:50
括弧が遠いと思うのなら、SymbolicsのキーボードみたいにUS配列の'['と']'の
位置を'('と')'に変更してしまうのもいいかも。これ結構打ちやすいよ。
'{'と'}'は滅多に使わないのでずいぶん遠くにある。あとAの左隣がRUBOUT
(DELETEに相当)というのも麻薬的な魅力がある。

http://www.pfu.fujitsu.com/hhkeyboard/kb_collection/images/symbolics.gif
131デフォルトの名無しさんsage2009/04/30(木) 01:44:51
>>126
既存コミュニティの努力を全て無に帰して、新しい言語を構築しようって人は、
近代中世から何百年とずーっと存在し続けているのさ。
今に始まったことじゃない。
132デフォルトの名無しさんsage2009/04/30(木) 02:44:04
ESCがずいぶん離れていて不便だ・・・と思っていたんだが
いわゆる省スペースのだとどうということもない
133デフォルトの名無しさんsage2009/04/30(木) 03:07:31
>>131
pgの悪口言うな><
クロッティはむしろ逆の方向性だろ。
134デフォルトの名無しさんsage2009/04/30(木) 04:06:44
キーボードの話が出たので
省スペースキーボードの KEK-EA9AU の
復活に向けて布教しようと思ったら、何故か普通に売られてた!

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

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

なのに全く知られてないのは何故なんだ!
135デフォルトの名無しさんsage2009/04/30(木) 07:39:04
>>134
形が普通すぎてださいし、JIS配列だから使い物にならない。
136デフォルトの名無しさんsage2009/04/30(木) 11:46:14
thinkpadでいいよ
乳首最高
137デフォルトの名無しさんsage2009/04/30(木) 12:43:20
>>132
漢字キーと入れ替えちゃえばいいじゃないか
IMEのスイッチを変換に当てて使えば上段全部が遠いおれでも楽勝だぜ(無変換はSUPER)
138デフォルトの名無しさんsage2009/04/30(木) 13:39:01
>>137
うん、でかいキーボードに戻ったらそうするだろうw
省スペースだとファンクションキーも楽に届く・・・のはいいんだが
今度は左のALTやCTRLが押しにくい
139デフォルトの名無しさんsage2009/04/30(木) 21:25:25
>>138
小さくなるとALT,CTRLが押しにくかったりするんだよね
おれは店頭に並んでいる1000円キーボードが一番好きだね
外し方が悪いのかもしれないけど、うまくキーボードが外せなかったりするし
ブラシとエアーダストでお茶を濁している
あと、用途 来客訪問時用 and 予備用ととストックしてあるなあ
ケースバイケースで生活感のあるキーボードを見せたくない場合もあるし

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

8 は人差指、9 は中指、0 は薬指が基本。
ttp://www.softpedia.com/screenshots/Touch-Typing-Deluxe_3.png
141デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/02(土) 00:47:11
左手小指の付け根でCtrl押す派はどれくらいいるのだろうか?
143デフォルトの名無しさんsage2009/05/02(土) 01:29:39
>>142
どんだけ変態なんだよ
なにかの事故で小指がないならわかるけど
144デフォルトの名無しさんsage2009/05/02(土) 02:18:31
お前らそろそろ自重しろよ
145デフォルトの名無しさんsage2009/05/02(土) 02:42:07
>>144
それならネタ投下しろよ
146デフォルトの名無しさんsage2009/05/02(土) 05:36:02
プラインド・タッチの普及に於いてサイト・アンド・サウンドの果たした
役割について考察せよ。因みにWikiでは触れられていない。
これネタ
147デフォルトの名無しさんsage2009/05/02(土) 06:57:29
>>142
わたしもやりますー
小指はあるよ
148デフォルトの名無しさんsage2009/05/02(土) 11:57:24
>>142
俺もフルサイズのキーボードではやるよ。
ノートとかだとできなくて辛い。

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

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

すげー謎過ぎる
150デフォルトの名無しさんsage2009/05/02(土) 12:25:34
小指の付け根あたりにもう一本指があればいいのに
151デフォルトの名無しさんsage2009/05/02(土) 12:26:09
ホームポジションでタイプするときに小指の付け根ってちょうど左右Ctrlキーのあたりにあるけど。
付け根で押すと、押した状態でさらに指が5本ともつかえて効率的。Emacsにイイ。
152デフォルトの名無しさんsage2009/05/02(土) 12:29:34
その態勢だったら親指が使えない
153デフォルトの名無しさんsage2009/05/02(土) 12:39:07
Lispスレと思って開いたらタイピングスレだった
154デフォルトの名無しさんsage2009/05/02(土) 12:41:57
あー、やっとイメージをつかめたけど
USキーボードだとCtrlの幅が多少広くなって、他のキーに接触せずに押しやすいのかな

でも、それならCtrlとCaps lockは交換する派のほうが共感できるなあ
155デフォルトの名無しさんsage2009/05/02(土) 17:17:51
>>151
> ホームポジションでタイプするときに小指の付け根ってちょうど左右Ctrlキーのあたりにあるけど。

その体制って手首や指が手の甲の側に反るので俺はダメだ。
俺がホームポジションでタイプするとき、小指の付け根は空中ですよ。手首はパームレストの上。
手が半球をつかむような自然な形を保てる方が手の負担が少なくて楽だと俺は思うのだが、
そんなの全然大丈夫って人も沢山いるんだね。
156デフォルトの名無しさんsage2009/05/02(土) 17:41:49
俺がホームポジションでタイプするとき、小指の付け根はCtrlキーの0.5cm上空ですよ。
手首はパームレストの上。手の負担も少ないってゆうかゼロ。
157デフォルトの名無しさん2009/05/02(土) 20:57:18
>>154
致し方ないので"A"の左がコントロールになっているキーボードを社内で普及させた俺みたいなのもいる
158デフォルトの名無しさんsage2009/05/02(土) 21:20:02
文字のキーを2つ以上同時に押すことはゲームしかありえないので
左手で文字キーを押すときは右手で右のShift, Ctrl, Altを
右手で文字キーを押すときは左手で左のShift, Ctrl, Altを
組み合わせて押す。
どんなキーボードでも有効w
159デフォルトの名無しさんsage2009/05/02(土) 21:28:04
>>157
すげー迷惑だよ
劇的な優劣差があるわけでもなし

むしろ不便さのほうを感じるんではないだろうか
キーボード変わると作業効率落ちる
漫画喫茶でストレス感じまくり
160デフォルトの名無しさんsage2009/05/02(土) 23:59:01
以前、某大学(東大じゃないよ)の実習用MacにHHK付けさせたのは何を隠そうこの私。
161デフォルトの名無しさんsage2009/05/03(日) 00:46:08
俺はコントロールキーを
小指側のてのひらの付け根で押してる。
小指の付け根というのはこのことかな?
162デフォルトの名無しさんsage2009/05/03(日) 01:12:16
Lispをやってこうと思うんですけど最近はHaskell最強の声も聞きました。
どっちがいいんですか。
163デフォルトの名無しさんsage2009/05/03(日) 01:19:17
こういう質問をする人の思考回路がまったく理解できないな。
両方やってみて自分で選べばいいじゃん。
164デフォルトの名無しさんsage2009/05/03(日) 01:25:26
まあ擁護してみると
どちらも勉強する価値は大いにある
しかしその価値がわかるほどに学習が進むとそれに染まってしまって
どちらかに偏って考えてしまうようになる
だから学習前のプレーンな状態で選択したいんでしょう
165デフォルトの名無しさんsage2009/05/03(日) 01:41:49
common lispもschemeもhaskellも全部触ってみるのが一番良いと思うが。
*nixならperlだって使えるべきだし、さらに言えばsmalltalkだって教養として
知っておくべきだと思う。
逆に言えば、特定の言語に染まっちゃった人の意見なんか参考にしてどうすんの?
166デフォルトの名無しさんsage2009/05/03(日) 01:42:29
それで他人にきいてその通りに選択するってのも気持ち悪いよな。
167デフォルトの名無しさんsage2009/05/03(日) 01:45:45
Haskellスレにも似たようなこと書いてるのかな
168デフォルトの名無しさんsage2009/05/03(日) 01:51:44
>>162
Haskellを触ったことないけど、興味があるんならやってみればいいんじゃないの?
>>164さんが言うような偏りは、しょうがないとしか言いようがない
某日本人が新しい言語を使うときは、さっさと大きいものをつくるらしい
例え、失敗しても、根本的にまた勉強し直して、2度目で作れればいいし
かなりハードだろうけど、目的が直接的なこともあって、かなり得るものはあるらしいね
Haskellで実用的な何ができるのか、知らないけどね

個人的にはslime.elが便利らしいんで、Common Lispがいいと思うけどね
Common Lispで何か作ったことないけどね
>>165
Perlはわかるんですが、smalltalkは必要なんですか?
smalltalkは教養としてでもいいけど、smalltalkを知っておくことってそんなに大事なの?
smalltalkを知っていなくてすごく困ることになっても、そのとき対処するなあ
169デフォルトの名無しさんsage2009/05/03(日) 01:56:28
>>160
東工大?
170デフォルトの名無しさんsage2009/05/03(日) 02:18:06
>>169
つOpenBSD かつ ストールマンと飲んだ人
171デフォルトの名無しさんsage2009/05/03(日) 02:22:39
>>168
興味が無いなら勧めないけど、何でもおもしろいって感じられる年頃の時にsmalltalkの中身を見ておくのは悪いことじゃないよ
あとcupsっていうeclipseでcommon lispさわれる環境もあるのでemacs系エディタがダメならそっちも検討してみるといいかも。
172デフォルトの名無しさんsage2009/05/03(日) 02:30:43
>>168
>smalltalkを知っていなくてすごく困ることになっても

ならないからオケ。
秘境を旅するみたいなもんで、知的好奇心があれば
満足出来ると思うけど、実用的な何かを期待するなら
無駄骨になる。一つの小さな閉じた世界を訪れるのが
楽しいと思える人向け。
173デフォルトの名無しさんsage2009/05/03(日) 02:49:38
>>171
京都だけど勉強会ってあるんだね
次回は5月17日だって
>>172
自分の場合はLisp/Schememも秘境という感じですがw
お金儲けに直結しづらい言語っていいなあという感じでマイペースにやっています
174デフォルトの名無しさんsage2009/05/03(日) 13:20:36
>>162
「問題の解き方」を研究したいなら Lisp、「問題の問い方」を研究したいなら Haskell
175デフォルトの名無しさんsage2009/05/03(日) 13:28:38
>>172
Lispはまだ外界との交流が盛んだと言うか、Lispが特殊なのは記法だけだよね。
Lispが砂漠のオアシスみたいな場所だとすれば、Smalltalkは山奥の隠れ里。
人によってはエルドラドや桃源郷に思えるかもしれないけど、交流は殆ど
断たれてしまってる。
176デフォルトの名無しさんsage2009/05/03(日) 14:06:29
SmalltalkはSqueakで子供に布教してる人もいるじゃない。
177デフォルトの名無しさんsage2009/05/03(日) 19:03:11
lispって名前空間がややこしいですよね。俺だけ?
シンボルには変数と関数を入れることができて、
変数には関数を入れることもできるって。。
リストの先頭か #' で関数にアクセスできるけど、
変数に入れた関数には別の方法でアクセス・・慣れればしっくりくるのかな
178デフォルトの名無しさんsage2009/05/03(日) 19:37:50
リストの先頭でマクロにアクセスできるけど
マクロは変数に入れられない

リストの先頭にはファーストクラスオブジェクトを置けないと考えれば?
関数も、そのままでは変数に入れられないから #' を使うわけで
179デフォルトの名無しさんsage2009/05/03(日) 20:05:26
>>177
つ【Scheme】
180デフォルトの名無しさんsage2009/05/03(日) 21:30:15
>>178-179
Scheme と CommonLisp で名前空間の扱い違うのか。
すみません、勉強不足だ。
あー、イメージは掴めそうかも。
変数の世界と 関数の世界があって x軸とy軸のように
双方向の写像の役割を #' と apply (funcall) がそれぞれ行っている。
写像なしではそれぞれの世界を行き来することはできない・・みたいな。
181デフォルトの名無しさんsage2009/05/03(日) 21:36:50
>>180
おおざっぱなイメージだと、symbol に

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

scheme とかは前者, CL つか Maclisp の血を引いてる奴は後者
182デフォルトの名無しさんsage2009/05/03(日) 21:51:11
値、関数スロットのほかに属性とかもあるらしいね
Schemerだから詳しく知らんけど
183デフォルトの名無しさんsage2009/05/03(日) 22:10:58
>>181-182
Thx。Scheme の方がシンプルでいいのかもなあ。
使ってる人も多そうな気が。
でも今 On Lisp 見てて面白そうだから CL もよさそうだw悩む。
184デフォルトの名無しさんsage2009/05/03(日) 23:06:54
両方やれw
どっちも楽しいぞ
185デフォルトの名無しさんsage2009/05/03(日) 23:50:35
CLでSchemeを実装する、という話はPAIPにもANSI Common Lispにも載っている。
しかし、SchemeでCLを実装する、という話は聞かない。
最初に複雑なCLをやっておけばSchemeのシンプルな長所も理解できるけど、
Schemeから入るとCLが単に複雑なだけに見えてしまうかもしれない。
よって最初はCLをお勧め。反論は認める。
186デフォルトの名無しさんsage2009/05/04(月) 00:29:39
>>185
関数型言語をかじってみたい程度の動機だとSchemeがいいんじゃない?
実用的にこれをしたいという用途が明確にあるならCLに直接にいくのもあるのかもね
187デフォルトの名無しさんsage2009/05/04(月) 00:29:41
Scheme以外のLispはレベルが低いのでスレからでていってください
188デフォルトの名無しさんsage2009/05/04(月) 02:54:32
なんだ?そんなんで喧嘩売ってるつもりか
189デフォルトの名無しさんsage2009/05/04(月) 02:56:35
はい、喧嘩売られてます、今
190デフォルトの名無しさんsage2009/05/04(月) 02:59:03
>>187
レベルが低い事例は?
191デフォルトの名無しさんsage2009/05/04(月) 03:09:25
J
 魚 魚 魚<大きな釣り針だなあ
   魚 <お口に入らないよ
192デフォルトの名無しさんsage2009/05/04(月) 03:18:55
レベルの低い>>187が出て行けば無問題
193デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/04(月) 11:55:45
>>185
> SchemeでCLを実装

on lisp に無かったっけか?
195デフォルトの名無しさんsage2009/05/04(月) 14:18:32
>>194 CL で continuation なら見かけたような気がする
196デフォルトの名無しさんsage2009/05/04(月) 22:27:23
最近ようやっと自分のお師匠が言っていた
「Lispはごくごく普通の言語だよ、記述がちょっと毛色の違うだけの」
と言っていた意味がよくわかった

ひょっとして書かれかた(書き方じゃない)になれてしまえばC++より優しい?
197デフォルトの名無しさんsage2009/05/04(月) 22:31:36
ひょっとしなくても優しい、そして易しい
Forthに匹敵するくらい
198デフォルトの名無しさんsage2009/05/04(月) 22:36:24
forceと供にあれだぞ、オビワン
199デフォルトの名無しさんsage2009/05/04(月) 22:44:11
>>196
そうだね。
Lispを特別な言語と思い込み、それを使いこなしている(?)自分が
特別な人間だと思い込んでいるユーザがLispを特別な言語にしている。
200デフォルトの名無しさんsage2009/05/04(月) 23:00:55
elispやCLはすごく普通だよね。ほかの言語の経験があれば割と素直っていうか。
Schemeは再帰が壁という声を聞いた。昔の話だけど。
201デフォルトの名無しさんsage2009/05/04(月) 23:29:02
Lispは、「言語設計者様が作った構文を真面目に覚える」という能力を
プログラマーから奪う危険な言語。
202デフォルトの名無しさんsage2009/05/05(火) 00:09:01
ある程度Lisp触って他の言語を触ってみたら
足し算するときに1回はコンパイルエラー出す
203デフォルトの名無しさんsage2009/05/05(火) 00:13:39
>>200
単なる食わず嫌いなところがあるのかもしれないね
「ロシア語がおもしろいよ。ドストエスキーは原書で読まないと」と他人に言われても、そこまで興味を引かないもんね
>>201
よくわからない文章だね

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

elipse(emacs)は、「言語設計者様が作った構文を真面目に覚える」という能力を
プログラマーから奪う危険な統合環境。
これなら成り立つね
204デフォルトの名無しさんsage2009/05/05(火) 00:42:03
>>203
文盲乙
205デフォルトの名無しさんsage2009/05/05(火) 02:14:50
>>203
Lispは構文を覚えなくていいから楽だなぁ
ってことだろ
206デフォルトの名無しさんsage2009/05/05(火) 02:53:55
誇張表現を受け入れられない人って結構居るみたいね…
207デフォルトの名無しさんsage2009/05/05(火) 03:02:25
ところでGuileのスレはどうするよ?
>>193の言うような対決スレとして再利用でもする?
208デフォルトの名無しさんsage2009/05/05(火) 04:40:47
>>193,207
Guileスレを使うなら
「guile=R5RSで解く(他のLisp/Scheme/その他関数型言語の参加もあり)」
くらいの名目にした方がよいかも。

あと問題がProject Eulerなら参加する。
和訳http://odz.sakura.ne.jp/projecteuler/
209デフォルトの名無しさんsage2009/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/
【備考】初心者の参加、大歓迎です。あとおもしろい企画があったら、どしどしレスしてください。
210209sage2009/05/05(火) 12:16:51
レスつかないしw
13時から初心者部門参加ということで問題3題解くわ

とりあえず、こっちに移動します
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
211デフォルトの名無しさんsage2009/05/05(火) 12:40:25
文豪乙
212デフォルトの名無しさんsage2009/05/06(水) 00:57:47
そもそもそんな変な時間に集まるわけねーだろ
213デフォルトの名無しさんsage2009/05/06(水) 01:47:26
>>212
じゃあ、何時ならいいんだ?

集まらないと言っても3人集まったんだから成功だと思うんだけど
214デフォルトの名無しさんsage2009/05/06(水) 21:59:46
午前の部と午後の部を設けるとか
215デフォルトの名無しさんsage2009/05/06(水) 22:23:14
>>214
妥当な開始時間を聞いているのに

二部構成という企画提案になっているんだ
216デフォルトの名無しさんsage2009/05/06(水) 23:28:20
GaucheでSchemeを学んでいます。
quoteで悩んでいます。

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

違いがわかりません。
217デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/07(木) 00:00:22
>>217
横槍だけど、(car (car '(1 (+ 2 3 4))))だと、評価されないけど
評価するのってどうやるの?
219デフォルトの名無しさんsage2009/05/07(木) 00:01:17
>>217
ありがとうございます。だいぶわかってきました。
(list 1 (+ 2 3 4))
'(1 (+ 2 3 4))
だと上では(1 9)のリストが作られるんですね

対話で(1 2 3 4)と渡すとエラーが出るのは、このリストのcarが手続きでないから、という解釈でいいのですか?
作ったリストとリストリテラルの違いはありますか?
220デフォルトの名無しさんsage2009/05/07(木) 00:40:40
'(+ 1 2 3) ; => '(+ 1 2 3)
`,(+ 1 2 3) ; => 6
`',(+ 1 2 3) ; => '6
221デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/07(木) 01:47:26
>>221
(car (cdr '(1 (+ 2 3 4))))だね

(car '((+ 1 2 3 4) 1))で、もぞもぞいじっていたから気づかなかった
223デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/07(木) 07:35:25
listの方はmutableで、quoteの方はimmutableだったりするんじゃない?
225デフォルトの名無しさんsage2009/05/07(木) 11:14:36
'(list 1 2 3) -> (list 1 2 3)
226デフォルトの名無しさんsage2009/05/07(木) 12:08:43
> list関数が作ったか、read関数が作ったかだけ。
なるほど、わかりやすいかも。
227デフォルトの名無しさんsage2009/05/07(木) 19:16:58
(let ((let '`(let ((let ',let)) ,let))) `(let ((let ',let)) ,let))
228デフォルトの名無しさんsage2009/05/07(木) 19:19:43
>>227でジャンプに連載されてた、テニスの王子様描いてる人がその前ぐらいに描いてたCOOLって漫画思い出した。
229デフォルトの名無しさんsage2009/05/07(木) 19:22:52
>>223
実装が仕様って話かな
自分は、そういう意味でしか言語を理解できないけど
230デフォルトの名無しさんsage2009/05/08(金) 13:49:40
>>224
immutableじゃない。set-car!/cdr!出来る。
>>229
仕様そのものだ。
231デフォルトの名無しさんsage2009/05/08(金) 21:18:32
>>230
できるかどうかは実装依存じゃないのかな?
R6RSは知らないけど
232デフォルトの名無しさん2009/05/08(金) 22:12:53
>>230
R6RS だと immutable だよ
R6RS 5.10
233デフォルトの名無しさんsage2009/05/08(金) 22:45:38
>> 220
R5RSでも4.1.2にエラーだと書いてある。処理系に報告の義務がなかっただけ。
234デフォルトの名無しさんsage2009/05/09(土) 03:09:19
クォートしたリストはつまりリテラルなので、変更できないのが常識。
235デフォルトの名無しさんsage2009/05/09(土) 08:24:42
これからSchemeを勉強予定なのですが、
WindowsXPで遊ぶのにPLTとCHICKENどちらがお勧めでしょうか?
もしくはその他お勧めがあればご意見をいただけますでしょうか
236デフォルトの名無しさんsage2009/05/09(土) 09:38:25
>>235
漏れなく開発環境もついてくることを考えると、PLT が一番無難じゃないかなあ。
chicken は windows だとビルドが面倒だったような気が。
遊ぶんだったら petit chez なんかでもいいかもしれんけど、
未だマルチバイトな文字に対応してないみたいだし。
237デフォルトの名無しさん2009/05/09(土) 10:37:31
プロジェクトオイラーって解き始めるとクセになるね。
Lisp以外では解く気が起きない問題も結構あるし
毛色の違う言語を2,3覚えた方が良いような気がしてきた。
238デフォルトの名無しさんsage2009/05/09(土) 11:00:53
>>237
> 毛色の違う言語を2,3覚えた方が良いような気がしてきた。
これってどういうこと?
Lispじゃだめなん?
239デフォルトの名無しさんsage2009/05/09(土) 11:15:43
project eulerと言えばhaskell
240デフォルトの名無しさんsage2009/05/09(土) 12:05:04
>>235
CHICKEN は最近 Ver4 になって utf-8 デフォになったためか外部ライブラリ群再構築中
PLT は Ver4 として落ち着いてきたが互換性に難あり (デフォでは else 部なし if はエラー)
私的には Ypsilon あたりが高速かつクリーンで良さげな気がす
R5RS ならこんなのも
ttp://www.geocities.jp/bneck44/hS.htm
241デフォルトの名無しさんsage2009/05/09(土) 12:23:37
しかしifがwhenを兼ねるというなら
mapがfor-eachを兼ねてもよさそうなものだが。
242デフォルトの名無しさん2009/05/09(土) 12:44:02
>>238
Lispがダメなんじゃなくて単に問題11はCの方が個人的に解きやすかっただけ。

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

解いたのはいいけど答えがあってるかどうかわからないので
悶悶としてきました。
243デフォルトの名無しさんsage2009/05/09(土) 12:51:49
Project Euler のサイトで回答を入れればあってるかどうかわかる。
このスレには貼らないでね。趣味で遊んでるんで、回答とか貼られると萎える。
244デフォルトの名無しさんsage2009/05/09(土) 12:52:49
>>242
ググると誰かの全問解答がみつかったかな
それか垢をつくると答えあわせができるんじゃないかな

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

>問題11はCの方が個人的に解きやすかっただけ。
手続き型言語で解きたくなるけど、そこを我慢するのがLisper/schemmer
245235sage2009/05/09(土) 13:58:03
>>236
>>240

ありがとうございます!
ご意見いただいた内容を意識してそれぞれ実際に触ってみたいと思います。
246デフォルトの名無しさんsage2009/05/09(土) 18:49:08
Win版は使った事が無いのだけれど
入門用には完成度の高いScheme48もオススメ
R5RSに最も忠実な処理系だと思う
もちろん独自の拡張も充実してる
R6RS対応版であろう次期リリースが早くでないかとwktkして毎日のようにリポジトリを覗いてる
247デフォルトの名無しさんsage2009/05/09(土) 20:00:39
>>216
俺もよく理解してないんだが
関数の返り値に クォート付けたリストを渡すと
呼び出し元で書き換えられる可能性があるからまずいらしい。
list で作ったリストを返したほうがいいらしい。

詳しくは On Lisp に書いてある。
http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/functionalProgramming.html
これの GOODNESS で検索した辺りに書いてある。
CommonLisp だが Schemeも変わらないよね?
248デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/09(土) 22:07:13
チャイティンのLispだと'はQUOTEの別名扱い
(' (1 2 3)) ≡ (QUOTE (1 2 3))
250デフォルトの名無しさんsage2009/05/09(土) 22:19:35
(' (1 2 3))だとエラーになるね。Gauche。
251デフォルトの名無しさんsage2009/05/09(土) 22:27:01
>>235
日本語資料が一番充実してるのは Gauche だけど、Win ではちょっと不安定かも
あと、Common Lisp 寄りでときどき Scheme らしからぬとも評されたり
仕様に一番網羅的なのはおそらく Larceny で IEEE/ANSI から R6RS まで対応
事実上のリファレンス実装と言われることもあるらし
252デフォルトの名無しさんsage2009/05/09(土) 22:35:08
' は (quote) だから ((quote (quote (1 2 3)))) の意味になる
253デフォルトの名無しさんsage2009/05/09(土) 22:39:17
gosh> ((quote (quote (1 2 3))))
*** ERROR: invalid application: ('(1 2 3))
Stack Trace:
_______________________________________
gosh>
254デフォルトの名無しさんsage2009/05/09(土) 22:47:48
MzScheme 様と Ypsilon 様は car が手続きじゃねえとお怒りです
255デフォルトの名無しさんsage2009/05/09(土) 23:02:44
だーかーらー!チャイティンのLispだと言っているでしょうがぁ
CLならリードマクロテーブルをいじって通せるかもしれないけど
Schemeは規格の上では通らない
256デフォルトの名無しさんsage2009/05/09(土) 23:27:40
>>248から先は何の話をしているのだ?
257デフォルトの名無しさんsage2009/05/09(土) 23:36:51
S式に執着しなければ楽になれるのに。
syntax-rulesは良いね。consもquoteもmapcarもいらないから。
258デフォルトの名無しさんsage2009/05/10(日) 11:49:03
手続き名をかっこの外に出す方式は無引数の場合が大変そう
259デフォルトの名無しさんsage2009/05/10(日) 16:38:29
すべての関数は引数はひとつだけリストで渡します
260デフォルトの名無しさんsage2009/05/10(日) 17:05:59
lispからcへの可読な変換をしてくれるソフトないのでしょうか?
261247sage2009/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デフォルトの名無しさんsage2009/05/11(月) 10:26:17
ひょっとして漢字コードを半角文字とみたときに
"/"が入るような文字コードの文字は
処理できないのでしょうか?

2chのdatを読ませてるんだけど
AAがよくあるdatだと、読み込みでバグって止まる
263デフォルトの名無しさんsage2009/05/11(月) 18:04:16
マルチバイトまわりは処理系依存なのでその情報だけでは不足 (\ でなく / なら普通問題ないはず)
処理系と対象ファイルの文字コード、あとできれば止まる前後のエラーメッセージなどplz
264デフォルトの名無しさん2009/05/12(火) 20:31:11
http://www.lsharp.org/

l# だってさ
265デフォルトの名無しさんsage2009/05/12(火) 21:00:32
.NETってどうなん?
266デフォルトの名無しさんsage2009/05/12(火) 21:39:02
いいえ鉄です
267デフォルトの名無しさんsage2009/05/12(火) 23:17:01
>>265
死にました
268デフォルトの名無しさん2009/05/12(火) 23:49:10
>>264
.net系の net Scheme っての知らんの?
269デフォルトの名無しさんsage2009/05/13(水) 02:00:27
そんなのあるの?
270デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/18(月) 00:24:01
何なの、と言われましても
274デフォルトの名無しさんsage2009/05/18(月) 00:27:07
>>272
普通に評価できるけど何が問題なの?
275デフォルトの名無しさん2009/05/18(月) 00:27:14
いや、どうして動かないのか気になりまして...
展開できるような気がするのですが....
あと、この関数を定義して使うとそのまま、フリーズしてしまうのが
こまってしまって...
276デフォルトの名無しさんsage2009/05/18(月) 00:28:14
>>275
処理系書いてよ.動かないほうが珍しいと思うけど
277デフォルトの名無しさんsage2009/05/18(月) 00:30:43
最後のかっこが多い
278デフォルトの名無しさんsage2009/05/18(月) 00:31:43
すまん別に多くないか
2792752009/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デフォルトの名無しさんsage2009/05/18(月) 00:35:47
環境と処理系を書いてくれ。>>272でフリーズとか意味わからん。
281デフォルトの名無しさんsage2009/05/18(月) 00:42:14
>>279
末尾再帰。
282デフォルトの名無しさんsage2009/05/18(月) 00:43:26
もはや尋ね尽くされた質問だが,>>272が非末尾再帰呼び出しであるのに対し
>>279は末尾再帰呼び出しになっている.>>272が「非」末尾再帰なのは
再帰呼び出し(fact (- n 1))の結果にさらにnを掛ける処理を行っているから.
283デフォルトの名無しさんsage2009/05/18(月) 00:44:00
リロードできてなかたorz
>>279
p56, 57あたり読んでみて。 って立ち読み版か。
284デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/18(月) 16:57:11
py::pyってのがエロイ。
287デフォルトの名無しさんsage2009/05/18(月) 19:51:17
中学生かおまえは
288デフォルトの名無しさんsage2009/05/18(月) 20:47:32
(. (.
X
Y
289デフォルトの名無しさんsage2009/05/18(月) 21:07:45
{ {
x
Y
Cだと乳首が立つ。これが文化の違いってやつだな!
290デフォルトの名無しさんsage2009/05/18(月) 21:10:10
>>289
乳首は立ってるだろうがペチャパイに見える
291デフォルトの名無しさんsage2009/05/18(月) 21:18:08
貧乳乳首萌え…ないな
292デフォルトの名無しさんsage2009/05/18(月) 21:34:57
<<
x
Y
なぜか「C++」までエロく見えてくる
293デフォルトの名無しさんsage2009/05/18(月) 21:38:04
この期に及んでも括弧の話とは恐れ入った。
294デフォルトの名無しさんsage2009/05/18(月) 21:40:47
>>292
上手いなw
295デフォルトの名無しさんsage2009/05/19(火) 09:09:18
う、いかん、想像してしまった・・・
もう"Y Combinator"とか恥ずかしくて女の子に言えない orz
296デフォルトの名無しさんsage2009/05/19(火) 11:45:03
Swankとは何なのですか?
297デフォルトの名無しさんsage2009/05/19(火) 12:18:17
λ. λ.
X
Y
298デフォルトの名無しさんsage2009/05/19(火) 12:23:06
>>296
SLIMEに附属する、lispのrepl環境をサーバ(デーモン)するプログラムのこと
これを使うことで複数の処理系のrepl環境を同時に使ったり、
リモートで立ち上げた環境を使うことができる

職安| λ…
299デフォルトの名無しさんsage2009/05/19(火) 15:20:57
>>298
ありがとう。
λ・・・SLIMEも良くわかってない俺orz
Swank-Gaucheというプログラムを公開してる人のブログを見つけたのですが、
初心者では使う必要もないでしょうね?
300デフォルトの名無しさんsage2009/05/19(火) 21:39:47
すげー便利だから頑張って入れてみれ
301デフォルトの名無しさんsage2009/05/20(水) 19:04:30
WindowsでGauche-BoxなんだけどSwank
302デフォルトの名無しさんsage2009/05/20(水) 19:40:03
入れれば幸せになれるかな。
303デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/21(木) 00:28:30
Meadow + Slime は微妙らしい
ttp://www.lingr.com/room/common-lisp-jp/archives/2008/09/20
最後の 1/4 あたりまたは "Meadow+SLIME" 検索で
305デフォルトの名無しさんsage2009/05/21(木) 00:51:07
ありがとうございます。ただ自分が頭悪いだけかと思ってました(*^ω^*)
306デフォルトの名無しさんsage2009/05/21(木) 01:52:09
プログラマにしては表情豊かだな。
Lispをやると笑顔になるってか?
307デフォルトの名無しさんsage2009/05/21(木) 02:02:20
\(^o^)/
308デフォルトの名無しさんsage2009/05/21(木) 02:08:48
中村正三郎 乙
309デフォルトの名無しさんsage2009/05/22(金) 09:13:05
人居ないと思ったらリンガーに行ったのか。
310デフォルトの名無しさんsage2009/05/22(金) 14:33:04
ひょっとしてmaximaスレも他に移動してるのか
311デフォルトの名無しさんsage2009/05/22(金) 16:07:40
ん? Lingrはとっくに終了したはずだが...
312デフォルトの名無しさんsage2009/05/22(金) 16:23:46
いつからみんな、そんなに長崎ちゃんぽんが好きになったんだ……。
313デフォルトの名無しさんsage2009/05/22(金) 17:02:41
IRCでいいじゃない
314デフォルトの名無しさんsage2009/05/22(金) 20:42:38
>>310
そういうスレッドは他では下しか知らない。

最強!!数学ソフトウェア(maple, mathcad etc)
http://science6.2ch.net/test/read.cgi/math/1051275230/
315デフォルトの名無しさんsage2009/05/22(金) 23:09:48
何で Scheme って評価順が未定義なんですか?
左からで何の不満もないと思うのですが。
316デフォルトの名無しさんsage2009/05/22(金) 23:15:44
自由度があった方が最適化に都合がいいんじゃないかな。

たしかCも引数を評価する順序は決まってないんだよね。以前、仕事で
扱ったコードに評価順序を暗に決めてしまってたいたものがあって、
コンパイラのバージョンアップで評価順序が変わって動かなくなって
しまったことがある。つかそのデバッグをやらされた。
317デフォルトの名無しさんsage2009/05/23(土) 00:18:50
>>316

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

処理系作る側から見れば, 引数をスタックに積む順番考えると
右側から評価するのが楽っちゃ楽だわな
318デフォルトの名無しさんsave2009/05/23(土) 05:46:55
>>317
右からが楽になるのは、不定長引数で引数の数を知らなくてもcalleeが
スタックトップからのオフセットでn番目の引数にアクセスできるからじゃない?
引数の数が固定、もしくは引数の数も一緒に渡す場合は右からでも左からでも
変わらないでしょう。
Schemeの場合、左から評価して積んどいた方がrest引数をリストに畳む操作は楽。
319デフォルトの名無しさんsage2009/05/23(土) 06:51:55
ところでなんでSchemeって
(f . x) で (apply f x) と同じ意味にしなかったの?
320デフォルトの名無しさんsage2009/05/23(土) 06:56:43
わかりました
(f x y) は (f . (x y)) だからですね
ごめんなさい帰ります
321デフォルトの名無しさんsage2009/05/23(土) 07:17:50
(^o^)ノシ
322デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/23(土) 18:24:13
> ((lambda (y) y) (lambda (z) z))ではなく
> ((lambda (x) x) (lambda (z) z))
この二つを区別する必要はあるの?
324デフォルトの名無しさんsage2009/05/23(土) 18:36:02
>>322
最左最内だと、まず(lambda (y) y) xここからだから正しい。
>>323
ウゼエ
325デフォルトの名無しさんsage2009/05/23(土) 18:54:07
つーか最初の式内の(lambda (y) y)は何の意味もないだろ
ほんとに意味わかってやってんのか
326デフォルトの名無しさんsage2009/05/23(土) 18:54:58
( ゚д゚)ポカーン
327デフォルトの名無しさんsage2009/05/23(土) 19:09:35
gosh> ((lambda (y) y) 1)
1
328デフォルトの名無しさんsage2009/05/23(土) 19:12:20
>>324
ありがとうございます。
用語が色々ありすぎて自身無かったので助かりました。

>>327 クマー
329デフォルトの名無しさんsage2009/05/23(土) 19:14:29
で、2段階目はどうすんの?
330デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/23(土) 20:25:39
普通値呼びは最左最内簡約だと思う
自分の不勉強なだけかもしれないけど最右最内簡約って聞いた事無い
カリー化のこともあるし右の項から簡約ってできるのかな?
333デフォルトの名無しさんsage2009/05/23(土) 20:29:00
三行目は「できるのかなぁ?(できない気がする)」って意味ね
334デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/23(土) 21:36:19
そうか、ボケてた
β基の簡約手段自体は変わらないんだった
右の方のβ基から簡約するようにするだけだからあり得る話だ
関数適用の結合を右結合にするのと勘違いしてた
336デフォルトの名無しさんsage2009/05/24(日) 00:33:52
I = λx. x として

I (I y (I y)) でテストすれば4パターン全部わかる。
337デフォルトの名無しさんsage2009/05/24(日) 01:45:16
ここってDrSchemeも扱ってますか?
大学で使ってるんですが実行画面のキャプチャが出来なくて困ってます。OSはwindowsです。
338デフォルトの名無しさんsage2009/05/24(日) 09:12:48
>>336 その例だと(I y (I y))とI ((I y) y)の2パターンにしかならなくないですか
339デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/24(日) 11:13:54
>>337
グラボのアクセラレータによる画面は普通キャプチャできないけど、その系かな?
341デフォルトの名無しさんsage2009/05/24(日) 12:04:05
>>341
パソコン初心者でよくわからないんですスイマセン。
Macだとcommand+shift+4とスペースバーでポインタがカメラになった後実行画面を選択するみたいなんですがwindowsにはそれにあたるものはないんですかね。
342デフォルトの名無しさんsage2009/05/24(日) 12:05:26
Windows板の初心者スレで聞け
343デフォルトの名無しさん2009/05/24(日) 13:18:38
PrintScreenボタン押せばいいんじゃね?
344デフォルトの名無しさんsage2009/05/24(日) 13:37:26
君、軽くイラっとさせてるのに気づかないタイプでしょ?
345デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/24(日) 17:05:08
(λx.x M) yは(λx.(x M)) yと書くべきでした。I Mとは別の意味です
347デフォルトの名無しさんsage2009/05/24(日) 19:19:37
>>345
左右とか内外と言うのは、最初に簡約する箇所ではなく、最初に探す箇所です。
最初に探した箇所で簡約できなければ、別の箇所から簡約を始めて良いです。
348デフォルトの名無しさんsage2009/05/24(日) 20:32:11
左右とか内外と言うのは、最初に探す個所ではなく、簡約する場所の探し方です。
349デフォルトの名無しさんsage2009/05/25(月) 13:13:59
>>314
【数式処理システム】 Maxima 【Common Lisp】
http://science6.2ch.net/test/read.cgi/math/1220340695/
350デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/25(月) 20:30:38
Arc のアイディアってすごい惹かれるんだけど、どう思いますか?
lambda が fn だったり let とか cond も 極力簡素にするスタイル。
[+ _ 10] は cut より直感的だけど、まぁ cut でも十分かな。
scheme で真似しようと思っけど
hash table や 文字列を手続き的に呼んだりするのは無理だよね。
352デフォルトの名無しさんsage2009/05/25(月) 20:59:05
> hash table や 文字列を手続き的に呼んだりするのは無理だよね。
Gaucheなら出来ると思うけど。
353デフォルトの名無しさんsage2009/05/25(月) 21:17:38
object-apply メソッドな。
でも、あれって評価時にディスパッチされるんだよね?
性能的にはあんまりイケてないかも。
多用することは想定してないじゃろ
354デフォルトの名無しさんsage2009/05/25(月) 21:18:54
スマンスマン。
なんか勘違いしてたわ
355デフォルトの名無しさんsage2009/05/25(月) 22:44:15
>>353
これか。http://practical-scheme.net/gauche/man/gauche-refj_54.html#SEC97
本当だ、できるね。Gauche使いになろうっと。
教えてくれてありがとう。
356デフォルトの名無しさんsage2009/05/25(月) 22:52:57
>>351
http://pc12.2ch.net/test/read.cgi/tech/1202098949/
357デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/05/30(土) 19:28:54
>>357
ありがとうございます。
ちょっとずつ読み始めました&Miranda処理系入れました
しかし、大御所は太っ腹ですね

Super Combinatorって名前からして面白そうですが
そこまで行くのにはまだしばらくかかりそうです
あと、読んだ所までですが、
β変換自体の実装にα変換が必要ってのを知り
自分のβ変換プログラムのバグを発見してしまいました
いい本教えてくれてありがとう
359デフォルトの名無しさんsage2009/06/01(月) 11:00:37
comp.lang.lispのスパムを無視してくれるブラウザーみたいなのないでしょうか
360デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/01(月) 11:53:39
>>360
>α変換が必要
って書いてあるじゃん。それで合ってるんだから、変なこと教えるなよ
362デフォルトの名無しさんsage2009/06/01(月) 16:24:30
lambda liftingって酷い名前だな
少なくとも自由変数と何か関係あるぐらいは一目でわかるように名前つけろよ・・・
363デフォルトの名無しさんsage2009/06/02(火) 22:30:25
>>358

自分も前にラムダ式を簡約するものをSchemeで書いたことがある。
高橋先生の本を読みながらやってたんだけど完全にはできなかった。
Arcのスレにすっごく巧み書かれたのがあったと思う。Arcが発表されて
まもなくだったので驚いたよ。
364デフォルトの名無しさんsage2009/06/02(火) 22:33:44
lambda liftingってscmのコンパイラhobbitでも使われているっていうアレかな?
365デフォルトの名無しさんsage2009/06/02(火) 22:36:22
コンビネータとかって実用的に価値はあるの?
366デフォルトの名無しさんsage2009/06/02(火) 23:31:25
なんかlambda droppingというのもあるみたいだ・・・もうワケワカ(w
367デフォルトの名無しさんsage2009/06/03(水) 02:47:04
実際にコードに適用させると副作用とかあるからそのままじゃいかんよ
368デフォルトの名無しさん2009/06/04(木) 06:47:01
>>363
これ?
http://natal.web.fc2.com/lambda.arc.txt
369デフォルトの名無しさんsage2009/06/04(木) 10:45:18
schemeからCへの変換は、わりと可読性残したままできるものなのでしょうか
370デフォルトの名無しさんsage2009/06/04(木) 12:01:34
継続呼び出しをどう扱うかでえらいことに
371デフォルトの名無しさん2009/06/06(土) 12:09:16
Gaucheを使っているのですが、
渡された物がatomかどうか判別する関数って何でしょうか?
CommonLispから来たのであまりわからないのですが
atom?やatompが見当たらないような気がするのですが
372デフォルトの名無しさんsage2009/06/06(土) 12:16:25
>>371
(define (atom? x)(not (pair? x)))
373デフォルトの名無しさんsage2009/06/06(土) 12:55:21
ペア (コンス) も他の型と同様に型の一種でしかない。
「整数ではない」とか「文字列ではない」とかいったことを調べる述語が無いのに
(それとも CommonLisp では有ったりする?)
「ペアではない」ということだけ調べる述語があると不自然、
というような価値観が Scheme では有るように思う。
かといってミニマムな仕様を好む Scheme で全部の述語に否定バージョンを用意するのは論外だし。
374371sage2009/06/06(土) 13:55:12
>>373
たしかCommonLispでは
integerpとかstringpとかが有った気がします。
375デフォルトの名無しさんsage2009/06/06(土) 14:16:04
Schemeには政権を取ろうという意欲がない。
何故なら一方にCLという巨峰があり、汚い仕事でも引き受けてくれるからだ。
しかし、R6RSでは政権への意欲を見せた。
だが支持者からも反感を買い、最近は友愛の精神などとわけの分からない事を言い始めているが
結局は小沢の傀儡だろうとの批判が出ている。
376デフォルトの名無しさんsage2009/06/06(土) 14:22:29
>>374
> integerpとかstringpとかが有った

atom? は pair? の逆だろ?
integerp の逆とかが有るか? っていう話なんだけど。
377371sage2009/06/06(土) 14:34:31
>>376
なるほど、よくわかりました。
Lispに置けるatomという概念がまだ良くわかっていなくて
了解しました。なるほど、Schemeはpair?の逆ということですね。
Common Lispはatomも属性の一つと認識してる部分がある気がします。
378デフォルトの名無しさんsage2009/06/06(土) 14:49:46
まー、atom処理したければ (if (pair? ... の else でいいし、
単独で使いたければ if じゃなく unless 使えばいい。
もちろん not つかったっていい。
379デフォルトの名無しさんsage2009/06/06(土) 23:24:24
vectorとかのコンテナもatomなのはおかしいと思うのはおれだけ?
いやatomの定義が何なのか知らないので、おれの妄想の意見だが
380デフォルトの名無しさんsage2009/06/06(土) 23:27:18
えっ
381デフォルトの名無しさんsage2009/06/06(土) 23:36:37
コンテナがpairしかないならいいと思うんだわ>>376の意見は
でもよお
382デフォルトの名無しさんsage2009/06/06(土) 23:38:55
(container? (vector 1 2 3)) => #t
(container? (cons 1 2)) => #t
(define (atom o) (not (container? o)))
なら納得なんだわ
schemeの審美眼的にこの辺ほったかかしなのが謎だと思うんだわ
383デフォルトの名無しさんsage2009/06/06(土) 23:58:25
大抵の解釈では
atom=それ以上分解することができないもの
だよな?

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

じゃあsymbolはどうなる?とか色々疑問は尽きない
384デフォルトの名無しさんsage2009/06/07(日) 00:11:13
仰るとおりで
385デフォルトの名無しさんsage2009/06/07(日) 00:12:18
pairと2要素を持つベクタとの区別は?
386デフォルトの名無しさんsage2009/06/07(日) 00:15:22
>>385
コンテナかどうかの話なのに、それがどんなコンテナか?
なんて区別の必要があるか?
必要なら個別にpair?とか呼べば?
387デフォルトの名無しさんsage2009/06/07(日) 00:25:20
俺はvectorがなかった頃に>>372が定石化してしまったから、
そのままatom?がない状態になっているのかと思っていた。
388デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/07(日) 04:11:11
>>388
>>>368のArcのプログラム見てみましたが
>とても短いのに、そのままschemeに移植したら動いたので感動しました

すごくうまいよね。こりゃ、かなわんなぁと。
自分は素朴な方法で教科書どおりに書いていました。
390デフォルトの名無しさんsage2009/06/07(日) 10:00:42
すごい特殊な場合だけα変換が必要みたいに思いがちだけど
疑わしきは全部α変換しておけば確実だということと、

SICPに出てくる環境モデルのようなものが
λ計算の変数の置換にも使えるということがポイントかな。
391デフォルトの名無しさんsage2009/06/07(日) 19:29:41
>>382
むしろ決められないから atom を定義してないんじゃね?
392デフォルトの名無しさんsage2009/06/07(日) 19:34:50
>>382
文字列はどうするの?
393デフォルトの名無しさんsage2009/06/08(月) 00:50:14
文字列→ char []
vector → void *[]
394デフォルトの名無しさんsage2009/06/08(月) 01:56:34
極端な話、整数だってビットに分解できるわけだしなぁ。
ベクタの例をとってみても 「ペアでない」=「アトム」
とは言えないという意見は納得できる。
でも、その方向でつきつめていけばアトムと
言えるのはビットだけってことにならないか?
しかし、更に言えばビットで表現するのは実装の都合であって、
Scheme の意味論的にはそんなこと知ったことじゃないかもしれない。
何を以ってアトムとするかは状況によると思う。
395デフォルトの名無しさんsage2009/06/08(月) 02:31:07
なんで atom という common lisp の用語の話で scheme が出てきてるんだ?
396デフォルトの名無しさんsage2009/06/08(月) 10:53:07
実は AsTOMachine の略だったりして
397デフォルトの名無しさんsage2009/06/08(月) 11:48:54
>>394
正直、極端な話はいらない
398デフォルトの名無しさんsage2009/06/08(月) 12:00:17
common lispで書かれた数値計算のプログラムをStalinで動かしたいけど
common lispのプログラム中にatomがあるので、どう翻訳しようか悩むことはある
399デフォルトの名無しさんsage2009/06/08(月) 12:14:49
それって悩むようなことかな・・
400デフォルトの名無しさんsage2009/06/08(月) 17:09:16
フォートランをcommon lispに変換したコードとか読める気がしない
401デフォルトの名無しさんsage2009/06/08(月) 17:15:53
Usenet上のcomp.lang.schemeをUsenetリーダーのアプリケーションから
読みたいのですが、newssaverというのは何処に設定すれば良いのでしょうか?
Googleグループは便利なのですが、ニュースリーダーからアクセスできるともっと楽なのです
よろしくおねがいします。
402デフォルトの名無しさんsage2009/06/08(月) 21:40:35
>>401
gmane.org
403デフォルトの名無しさんsage2009/06/08(月) 22:04:03
>>402
>gmane.org
ありがとう御座います。
comp.lang.schemeが見つからんとです。
404デフォルトの名無しさんsage2009/06/09(火) 23:08:23
ところでリスパーはどんな音楽を聴くニダ?
405デフォルトの名無しさんsage2009/06/09(火) 23:39:57
バッハだろう
406デフォルトの名無しさんsage2009/06/09(火) 23:53:03
いけてるリスパーはバッハなんか聴くんだ。
エレクトロニキスタの俺がバッハに耐えられるかな。
407デフォルトの名無しさんsage2009/06/10(水) 00:16:07
アニソン一筋30年〜♪
408デフォルトの名無しさんsage2009/06/10(水) 00:18:00
なんでも聞くぞ
各種民族音楽(日本の民謡も含む)からクラシック・シャンソン・ジャズ・ロック
409デフォルトの名無しさんsage2009/06/10(水) 00:19:16
リストじゃないの、やっぱり
410デフォルトの名無しさんsage2009/06/10(水) 00:22:46
>ところでリスパーはどんな音楽を聴くニダ?
ここ20年音楽聞いてないかも
411デフォルトの名無しさんsage2009/06/10(水) 00:42:11
>>409
うまい
412デフォルトの名無しさんsage2009/06/10(水) 01:03:52
>>410
それでも括弧の奏でる旋律を感じたことがあるはずだ
413デフォルトの名無しさんsage2009/06/10(水) 01:06:08
>>409
それニダ!!
414デフォルトの名無しさんsage2009/06/10(水) 06:58:05
最近楽譜見るとダカーポやセーニョダルセーニョが
call/ccに脳内変換されるようになってきた。
415デフォルトの名無しさんsage2009/06/10(水) 11:13:34
楽譜も読めないし継続がいまだにわからない俺が来ましたよ。
やっぱりLisperならヒップホップだよね?
416デフォルトの名無しさんsage2009/06/10(水) 11:36:44
そろそろ雑談スレでも立てようか
417デフォルトの名無しさんsage2009/06/10(水) 12:40:43
どっかでgsllが遅いって言ってた人いたけど
行列の配列のcreate deleteをlisp側でやると遅いってことでいいの?
cffi使うなら全部cで処理したほうがましってこと?
418デフォルトの名無しさんsage2009/06/10(水) 20:10:14
scheme/gaucheでscanlに相当する関数ってありますか?
419デフォルトの名無しさんsage2009/06/10(水) 20:12:42
>>416
こっちを再利用してもいいんじゃない?
立ててもいいと思うけど
【GNU】スクリプト言語 Guile【scheme】
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
420デフォルトの名無しさんsage2009/06/10(水) 21:48:44
つくるなら、
【色即是空 空即是色】Lisperのぼやきサロン【Lisp S式】
  とでもしといて w w w
421デフォルトの名無しさんsage2009/06/11(木) 01:03:20
マ板に雑談向きなスレあったよーな
422デフォルトの名無しさんsage2009/06/11(木) 01:06:33
>>420
なんでLispスレ限定なんだ
423デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/11(木) 07:30:10
>>422
schemerにとって不満? lisperと書けば含まれていると思ったけど。
425デフォルトの名無しさんsage2009/06/11(木) 08:44:11
そういう意味じゃないと思うんだ。
426デフォルトの名無しさんsage2009/06/11(木) 10:36:16
SchemeはLispに非ず、Algolなのです! by 黒ちゃん
427デフォルトの名無しさんsage2009/06/11(木) 10:54:23
俺としては雑談スレというか、俺Lispの細かい仕様を相談したり
プチ自慢したり遍歴ダベったりするスレが欲しいかな。
少々次元が低くても全然構わない空気の。
428デフォルトの名無しさんsage2009/06/11(木) 12:34:42
Lisperこそ真のプログラマーよ!!

を乗っ取りする
429デフォルトの名無しさんsage2009/06/11(木) 21:06:16
スレ乱立しすぎだろ。Guileスレも結局、単発で終わったし。
本スレも過疎気味なのに、さらに分離すると…追っかけるの面倒
430デフォルトの名無しさんsage2009/06/11(木) 21:22:02
おまいらたまにはArcスレの事も思い出してやってください。
431デフォルトの名無しさんsage2009/06/11(木) 21:23:45
>>427
過疎っているのと、リアルが忙しくてかまっていられないだけだと思うよ。
低次元の話題は大歓迎なんだが。

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

元カノのPython子とよりを戻そうかと真剣に考えたくなる。
でも、長年連れ添うなら、Lispのマクロって便利そうだよね。emacsのslimeも軽くて便利そうだし。
432デフォルトの名無しさんsage2009/06/11(木) 21:55:30
移行とかいわず、全部使えばいいと思うよ。
どんなエラーでるか、入門Common Lispスレのほうで晒してくれたらみたげるよ。

俺は仕事でSQLをいじるとPrologがいいなぁと思い、JavaをいじるとLispがいいなぁと思う。
しかしPrologをいじると、RDBMSのイロイロやっぱ必要だよな…と思い直し、
Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
433デフォルトの名無しさんsage2009/06/11(木) 22:06:01
Gaucheを使っているのですが、
schemeのプログラムってどういう風に配布すれば良いのでしょうか?
ユーザーにgaucheやパッケージ依存ならパッケージのインストールまでさせるべきでしょうか?
すこし、敷居が高い気がするのですが...

それとも、./configure && make && make installでバックグラウンドでgoshやパッケージを
インストールする方式なのでしょうか?
みなさまの方法をご教授ください。
434デフォルトの名無しさんsage2009/06/11(木) 22:06:54
並列処理でバーッと行こうぜバーッと。
435デフォルトの名無しさんsage2009/06/11(木) 22:12:02
>>433
NSISでインストーラーを書いてGaucheごと配布
436デフォルトの名無しさんsage2009/06/11(木) 22:44:57
>Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
python on lisp
437デフォルトの名無しさんsage2009/06/11(木) 23:34:04
>>433
そういう用途ならPLTオススメ。

Gaucheでやるなら、>>435みたいに、本体ごと配布するのが面倒がない。
バージョンの違いとかで悩まなくていいし。
438デフォルトの名無しさんsage2009/06/11(木) 23:52:58
Franzとか商用サポートあるじゃないか!
仕事ではとても言い出せないけど
439デフォルトの名無しさんsage2009/06/12(金) 00:20:36
>>432
Common lispスレのほうに投稿しておきました。よろしくお願いします。
>移行とかいわず、全部使えばいいと思うよ。
サンデープログラマなんでさすがに無理です。でも、毛嫌いしているわけでなく、やるしかないような状況になったらやるんですが。
>Lispをいじると言語以外のライブラリや商用サポートで現実に引き戻される。結局どれも捨てられない。
時間に特別制約なくて、Lispでもあったほうが便利ならLisperなら単機能・簡易版でいいので作りたいところですね。(一応、理想だけは高く)
lispって糊言語的な使われ方って多いんですか?
440デフォルトの名無しさんsage2009/06/12(金) 01:20:00
>□Stalin: 激烈な最適化を施す処理系。人間の書くCコードより速いという噂。
> ttp://cobweb.ecn.purdue.edu/~qobi/software.html

ここにおいてあるQobiといかいうのscheme -> c 変換なのかな?
他にもいろいろおいてあるけど便利そうなの結構ありそう
441デフォルトの名無しさんsage2009/06/12(金) 02:25:36
雑談も良いけど、隔月刊か季刊でいいから丸ごとLispだけの雑誌が欲しいなぁ。

シローさんが連載持ったり、グレアムおじさんの文を翻訳したのとかも載せたり。
黒田さんの「黒板に書け!」みたいな記事とか。
中村正三郎さんがAS/400絶賛する連載記事・・・ってこれは関係ないかw
442デフォルトの名無しさんsage2009/06/12(金) 11:51:46
Scheme->C というコンパイラがあって、Stalin も最初はそれで記述されてた
たぶんそのコンパイラ用のライブラリかと
443デフォルトの名無しさんsage2009/06/12(金) 12:02:42
schemeでslime並みにいたりれりつくせりな環境ってどれになるんでしょうか?
444デフォルトの名無しさんsage2009/06/12(金) 12:08:50
>>443
vi
445デフォルトの名無しさんsage2009/06/12(金) 17:01:39
>>443
マジレスすればPLTSchemeになるんじゃないかと思う。
446デフォルトの名無しさんsage2009/06/12(金) 18:03:01
>>442
どこかでschemeにswank移植してたぞ
447デフォルトの名無しさんsage2009/06/12(金) 19:23:16
雑誌Lisp 100% が欲しいってか?rubyあたりではそんなムックは出てたね。
渋谷の連中に期待かな。
448デフォルトの名無しさんsage2009/06/12(金) 21:35:07
渋谷の連中って何
449デフォルトの名無しさんsage2009/06/12(金) 22:18:01
shibuya.lisp
450デフォルトの名無しさんsage2009/06/12(金) 23:16:11
創刊当時の月刊I/Oみたいな雰囲気でLisp/Schemeの記事満載の雑誌が欲しい。
無いもんはゲリラ的に自分たちで作っちゃうもんね〜というノリが懐かしい。
「Schemeで人工知能を」「Lispでロボット犬を制御する」なんてタイトルでさ。
451デフォルトの名無しさんsage2009/06/12(金) 23:32:19
shibuya.lispで会誌みたいなのをつくって見れば良いのでは
開催時に配布とか、プログラマの人も暇じゃないけど
今のshibuya.lispの開催間隔を見る限り記事一つ二つなら
かけるぐらいの期間だろうから
452デフォルトの名無しさんsage2009/06/12(金) 23:51:12
>>450
> 創刊当時の月刊I/Oみたいな雰囲気でLisp/Schemeの記事満載の雑誌が欲しい。
月刊I/Oみたいな雰囲気というのがよくわからないけど。
雑誌の意味ってどのくらいあるの? すごくがんばって、季刊誌だろうから、タイムリーさは狙えないよ。

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


やっぱり、あれか、ノスタルジーというやつか。
453デフォルトの名無しさんsage2009/06/13(土) 00:15:26
連載「Lispで書くMultics」
454デフォルトの名無しさん2009/06/13(土) 00:33:26
>>452
興味の無い記事、専門外の記事も一緒に付いてくるのが技術雑誌のいいところなんだよ
455デフォルトの名無しさんsage2009/06/13(土) 00:40:28
Lispの雑誌なんて読んでたら女の子がうざいほど寄ってきて困るだろ。
456デフォルトの名無しさんsage2009/06/13(土) 00:52:26
>>454
ものすごく質が高ければ買うかもしれないけどなあ。

最近は、定期購読している雑誌はないし、新聞もWebで済ませちゃっているなあ。
本当は紙媒体で読みたいんだけどなあ。
457デフォルトの名無しさんsage2009/06/13(土) 01:06:38
興味なくても専門外でも、専門技術の記事で埋まってる雑誌なら喜んで買うぜ。
半分広告な雑誌ならノーサンキュー。
458デフォルトの名無しさんsage2009/06/13(土) 01:22:58
Lisp関連の学会の論文集読め。
459デフォルトの名無しさんsage2009/06/13(土) 01:48:35
論文集ほど堅くなくってのがミソなんじゃないかな?
コミケとかで売ってくれないかなぁ。
460デフォルトの名無しさんsage2009/06/13(土) 02:12:56
comp.lang.lispで十分じゃね
しかも雑誌みたいに広告もある
461デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/13(土) 10:28:00
副作用がある関数の名前に ! を付けるのはナイスな慣習だと思うよね?
マクロも名前だけでパッと見で分かるようにしたらいいと思うんだ。
だって、関数と違って引数が評価されないかもしれないんだよ。
例えば先頭を大文字にするとかがいいかな。
464デフォルトの名無しさんsage2009/06/13(土) 10:54:20
季刊 Lisp!
465デフォルトの名無しさんsage2009/06/13(土) 11:42:37
>>443
quack.el
466デフォルトの名無しさんsage2009/06/13(土) 12:21:12
活動資金のない渋谷には本は難しいんじゃないかな。鯖とも手弁当なんでしょ。

>>463
年季入ったLisperに言わせると、!や?は発音にこまるからという話も。
「reverse!」「reverseね」「ちがうreverse!」「reverse?」「えっ」「えっ」
467デフォルトの名無しさんsage2009/06/13(土) 13:19:07
! 「あんせーふ」
? 「ぷれでぃけーと」

reverse! 「りばーすあんせーふ」
reverse? 「りばーすぷれでぃけーと」
468デフォルトの名無しさんsage2009/06/13(土) 13:36:48
>>466
手弁当のほうが何の制約もなく、無闇に成果を出す必要がなくていいと思うが。
469デフォルトの名無しさんsage2009/06/13(土) 13:40:10
let* 「れっとあぬす」
470デフォルトの名無しさんsage2009/06/13(土) 13:42:16
記事すらほとんどないのに
Lispの専門誌なんて出るわけないだろw
471デフォルトの名無しさんsage2009/06/13(土) 13:50:21
*はスターって読んでる
472デフォルトの名無しさんsage2009/06/13(土) 13:51:21
話題なんていくらでもある。
473デフォルトの名無しさんsage2009/06/13(土) 14:02:24
論文みたいにかっちり書かなくてもいいなら記事はあるでしょ。
474デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/13(土) 14:59:25
何ができませんのか?
477デフォルトの名無しさんsage2009/06/13(土) 15:04:44
>>476さん
C-c s で、そんなコマンドありませんって言われますorz
478デフォルトの名無しさんsage2009/06/13(土) 15:14:31
"\C-c s"ならC-c スペース sって意味になるから
多分C-c スペース sと入力すれば動く筈
C-c sにしたけりゃ"\C-c s"を”\C-cs"にしてみて
479デフォルトの名無しさんsage2009/06/13(土) 15:35:25
>>478さん
ありがとうございます!!
御指摘いただいた箇所をなおしたらできました。
あと、先頭のutf-8のとこもおかしかったみたいでそこがよく分かりません
まじ感謝です。
480デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/13(土) 23:23:57
AIMAのサンプル見れ
483デフォルトの名無しさんsage2009/06/14(日) 04:38:57
(define a '(1 2 3))
と定義して
(list 0 `,@a)
は駄目なんですね。できてもよさそうなんだけどなぁ
484デフォルトの名無しさんsage2009/06/14(日) 06:33:38
@ってなに?
485デフォルトの名無しさんsage2009/06/14(日) 07:06:45
`(list 0 ,@a)






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

>>485
それだと (list 0 1 2 3 4) が返ってきちゃうよ。
488デフォルトの名無しさんsage2009/06/14(日) 12:17:18
Common Lispでやりたいのか、Schemeでやりたいのか
どういう結果が欲しいか
はっきり書かないと
489デフォルトの名無しさんsage2009/06/14(日) 12:26:27
>>488
ごめんなさい、最初に書いてなかった。schemeです。
490デフォルトの名無しさんsage2009/06/14(日) 12:36:51
>>487
> でも apply より (list 0 `,@a) の方が直截的で、何がやりたかったか明確じゃないですか。

そうか?
491デフォルトの名無しさんsage2009/06/14(日) 12:41:51
(0 1 2 3) がほしかったら`(0 ,@a)だな
492デフォルトの名無しさんsage2009/06/14(日) 12:42:29
俺は`(0 ,@a)ってやるな
しかし、applyこんな風に使えるんだな
493デフォルトの名無しさんsage2009/06/14(日) 12:50:34
ちなみに
`(0 ,@a) == `(0 . ,a) == (cons 0 a) == (apply list 0 a)
パイソニアンが見たら青筋たてそうだな(笑
494493sage2009/06/14(日) 12:55:30
あ、見た目が同じだけどリストの構造は違うものになるんだった。すまん。
495デフォルトの名無しさんsage2009/06/14(日) 13:17:38
>>491-492
リストが欲しい時はそれが自然ですね。
他の関数の引数に展開したい時は apply で我慢するかぁ。

>>490
違う?要は apply があんま好きじゃないってだけなんだけど。
scheme だと ((car (list + -)) 1 2) ができるって知った時はナイス!って思った。
496デフォルトの名無しさんsage2009/06/14(日) 13:26:59
>>494 仲間はずれはapplyで作ったやつ?
497デフォルトの名無しさんsage2009/06/14(日) 17:07:32
(append '(0) a)
498デフォルトの名無しさんsage2009/06/14(日) 21:49:52
>>495
perl知らないせいか (list 0 `,@a) じゃ何がやりたかったかさっぱりわからなかった。
aの中身は実行時にしか決定されないからコンパイルするとlistでなくapplyが
呼ばれる。ソースコードに書いていないのに。むしろわかりにくい。
499デフォルトの名無しさんsage2009/06/14(日) 22:53:09
apply使うと損した気分になったり不愉快になる
500デフォルトの名無しさんsage2009/06/14(日) 23:12:44
病院へ池
501デフォルトの名無しさんsage2009/06/14(日) 23:29:34
Applyが嫌いならMicroSoftyなら良いのか?
502495sage2009/06/14(日) 23:53:15
>>498
俺だって perl 知らないよ。

えー、分かりやすいよ。
apply って大体にして、scheme では変数をリストの先頭に置いて関数を呼び出せるんだから
実質、この用途 (リストに格納されている要素を引数として関数に渡す)
のためだけの関数でしょ?
`( ,@a) で展開できるんだから `,@a も展開できたっていいじゃん。
apply なんて不要になるよ。
503デフォルトの名無しさんsage2009/06/15(月) 00:15:45
quasiquote をとびこえて更に外側の括弧が表すリストの一部になるというのはダサいだろ。
list の場合だったらともかく、マクロだったらどう展開されるやら想像がつかん。
かと言ってマクロ展開より先にスプライシングするわけにもいかんし。
504デフォルトの名無しさんsage2009/06/15(月) 00:30:36
>>503
quasiquote の展開はリード時にやんなきゃ駄目じゃない?
とはいえリード時には関数かマクロかわからないしなあ。

確かに、単純な場合にはよさげにみえるけど、
ちょっと入り組んだことになっただけで落とし穴だらけになりそうだね。
505デフォルトの名無しさんsage2009/06/15(月) 00:41:00
aがリストかどうかもわからん
506502sage2009/06/15(月) 01:03:52
>>503
あー、マクロ内で使われるとまずいのね。確かに。
apply だったら自動的に関数only だからそこは大丈夫だったのか。
んじゃ、マクロ内では `,@ は自粛でいいじゃんw。駄目?
だって apply も 関数にしか適用できないんだからお相子だって
507502sage2009/06/15(月) 01:08:33
>>505
それはこれに限らず ,@ 全てが受ける制約じゃん
508デフォルトの名無しさんsage2009/06/15(月) 01:10:58
まあ、おそらく自分よりはるかに頭の良い人が必要だと思って
残してある機能なわけだから、、、と俺なら考えるかな。
509デフォルトの名無しさんsage2009/06/15(月) 01:23:33
>>506
そろそろ実装方針を示してはくれんか。
510デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/15(月) 06:18:44
盛り上がってるところ悪いんだけどマクロと関数を混同してるんじゃないかな。
(define (conc-len x) (apply + (map length x)))
の定義のように、applyの最終的な評価の際に使われる引数が式の読み込み時に
わかるという保証はないんだよ。,@じゃこの関数は定義できないでしょ?
513デフォルトの名無しさんsage2009/06/15(月) 08:45:30
>>512
ごめん、よく分からない。
,@ って実行時に展開されないの?
(define (conc-len x) (+ `,@(map length x))) じゃ駄目?
514デフォルトの名無しさんsage2009/06/15(月) 08:50:09
quasiquote まわりは全部 syntax だよ
515デフォルトの名無しさんsage2009/06/15(月) 09:09:28
ttp://www.math.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC39
「コンマアットマークは、リストかベクタの<qqテンプレート>内部に書かなければならない」
516デフォルトの名無しさんsage2009/06/15(月) 10:08:49
gosh> (car ',@x)
unquote-splicing
517デフォルトの名無しさんsage2009/06/15(月) 10:54:36
分かりやすいといいつつ続く文章が説明に全くなっていない件について。
自分の脳内が世界の全てって人なんだろうなあ。
518デフォルトの名無しさんsage2009/06/15(月) 11:41:03
>>517
えー、分かりやすいよ。
lisp って大体にして、言語を拡張できるのが売りなんだから
実質、この用途のためだけの言語でしょ?
perl で展開できるんだから lisp も展開できたっていいじゃん。
perl なんて不要になるよ。
519デフォルトの名無しさんsage2009/06/15(月) 11:47:44
replのreadの段で,@を自分の思うように仕込めばいいじゃん
520デフォルトの名無しさんsage2009/06/15(月) 12:12:38
>>518
> 実質、この用途のためだけの言語でしょ?

へー
521デフォルトの名無しさんsage2009/06/15(月) 14:39:08
>>513
一言で言えばnoです。
マクロと関数の違いについて理解していますか?式の変換と評価の違いがわかりますか?
522デフォルトの名無しさんsage2009/06/15(月) 15:12:54
backquoteは、
`(,x y ,z)と書くところを、
'(`x y `z)と書ければ、
'(x y z)との字面の対象性上は美しいが、
中を見なければquoteすら効率的に評価できなくなる。O(1)→O(n)

>>513もそうだが、"全体"の構造や評価に影響を与える"部分"があるのはよくない。
523デフォルトの名無しさんsage2009/06/15(月) 17:37:21
Perlは展開「できる」というか、展開「しちゃう」言語なんだよな。
展開させないために、リファレンスという機能を使わなきゃいけない。

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

そういう展開をさせたいという意志を、applyが一手に引き受けている現状のほうが、
俺には綺麗だし把握しやすい。
524デフォルトの名無しさんsage2009/06/15(月) 19:11:38
どっちがいいかっていうことには主観的な部分もあるだろうけど、
少なくとも Lisp はこういう理由でこういう選択をした、ってことだ。
525513sage2009/06/15(月) 20:26:30
>>517
確かに説明になってなかったね。すまん。

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

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

>>522-523
よくない派が多数か。んじゃやっぱあんまいけてないんだろうな。これはあきらめる。
526デフォルトの名無しさんsage2009/06/15(月) 20:33:30
お前ずばり、昔来たquote判ってないちゃんだろ
ネタ提供ありがとう
527デフォルトの名無しさんsage2009/06/15(月) 20:42:35
横レスだけど、quoteとか評価とかってなにげに難しいですよね。
本読んでCPSやYコンビネータはわかった気になったけど、
何時までもquoteや評価のあたりで何かモヤモヤしてる。
528デフォルトの名無しさんsage2009/06/15(月) 22:30:15
>>525
あきらめるってのが良くわからないけど(まるでこのスレを起点に何かを動かすつもりだったみたいな)、
試しにそういう動作をするマイLispを作って遊んでみたらどう?
で、使ってみたらこんな感じだった、って報告を後日改めてここに書き込むとか。
529デフォルトの名無しさんsage2009/06/16(火) 01:27:38
>>525
例えば psyntax には pure Scheme な quasiquote の実装があるから
眺めてみるといいんじゃない
ttp://www.cs.indiana.edu/chezscheme/syntax-case/
530デフォルトの名無しさんsage2009/06/16(火) 03:53:44
>>526
その人とは違うよ。
>>528
そうだね。マイLisp作れたら面白そうだ。
汚いやり方でも少なくとも俺には合ってるからね。
俺がSICP読み終える頃には楽勝で実装できるんだろ、きっと。
>>529
quasiquoteは100行くらいか。
syntax だけじゃ多分無理だけど参考にするわ
531デフォルトの名無しさんsage2009/06/16(火) 04:23:16
quasiquote って効率を考えずに実装するだけならば外側から順に再帰的に
consとappendに展開するマクロみたいな感じですむからそんなに難しくないと思う。

`@,で展開するのはもはやquasiquoteとは別の文法を導入しているような気が。
別にあっても悪くはないと思うけどもこれだけだと単なるapplyの中置演算子版みたいだし、
特殊な文法用意するのはlispらしくないし別にapplyつかえばいいじゃんということな気がする
532デフォルトの名無しさんsage2009/06/16(火) 04:49:20
>>530
SICP読破を目指して本ばっかり読んで頭でっかちになるより、ちゃんと手を動かして
コードを書きつつ試行錯誤して正しい理解を身につけてほしいと思う今日この頃。
べつにトンチンカンなことを言ってスレを賑わすのが悪いと言ってるんじゃないだが、
本に書いてある意味論以外に、コードがどういう流れで処理されて実行結果に
たどり着くのかという流れを理解してから物を言った方がいいよ。

それとquasiquoteのオレサマ実装ぐらいSICPなんて読まんでもHaskellの48時間で
書くやつで誰でもできると思うけど。
533デフォルトの名無しさんsage2009/06/16(火) 06:56:16
SICPは量は多いかもしれないが難解ではないよ。
本当に難しくなるのは、SICPで扱っていない枝葉末節が絡んできた時。
534デフォルトの名無しさんsage2009/06/16(火) 07:53:23
しかしapplyも変な仕様だよな。
Schemeも同じ仕様なのはどういうわけだろ。
(append (list arg1 ...) args)をas isにすれば、
コンパイル時に余計なコンスセルを消費しないのは確かだけど、
余計なお世話のような気がする。
便利主義の昔のLispはまあいいとしても。
535デフォルトの名無しさんsage2009/06/16(火) 09:08:38
彼は高校生くらいだろ
気持ちわかるよ
俺も滝に打たれるような気持ちでアセンブラ書いてた時期があったから
これが済んだらスーパープログラマーになってるはず、みたいなw
まあ無駄にはなってないけどさ
536デフォルトの名無しさんsage2009/06/16(火) 19:15:53
http://codepad.org/g2dULeuu
537デフォルトの名無しさんsage2009/06/16(火) 21:16:20
ふつう48時間かかるものが、
枝葉末節を知っているだけで生産性が100倍以上になるわけだ。
538530sage2009/06/16(火) 22:10:10
>>536
おー、`,@ で展開ができるよ! ありがとう、面白い。>>512もできた。
mzsceme は #%app で関数実行の前に細工ができるのか。
#mzscheme よく分からないけど (require m) は (require "filename") だよね。
539デフォルトの名無しさんsage2009/06/17(水) 11:53:24
>>538
モジュール名
540デフォルトの名無しさんsage2009/06/17(水) 12:42:36
悪い意味じゃなくて、Gauche本がSchemeの全て
な人が増えた気がする。
541デフォルトの名無しさんsage2009/06/17(水) 12:52:39
初学者に読んで貰うような本が出たら、
それしか読んでない人が増えるのは当たり前だわな。
アホですか?(悪い意味ではなく)
542デフォルトの名無しさんsage2009/06/17(水) 14:18:14
それしか読んでない≠それを全てと考える
なはずなのにそれがイコールで結ばれじゃう単細胞が多いってこと
543デフォルトの名無しさんsage2009/06/17(水) 14:54:56
maximaのコードを高速化したい
compileでcommon lispに変換はできる
それをschemeで動くようにしてstalinで実行が一番高速なんだろうか
544デフォルトの名無しさんsage2009/06/17(水) 17:39:23
YpsilonとStalinってどっちが速いの?
545デフォルトの名無しさんsage2009/06/17(水) 17:39:48
stalinに決まってるだろボユゲ
546デフォルトの名無しさんsage2009/06/17(水) 17:40:58
>>543
生きている間にコンパイル終らないよ
547デフォルトの名無しさんsage2009/06/17(水) 18:32:53
stalin自身を高速化したいときはどうすんの
548デフォルトの名無しさんsage2009/06/17(水) 19:22:23
最適化をしないようなオプションを設定する(本末転倒)
549デフォルトの名無しさんsage2009/06/17(水) 19:22:41
stallinを動かすマシンを高速化する
550デフォルトの名無しさんsage2009/06/17(水) 21:35:45
Gauche本は参考文献を示していない。
551デフォルトの名無しさんsage2009/06/17(水) 23:27:27
>>550
だから?
別に気にするところじゃないだろ。
552デフォルトの名無しさんsage2009/06/18(木) 09:17:07
君も気にし過ぎでは。
553デフォルトの名無しさんsage2009/06/20(土) 03:28:11
schemeからcommon lispへのtranslaterはないみたいだけど
逆はあった.

common lispからschemeに乗り換えて見ようかと思うんだけど
大幅に違うのは継続ぐらい?
554デフォルトの名無しさんsage2009/06/20(土) 03:32:06
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme:マクロ:CommonLispとの比較:意味論
555デフォルトの名無しさんsage2009/06/20(土) 06:53:11
>>553
Lisp-1とLisp-2の違いとか、結構色々違いがあると思うけど。
556デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/21(日) 16:50:46
オレオレlispを作ってみたいのでちょっと質問

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

なんとなく、#fと()がどちらも偽のほうが使いやすそうには思いますが
問題になるケースがあったりするのでしょうか?
558デフォルトの名無しさんsage2009/06/21(日) 16:57:35
型チェックを厳しくしたいか、
(not-empty? x)の代わりにxが書ける簡便さを選ぶかの違い。
あなたのセンスで決めてOK
559デフォルトの名無しさんsage2009/06/21(日) 16:59:08
オレオレlispならいいけど、オラオラschemeを目指す場合、
意味が変わるので既存のschemeのコードがそのまま動かない
問題になるのはそれぐらい
既存のコードがきっちり動くってのはそれだけで楽しいから
昔scheme作った時泣く泣く準拠させたよ
中途半端はよくないと思った
560デフォルトの名無しさんsage2009/06/21(日) 17:10:24
なるほど。
作りたいのはオラオラschemeに近いので
とりあえず#fのみにしとくのが無難そうですね
ありがとう
561デフォルトの名無しさんsage2009/06/21(日) 22:19:05
>>559
それschemeじゃなくなっちゃうよ、Schemeみたいな俺Lispだよ

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

;;;; commonlispを名乗ると完成するまで大変過ぎる
562デフォルトの名無しさんsage2009/06/21(日) 22:49:08
変なのきた
563デフォルトの名無しさんsage2009/06/21(日) 22:50:30
SchemeはRnRSにあらず
RnRSからSchemeが生まれたんじゃなくて
RnRSは後からできたわけでしょ?
他人に使わせることや複数人で開発することがあるとすれば
規格準拠にしたほうがいいに決まっているけど
564デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/22(月) 00:08:38
lisp/schemeでリファクタリングしてると、時間があっという間に過ぎてしまうんですが、同じ
経験をしている人いますか?
567デフォルトの名無しさんsage2009/06/22(月) 03:30:41
>>564
(define tmap (lambda (f x) (if (pair? x) (map (cut tmap f <>) x) (f x))))
568デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/22(月) 07:00:57
On Lispに書いてあるみたく継続使ってもいいよね。
571デフォルトの名無しさんsage2009/06/22(月) 07:21:29
リストの入れ子ならともかく
木構造ならcdrも'()でもpairでもない場合があるだろ。
572デフォルトの名無しさんsage2009/06/22(月) 07:54:59
二分木ならともかく
木構造なら子が3個以上の場合があるだろ。
573デフォルトの名無しさんsage2009/06/22(月) 08:23:16
どちらも矛盾しないお
574デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/22(月) 08:50:36
ただし564はそれを意図したものではないと思われる。
576デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/22(月) 09:49:16
この場合はどうする?
(tmap null? '((() 2) (3 (() 5))))
;こうなって欲しい
((#t #f) (#f (#t #f)))
578デフォルトの名無しさんsage2009/06/22(月) 10:26:36
(branch (leaf 1) (leaf 2))みたいにタグをつけないと
(leaf ())と(branch)の違いが曖昧になるね
579デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/22(月) 23:06:49
(quote ())と(#%app)の違い。
581564sage2009/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デフォルトの名無しさんsage2009/06/23(火) 00:59:09
ドットペアについては方針が分かれるよな
リスト表現としてのツリーを普段どう見てるか
・対応する →初心者
・無視する →中級車
・エラーにする →高級車
583デフォルトの名無しさんsage2009/06/23(火) 01:43:54
car だけに
584デフォルトの名無しさんsage2009/06/23(火) 01:46:36
クダーらないギャグを言うなよ。
585デフォルトの名無しさんsage2009/06/23(火) 01:48:47
てめーもクッダらねーぞ
586デフォルトの名無しさんsage2009/06/23(火) 01:52:39
こんな時だけ加速するなw
587デフォルトの名無しさんsage2009/06/23(火) 02:20:07
carだけに
588デフォルトの名無しさんsage2009/06/23(火) 04:51:56
ヌルポ
589デフォルトの名無しさんsage2009/06/24(水) 04:20:36
Structural Operational Semantics
http://tinyurl.com/lv4dzf
590576sage2009/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デフォルトの名無しさんsage2009/06/25(木) 12:17:36
つ ((null? t) (cont t))
tmap-cps自体を関数として使うつもりがあるなら
内部でvaluesを決めうちしちゃだめよ
592デフォルトの名無しさんsage2009/06/25(木) 13:08:42
>>590
次はクロージャを使わずに継続をスタックで表現してみよう
593デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/26(金) 09:08:05
GIMPのscript-fu (基本的にR5RS準拠) では
真偽値 #t, #f とは別に TRUE, FALSE の定数が用意されています。

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

(if (= flag TRUE) 処理)

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

(if flag 処理) と書けるようにするにはどうすれば良いでしょうか?
595デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/26(金) 10:19:17
再帰を全て末尾再帰に変形する手続きとか論文のネタになってそうなものだけど
どなたかご存じない?
597デフォルトの名無しさんsage2009/06/26(金) 10:22:21
CPS?
foldrとfoldlの双対性?
598デフォルトの名無しさんsage2009/06/26(金) 11:22:23
>>595
GIMP2.6.5で試したところ期待通りの動作になりました。
ありがとうございます。
599デフォルトの名無しさんsage2009/06/26(金) 23:44:46
最近思うこと
schemeはカリー化を言語組み込みでサポートしたほうが
シンプルになるように思うんだけど
今からそんなことをせずともpa$もcutもあるわけで
R6RSはすでに十分実用的になってしまった感がする

R5RSまでのシンプルさのが、良いなぁ
600デフォルトの名無しさんsage2009/06/27(土) 11:04:33
前にも言ったけどね
R5RSのマクロはcons, quote, quasiquote, mapなど一切使わないで書けるよ
という意味でLisp界にとって危険な存在だからね
黒歴史ということにしたい人もいるだろう
601デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/27(土) 15:53:12
>>602
うん、だからカリー化って意味ねーなと思って
つーかカリー化前提でデフォルト値の提供ってどうすんの?

そもそも引数たくさんあるような関数なら
自力でmake-httpみたいなパラメータ固定化手段を用意するだろうし
604デフォルトの名無しさんsage2009/06/27(土) 16:00:44
足し算とか、引数の性質が簡単なやつならカリー化もいいけど
引数に値と関数を取るようなやつとか、
関数をいくつも引数にとって関数を返す関数なんかをカリー化したら
保守できなくなりそうだよ

>>599
試しに作って公開してみてよ
605デフォルトの名無しさんsage2009/06/27(土) 17:09:16
カリー化はS式にターメリックやらスパイスを使えばいいよ
606デフォルトの名無しさんsage2009/06/27(土) 17:43:41
それ何て
607デフォルトの名無しさんsage2009/06/27(土) 19:54:04
ここできいて良いかわからないですが
gauche-glをcygwinで動かせた人います?
608デフォルトの名無しさんsage2009/06/27(土) 20:35:17
やったことないけど出来るはず。
ちなみにMingwでは出来た。
609デフォルトの名無しさんsage2009/06/27(土) 21:07:16
cygwinで0.8.13では動いたよ
0.8.14ではなんかしらんがコケた
610デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/06/28(日) 17:19:58
ほげとふがをわはとむすにすればうまくいくかもしれない。わけない。
613デフォルトの名無しさんsage2009/06/28(日) 19:42:22
>>611
http://saito.s4.xrea.com/?Gauche
614デフォルトの名無しさんsage2009/06/28(日) 20:26:25
>>613はリンク切れ
615デフォルトの名無しさんsage2009/06/28(日) 21:05:08
>>614
悪い
今再Up中だからちょっとまってくれや
616デフォルトの名無しさんsage2009/06/28(日) 21:08:26
>>614
準備出来たでー
617デフォルトの名無しさんsage2009/06/28(日) 21:14:09
>>613
どうやってビルドしているんだろうか。詳しい手順が知りたい。
618611sage2009/06/28(日) 21:39:27
>>616
再アプ乙です!!
今、gauche-glの動作を確認しました
これで思う存分図形言語で遊べる、ありがとう
619デフォルトの名無しさんsage2009/06/29(月) 01:04:48
>>617
忘れた。
でも、ひっかかったのはしょーもないことばっかりだった気がする。
ひっかかったところをそのつど修正すればだいたいいけるよ。
もしかしたら Gauche 自体もちょっとは弄ったかもしんない。
620デフォルトの名無しさんsage2009/06/29(月) 01:16:01
>>618
Cygwin でなくてよかったんかい?
Mingw でビルドした Gauche はいくつかの機能が使えないよ。
重大なのはプロセスとスレッド関連くらいだけど。
621デフォルトの名無しさんsage2009/06/30(火) 14:53:46
問題ない
窓使いでcygwin版を使いたがる人は少ないはず
622デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/01(水) 14:41:18
「リストを末尾の要素に持つリスト」はどう表現するの、それ。
624デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/01(水) 15:01:49
ああ、言ってる意味がわかった
(cdr '((1 2)))が()だから今動いてるけど
そうじゃなかったら動かないですね
そういう意味ではリストの末尾は必ずatomじゃないとダメになるから
これじゃダメだ
626デフォルトの名無しさんsage2009/07/01(水) 21:12:08
ボクの考えた最強のLISP(Scheme)!
ってネタは尽きないよな
気持ちは判るが、妄想垂れ流す前に一度それで組んでみろよ
>>622みたいなのはすぐ作って確認できるだろ
どう思う?って、俺はまたキチガイかと思ったよ
627デフォルトの名無しさんsage2009/07/01(水) 21:46:01
>>626
作らない奴はクソだ,と思っているんだろうけど,
設計は設計で,そっちも大事だと思うぞ。
全部作ってみろで返すのはひどい。
628デフォルトの名無しさんsage2009/07/01(水) 21:57:45
そういうネタだらけでスレが埋まってしまうのは困るけど
閑散としている時のネタとしてはアリじゃないかな
629デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/02(木) 02:24:46
竹内先生の入門本が増補改訂版で出るらしいんだが、
Schemeなのかな。CLなのかな。
631デフォルトの名無しさんsage2009/07/02(木) 09:28:58
ICFPのプログラミングコンテスト、Steele兄貴の招待講演が
Organizing Functional Code for Parallel Execution: or, foldl and foldr Considered Slightly Harmful
ってなってるが、foldは悪なのだろうか
内容が気になるな
632デフォルトの名無しさんsage2009/07/02(木) 09:51:32
foldじゃなくてl or rだよ。
シーケンシャルなのを問題にしてるんでしょ。

>>630
これかな?
http://www.amazon.co.jp/初めての人のためのLISP-ソフトウェアライブラリ-3-竹内-郁雄/dp/4781904548
特定の言語を対象としている本じゃないよ。このスレのように。
トピックスが増えるんじゃないのかな。
633デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/02(木) 10:26:36
>>632
HMVはお取り寄せ可能になってる。
http://www.hmv.co.jp/product/detail/3608319
発行年月 : 2009年06月
出版社 : 翔泳社

http://seshop.com/には載ってないが
635デフォルトの名無しさんsage2009/07/02(木) 12:14:49
予約受付中?
http://www.bk1.jp/product/03125439
636デフォルトの名無しさんsage2009/07/02(木) 16:08:20
>>633
wじゃなくてz使ってよ、気色悪いw
637デフォルトの名無しさんsage2009/07/02(木) 18:41:29
うはxxxxxxxxxおkxxxxxxxxxxxxxxxx
638デフォルトの名無しさんsage2009/07/02(木) 18:59:01
>>634
書店の人が出版社に確認してくれた。当初予定より遅れて
平成21年12月2日だそうだ。楽しみだね。
639デフォルトの名無しさんsage2009/07/02(木) 23:15:22
>>638
\(^o^)/
640デフォルトの名無しさんsage2009/07/03(金) 00:05:29
入門Gaucheで勉強してるけどp64から急に難しくなってきたぜでもがんばるぜ
641デフォルトの名無しさんsage2009/07/03(金) 00:07:24
LittleSchemer読もうぜ
642デフォルトの名無しさんsage2009/07/03(金) 00:21:15
>>641
ありがとうだぜさっそくポチるぜ。
643デフォルトの名無しさんsage2009/07/03(金) 02:43:14
竹内センセの本が出るのか。それは全力で買いだ。
644デフォルトの名無しさんsage2009/07/03(金) 04:18:45
一冊あれば十分だけどなw
645デフォルトの名無しさんsage2009/07/03(金) 04:55:07
増補で付録とか付くんかな?
竹内先生の本は持ってるけど、記念で買おう。
646デフォルトの名無しさんsage2009/07/03(金) 05:50:44
lisp本、wktkしてきたぜ。
647デフォルトの名無しさんsage2009/07/03(金) 06:20:20
初めての人向けじゃなくって
もっと突っ込んだの書いて欲しいな
648デフォルトの名無しさんsage2009/07/03(金) 06:34:49
竹内先生監修シリーズって感じで、5人ぐらいに書かせればいいんじゃねえ?
649デフォルトの名無しさんsage2009/07/03(金) 09:42:11
Lispじゃないけどそういう感じの本あったよね。
意外と面白くなかったw
それより雑誌bitのTAOの連載を合本したら面白いのに。
650デフォルトの名無しさんsage2009/07/03(金) 10:45:35
今思えば、ビューティフルコードは初心者に媚びない所だけはよかった
日本であれぐらい書ければ、もっちーがファビョることもなかっただろうに
651デフォルトの名無しさんsage2009/07/03(金) 18:26:23
>>647
あの本は初心者向けの本じゃないよ。
Lispマニア向けの本だ。初心者が読んでもそれなりに楽しめるけど。
652デフォルトの名無しさんsage2009/07/03(金) 18:29:18
LISPの本と思わずに、T先生と生徒のかけあいを楽しめばいいんだ。
653デフォルトの名無しさんsage2009/07/03(金) 20:12:01
初心者向けと書かれるとおれそんなんじゃないし読むことないや
と結局買っても積んだままにしてしまう
お決まりの言語のおさらいを数章割かれてるのを見ると頭に来るからだ
いっそのこと超上級者向けのが興味をそそられる
654デフォルトの名無しさんsage2009/07/03(金) 20:24:17
>>653
SICP も初心者向だよwW
655デフォルトの名無しさんsage2009/07/03(金) 21:51:02
だから1章で飽きて放り投げちゃったんだよ。
656デフォルトの名無しさんsage2009/07/03(金) 22:05:20
目次みて1章はつまんなそうだと思ったら3章あたりから読み始めればよかったのに。
657デフォルトの名無しさんsage2009/07/04(土) 00:37:31
良い本は、
例え初心者向けと銘打たれていても、
光る記述で満ち溢れており、
熟練者でも楽しめるものなのだ。
だからグルの書いた本は面白いのだ。
658デフォルトの名無しさんsage2009/07/04(土) 01:45:12
苫米地先生の事ですね。わかります。
659デフォルトの名無しさんsage2009/07/04(土) 01:54:17
>>658
ビビッタ。
実は、最近なぜか洗脳について勉強していたりする。関係あるの?
660デフォルトの名無しさんsage2009/07/04(土) 02:01:58
Lisperじゃん。
661デフォルトの名無しさん2009/07/04(土) 02:02:46
とまちゃんだけはガチ
662デフォルトの名無しさんsage2009/07/04(土) 02:04:31
sage忘れたすまぬ
663デフォルトの名無しさんsage2009/07/04(土) 03:21:58
竹内本は目次の時点で駄目だな
664デフォルトの名無しさんsage2009/07/04(土) 03:34:00
無縁の衆生ですな。
665デフォルトの名無しさんsage2009/07/04(土) 05:49:37
>>655
もったいないお化けが出るぞ
666デフォルトの名無しさんsage2009/07/04(土) 19:46:29
The Little Schemer買ったお。たくさん勉強するお。
667デフォルトの名無しさんsage2009/07/05(日) 10:42:05
shibuya.lispどうだった、行った人?
668デフォルトの名無しさんsage2009/07/05(日) 12:41:05
>>667
面白かったよ。#4あるならLTしようと思ったくらいには(TTはなんいどたかい)。
669デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/05(日) 13:11:03
引数のバインディング変えても外からは見えないだろ。

int f(int x) {
x = 10;
}
やってるのはこれと同じ
671デフォルトの名無しさんsage2009/07/05(日) 13:17:32
>>669
set! は変数とオブジェクトの結び付き (束縛) を付け替えるオペレータ。
set-car! や set-cdr! はオブジェクト (consセル) の中身を変更するオペレータ。
ってことを念頭に置いて考えるとわかりやすいかも。
あまりに根本的すぎることなのでそこを理解できてないようだとちょっと説明しづらい。
672デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/05(日) 13:55:51
問題をきちんと理解してから解答を考えよう
って約束したじゃないですかー
674デフォルトの名無しさんsage2009/07/05(日) 14:02:00
>>672
> 処理系がわからんから何とも言えんが、

むしろ何も言うな
675デフォルトの名無しさんsage2009/07/05(日) 14:29:33
おまえがな。
676デフォルトの名無しさんsage2009/07/05(日) 15:05:14
shibuya.lispの参加者、もっと感想・ネタを書いてくれ。
悪口・不満的な話は、直接、主催者にメールでもしてくれ。
677デフォルトの名無しさんsage2009/07/05(日) 15:24:01
いずれ上がるだろう動画を楽しみに待つ
678デフォルトの名無しさん2009/07/05(日) 15:48:43
http://www.nicovideo.jp/mylist/13373941
679デフォルトの名無しさんsage2009/07/05(日) 15:53:09
ニコに挙げたのか
つべで探してたわ
680デフォルトの名無しさんsage2009/07/05(日) 15:53:51
感謝。既に上がってるのは想定外だった
681デフォルトの名無しさん2009/07/05(日) 15:54:39
つべはこっち。
http://www.youtube.com/view_play_list?p=C7D5490AD455E464
682デフォルトの名無しさんsage2009/07/05(日) 17:24:59
>>670-672
ありがとうございます

>>671
関数の引数はjavaのように、
実体を指すポインタのコピーが渡ると考えれば良いですよね
set!だとコピーしたポインタ自体を変更しても元データには全く影響がないが
set-car!だと、コピーしたポインタの指す先を変更するので
引数にset-car!しても破壊的変更が可能

だとすれば、参照渡しで実現出来る
関数の実引数の実体を直接書き換えるような
関数の作成は不可能ですね

>>672
>そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけない
これは初めて知りました。これが原因ですね
コードはGaucheとGuileで試したのですが
どちらもクォートされたリストは共有されるような実装ってことですね
683デフォルトの名無しさんsage2009/07/05(日) 18:31:28
>>682
> クォートされたリストは共有されるような実装ってことですね

確か Gauche の場合は REPL が起動してるときは共有されないはず。
だからといってそれを期待しちゃだめなんだけど。

Gauche のマニュアルから引用 ↓

注: R5RSは、リテラル式の値を変更するのはエラーであるとしています。
しかしGaucheはペアとベクタについてはそれが定数であるかどうかをチェックしておらず、
set-car!やvector-set!等の破壊的手続きによってそれらの値を変更してもエラーは報告されません。
そうした場合の動作は不定です。
684デフォルトの名無しさんsage2009/07/05(日) 18:45:19
参照渡しって何か
ダイナミックスコープっぽいような気がするけど
この二つは何か関係あるのかな?
685デフォルトの名無しさんsage2009/07/05(日) 18:48:13
>>684
関係ない。
686デフォルトの名無しさんsage2009/07/05(日) 18:49:34
全く関係ない。
参照渡しは仮引数/実引数バインディングスタイルの一つ
ダイナミックスコープは自由変数のルックアップスタイルの一つ
687デフォルトの名無しさんsage2009/07/05(日) 18:52:02
そんなめんどうな話なのか?
局所変数と大域変数の話なのでは。
湯浅先生の「Scheme入門」だとP32〜。
688デフォルトの名無しさんsage2009/07/05(日) 18:58:16
koguro さんのトークは資料が見やすくていいなー
689デフォルトの名無しさんsage2009/07/05(日) 19:13:16
いちいちそんな糞本挙げなくていいよ
690デフォルトの名無しさんsage2009/07/05(日) 19:19:18
湯浅先生を糞呼ばわりできるお前って何様?
691デフォルトの名無しさんsage2009/07/05(日) 19:23:28
俺は>>689じゃないけど、その先生が立派な人で、その本が立派なものだったとしても時代にそぐわなくなることってあると思うんだよなー。
湯浅先生の名前があればもう否定しどころがないみたいな言い方じゃなくて、もっと良い点と悪い点を検討する必要はあるんじゃないの?
もちろん、糞本って言う方もどのへんが糞なのか示さないと議論にならんけど。
692デフォルトの名無しさんsage2009/07/05(日) 19:49:36
とりあえず糞って言っとこう的な煽りは2chの華だねw
693デフォルトの名無しさんsage2009/07/05(日) 19:51:06
たいした人でもないのに
いちいち先生つけるなよ
694デフォルトの名無しさんsage2009/07/05(日) 19:52:53
何の脈絡もなく
湯浅の糞本持ち出す687ってなんなんだろう?
695デフォルトの名無しさんsage2009/07/05(日) 20:03:58
名著はちゃんと読んだ方がいいと思うぞ。
おっと、ここは2chだったな。玉石混交ですな。
696デフォルトの名無しさんsage2009/07/05(日) 20:13:11
読む本は選べ
時間の無駄
697デフォルトの名無しさんsage2009/07/05(日) 21:01:42
嫉妬ってみっともないなとオモタ
698デフォルトの名無しさんsage2009/07/05(日) 21:05:35
糞本の宣伝に嫉妬とか
699デフォルトの名無しさんsage2009/07/05(日) 21:06:09
釣れますか
700デフォルトの名無しさんsage2009/07/05(日) 21:18:47
>>690
生暖かく見守っといてやれって。
701デフォルトの名無しさんsage2009/07/05(日) 21:24:08
湯浅の本なんて有り難がってよんでんのか
702デフォルトの名無しさんsage2009/07/05(日) 22:23:54
ところでここLispスレ
703デフォルトの名無しさんsage2009/07/05(日) 23:57:54
うっかりSICP
704デフォルトの名無しさんsage2009/07/06(月) 05:04:12
>>677
そういうことじゃないだろ。
実際に参加したの感想が聞きたいんだが。

いいアイデアが浮かんだとか、もっと○○の分野を勉強しようと思ったとか、その他いろいろ。
705デフォルトの名無しさんsage2009/07/06(月) 08:04:38
マ板行けよ
706デフォルトの名無しさんsage2009/07/06(月) 09:12:44
Scheme入門はちょっと古すぎる気がしないでもないな
内容もCommonLisp入門とほぼ同じだし。
でも絶版とはいえ某所でpdfでくばってたから結構読んでる人は居るんじゃないかな
707デフォルトの名無しさんsage2009/07/06(月) 12:32:27
>>701
ありがたがってるかどうか別として、先人への敬意が無い連中って
人として問題ありってことだと思うよ。
708デフォルトの名無しさんsage2009/07/06(月) 12:47:26
世界初のCL実装
709デフォルトの名無しさんsage2009/07/06(月) 12:48:13
世界初のCL実装でしょ。
MITあたりの人達もびっくりしたという。
710デフォルトの名無しさんsage2009/07/06(月) 12:52:02
Little Schemerに出てくるYコンビネーターってどういう利点があるの?
難しくてめげそう。だれか教えれ。プリーズ
711デフォルトの名無しさんsage2009/07/06(月) 12:56:15
実用上たいして意味は無い
(define (fact n) (if (= n 1) 1 (* n (fact (- n 1))))
みたいなのを、factっていう名前を使わずに
無名関数のみで定義できるという意義がある
712デフォルトの名無しさんsage2009/07/06(月) 12:57:21
そうそう。KCLをわずか2人で開発した日本が世界に誇るLisperだぜ。
本の内容は今となっては古い部分もあるが基本的な考え方は変わらないだろ。
713デフォルトの名無しさんsage2009/07/06(月) 13:01:27
util.sparse が組込みになってないのは、
やっぱ普通のスクリプト言語的用途だと従来のハッシュテーブルの方が効率はいいってことでいいんだよね?
714デフォルトの名無しさんsage2009/07/06(月) 13:08:15
>>710
無名関数のみで定義できるという意義ってナーヌ?
715デフォルトの名無しさんsage2009/07/06(月) 13:13:46
λ計算には関数定義なんてない
無名関数だけで再帰の計算が出来ることがわかれば
λ計算だけで、色々な計算が出来ることが示せるわけ
716デフォルトの名無しさんsage2009/07/06(月) 13:16:46
スマヌ。
λ計算だけで、色々な計算が出来ることが示せると何が証明できるの?
717デフォルトの名無しさんsage2009/07/06(月) 13:19:42
ちょっとは自分で調べれ
チャーチ・チューリングとかでググってみそ
718デフォルトの名無しさんsage2009/07/06(月) 13:26:54
>>717
ググッた。
「チャーチ=チューリングのテーゼとは、「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと同一視しようという主張である。
このクラスはチューリング・マシンで実行できるプログラムのクラス、ラムダ記法で定義できる関数のクラスとも一致する。
よって簡単にはテーゼは、計算が可能な関数とは、その計算を実行できるような有限のアルゴリズムが存在するような関数、
よっておおよそコンピュータで実行できる関数と同じだと主張する。」

つまり、「SchemeはYコンビネータがあれば計算可能な再帰関数を有限のステップで計算可能ですYO!」ってことでおk?
719デフォルトの名無しさんsage2009/07/06(月) 13:31:18
「あれば」じゃなくて「あるので」の方が正しいニホンゴかなw
720デフォルトの名無しさんsage2009/07/06(月) 13:38:34
schemeはYコンビネータを使わなくても計算可能な関数は計算出来る
普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当
721デフォルトの名無しさんsage2009/07/06(月) 14:22:44
>普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当

おお、そういうことなのか。でもよく考えると「計算できる関数」ってどういう意味かわからん。
とりあえず漏れの使う程度の関数は「計算できる関数」ってことか?
じゃ、無限ループするようなバグがある関数は「計算できない関数」ってクラスなのか?
どういう違いがあるとそうなるんだろう?
722デフォルトの名無しさんsage2009/07/06(月) 14:49:14
「Lisp脳」の謎に迫る - Schemeプログラマの発想
http://karetta.jp/book-node/gauche-hacks/023107

上のページのように問題をリストの加工と捉えて
(map 何らかの加工 (iota 100 1))
という風にすると、確かに処理が分かりやすいんだけど、
一旦、処理の過程の無駄なリストにメモリが使われますよね。
iota 10000000000 とかリストがでかくなった時を考えると、困ると思うのですが
僕が神経質なだけでしょうか。
723デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/06(月) 15:43:34
>>722
無駄を省くプログラミング技術はLisp, Schemeでも重要。

ただし、よいプログラマは本当に無駄なところだけ、改良しようとする。
(iota 1 10000000000)のセル消費が他に比べて負担が
大きいプログラムの多くはトイプログラムじゃないですか?
725デフォルトの名無しさんsage2009/07/06(月) 16:10:07
Haskellでも使えばいい
726デフォルトの名無しさんsage2009/07/06(月) 16:49:50
>>722
SICPにある遅延を使ったストリームによればいいんじゃない。

今のコンピューターはたっぷりメモリがあるんだし富豪プログラミングでも
いいとは思うけど。
727デフォルトの名無しさんsage2009/07/06(月) 19:09:25
>>721
「ゲーデルの世界」(海鳴社)にそういった計算可能関数の話があった。
今、読んでいるところ。λ、チューリングマシンとの関係の説明も
あったと思う。とりあえず原始帰納的関数から理解しようとしている。
Schemeが理解の助けになるかもしれない。
728デフォルトの名無しさんsage2009/07/06(月) 20:34:49
>>723-726
ありがとうございます。
>>724
>本当に無駄なところだけ
やたらめったら改良するより、労力のコスパが高いところを見つけて改良すれば十分って話ですよね。

>>726
3.5.1にこの話題が出てますね。
ちょっと難しいけど、これがベストな解決策だろうなぁ。
遅延ストリームを使い始めると、何でこれ遅延ストリーム使わないの!!って思うようになりそうだ。

>富豪プログラミングでもいいとは思うけど。
反復だと時間さえかければ解けるものが
リスト渡しだと記憶空間の限界に達したら絶対に解けないというのは
僕には気持ち悪さが残ります。
729デフォルトの名無しさんsage2009/07/06(月) 20:39:24
足りなくなったら考えればいいのよ
730デフォルトの名無しさんsage2009/07/06(月) 20:59:14
2000年問題、文字コード、IP枯渇・・・
731デフォルトの名無しさんsage2009/07/06(月) 21:38:55
>>727
チャーチ=チューリングのテーゼによれば、アルゴリズムのある関数は全て計算可能である。
つまり、アルゴリズムを学ぶことが計算可能関数を学ぶことに相当している。
そしてアルゴリズムを学ぶ際にはSchemeが理解の助けになる。

簡単にまとめると、「Yコンビネータがあるチューリング完全な言語ではアルゴリズムのある関数は全て計算可能である」ということになる。
あたりまえの事だけど、数学的に保証してくれてるので安心してプログラミングして計算ができるわけだ。
732デフォルトの名無しさんsage2009/07/06(月) 23:58:44
Yコンビネータの話とλ計算の話をごっちゃにしてはいけない。
コンビネータの話とλ計算の話はもともと別の話。それが途中で
コンビネータの理論はλ計算の理論に翻訳可能だとわかったので、
同時に語られることが多いというだけ。

コンビネータ理論の歴史は古くて1920年代にSchonfinkelと言う人が始めて
Curry(カリー化のカリー)が発展させた。
733デフォルトの名無しさんsage2009/07/07(火) 00:18:57
Yコンビネータに関する疑問について言えば、Yコンビネータの存在意義という
のは、確か再帰の概念が存在しない言語において再帰と同等の物を導入するため、
だったと思う。
734デフォルトの名無しさんsage2009/07/07(火) 00:50:34
そういえば、ものまね鳥、あれからすぐに図書館に
返したんだけど。借りられたかな。
735デフォルトの名無しさんsage2009/07/07(火) 01:25:05
ここで>>368のリンク先にあるラムダ式を簡約するArcのプログラムを読むと感動すること請け合いである。
736デフォルトの名無しさんsage2009/07/07(火) 07:39:45
>>713
詳しいことはドキュメントに書いてあるよ
737デフォルトの名無しさんsage2009/07/07(火) 11:14:49
まだ実験的なものかと思ってたのでドキュメント見てなかった
でも、英語の説明しかねーや。 読むのめんどい。

ところで、 sparse って名前だと sparse な何かわからんので、
モジュール名はあんまりよくないと思った。
Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…
738デフォルトの名無しさんsage2009/07/07(火) 11:28:27
保守的GCと心中する気がなければ、ただの一時しのぎだろ
739デフォルトの名無しさんsage2009/07/07(火) 20:07:45
>>737
> Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…

その発想は鳴かった
740デフォルトの名無しさんsage2009/07/07(火) 23:26:48
>>731
計算可能な関数には3つの系譜があるようだ。
○ゲーデル〜クリーニ 一般帰納的関数
○チャーチ λ−定義可能な関数
○チューリング チューリングマシンで実行できる関数

ゲーデルの流れだと原始帰納的関数は計算可能関数。
Lispの本の例題に登場するアッカーマン関数は原始帰納的関数ではないのだけど
帰納的関数であり計算可能関数らしい。階乗計算とかフィボナッチ数とかは
原始帰納的関数なんだと思う。詳しい方、間違ってたら補正してください。

741デフォルトの名無しさんsage2009/07/07(火) 23:49:28
>>740
チューリングマシンと等価なのは部分再帰関数であって、原始再帰関数は
部分再帰関数の部分集合に過ぎない。
742デフォルトの名無しさんsage2009/07/07(火) 23:54:14
>>740
あんまりわかんないなら,書き込まなくていいと思う.
743デフォルトの名無しさんsage2009/07/08(水) 00:23:08
ボイスコッド正規形ならクリーニアンクロージャ作れるからラムディ
744デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/08(水) 08:32:21
>>741
740ではないが,
原始帰納関数 ⊆ 部分再帰関数 ⊆ 一般帰納関数
ということになるってこと?
部分再帰関数と一般帰納関数の違いって何?
746デフォルトの名無しさんsage2009/07/08(水) 09:48:29
function = partial function∪total function
747デフォルトの名無しさんsage2009/07/08(水) 09:58:51
>>745
一般再帰(帰納的)関数の定義は?Kleeneの言うgeneral recursive function
の意味で言っているのなら、部分再帰関数の真部分集合。なぜなら部分再帰関数は
全域関数でもありうるから。

つまり、
原始再帰関数 c 一般再帰関数 c 部分再帰関数
ということ。ちなみに、原始再帰関数も真部分集合だぞ。Ackermann関数がその一例。

つーかおまい情報系出身か?この辺は一般常識だぞ。
門外漢なら計算理論の教科書を読むべき。
748デフォルトの名無しさんsage2009/07/08(水) 10:11:31
>>746
partial function ⊃ total function
749デフォルトの名無しさんsage2009/07/08(水) 13:01:30
オレ、門外漢なんで高橋先生の「計算論」を読んでみた。
関数と部分関数ってのがあるんだね。そこを強調するのに
部分帰納的関数という言い方をするんだそうだ。
一般帰納的関数はゲーデルの本にあった言い方で
クリーニの1936年の論文らしい。邦訳があったら読んでみたい。
750デフォルトの名無しさんsage2009/07/08(水) 15:57:45
→ゲーデルのセミナーでの言い方
ゲーデルは共同研究やセミナーで使っただけで、
帰納的関数について長らく公表しなかった。
ゲーデルにとっては公表するほどの成果ではなかったらしい。
751デフォルトの名無しさんsage2009/07/08(水) 16:26:45
ゲーデルは算定可能という概念も提案した。
結局、これら6つの同等性が証明されてチャーチの提唱へ。
752bakasage2009/07/08(水) 17:40:48
すいません、LittleSchemerが難しいと感じるのってやばいですか?
いま2章のand again, and again...のとこなんですが意味わかめです。
753デフォルトの名無しさんsage2009/07/08(水) 18:17:37
どこがわからないんですか?
754bakasage2009/07/08(水) 18:59:32
>>753
すいみません自己解決しました。

>What is the meaning og the line
>((null? l) #t)

を(#f #t) と勘違いしてました。
先に出てるdefine lat中の文章のことなんですね。もっとしっかりと読まねば。
755デフォルトの名無しさんsage2009/07/08(水) 19:11:45
しっかりしろバカ
756デフォルトの名無しさんsage2009/07/08(水) 21:27:55
再帰関数(帰納的関数)は数学的に扱いやすい良い性質があるようですが、
なぜ関数プログラミングが世の中の主流になれないのですか?
757デフォルトの名無しさんsage2009/07/08(水) 21:29:43
>>747
情報出身じゃないっす。興味あるだけの人。
そうか一般再帰関数って最小解操作を許す全域関数(total function)の
ことだったのか。
758デフォルトの名無しさんsage2009/07/08(水) 21:33:58
>>756
世の中の現象を反映させるにはオブジェクト(対象)指向じゃないとだめだろ
世の中にあるのは対象なのだから。

んでもって、対象間の関係が数学である。
オブジェクト指向開発されたシステムの真に理想的な姿というか関係が
”数学”になる、んだろ。
関数だけ持ってきても対象が無い(というか対象とは?と言う話になる)
からどうしようもないとかそういう話じゃない?よく知らんが。
759デフォルトの名無しさんsage2009/07/08(水) 22:17:21
>>758
アフォ
760デフォルトの名無しさんsage2009/07/08(水) 22:41:17
>>758
ほんとに知らなすぎでワロタ
761デフォルトの名無しさんsage2009/07/08(水) 22:49:49
いえいえ。
762デフォルトの名無しさんsage2009/07/08(水) 23:00:31
“不運”(ハードラック)と“踊”(ダンス)っちまったんだよ
に似てる
763デフォルトの名無しさんsage2009/07/09(木) 01:43:38
schemeってすばらしいですねぜひきわめたい。
764デフォルトの名無しさんsage2009/07/09(木) 01:50:35
頑張れ
Lisp/Schemeは面白いぞ
765デフォルトの名無しさんsage2009/07/09(木) 04:37:15
リリカルlisp ベルカ式はパターンマッチを主体としている
766デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/09(木) 15:23:06
色々あると思うけど例えば
(dotimes (i 10)
(dotimes (j 10)
(set! v (f i j))))
768デフォルトの名無しさんsage2009/07/09(木) 15:25:47
SRFI-42で (sum-ec (: x 11) (: y 11) (f x y))
769デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/09(木) 17:13:02
これぐらいならやはりlist comprehensionが一番かな
771デフォルトの名無しさんsage2009/07/09(木) 17:20:17
List comp(ryはlexical syntaxで読みやすさを獲得するから、
あまりLisp向きじゃないね。
http://blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/
772デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/10(金) 09:42:18
>>773
再帰関数ではあるが、原始再帰関数ではない。
775デフォルトの名無しさんsage2009/07/10(金) 16:26:55
>>774
ありがとうございました。
区別がわかってきました。
776デフォルトの名無しさんsage2009/07/10(金) 17:24:17
set! による破壊的代入がなければ絶対に書けないプログラムって
どういう種類のものですか?
777デフォルトの名無しさんsage2009/07/10(金) 17:26:59
無限リストとかじゃね
778デフォルトの名無しさんsage2009/07/10(金) 18:11:07
クリンゴン、エンタープライズの位置座標
フェイザー砲の残りエネルギー、ダメージ
779デフォルトの名無しさんsage2009/07/10(金) 20:56:17
lispでStar Trekか
http://www.xn--t8jcq9c.jp/~take/trek/trek-manj.html
780デフォルトの名無しさんsage2009/07/10(金) 21:51:43
>>779
あるんだねぇ。GCLで動いたよ。
あっけなくやられてしまった。
781デフォルトの名無しさんsage2009/07/11(土) 16:46:50
さっき知ったんだが
schemeのcondって継続渡しみたいな構文をサポートしているんだな
(cond ((or #f '(1 2 3)) => cdr))
782デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/11(土) 23:18:25
>n個の要素の括弧の付け替えからなるリスト
もうちょっと厳密に
784デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/12(日) 00:01:04
・二分木である
・葉にしか要素がない (>>784で言えば数)
・分岐には要素がない (>>784で言えば+)
という場合、要素数がn個なら木の種類は? と同じ問題。

・要素の間の何処に分岐点を持ってくるかの数え上げ
・二つの部分木に分けた後の分割統治
を考えればわかるでしょ。

786デフォルトの名無しさんsage2009/07/12(日) 01:16:07
規則とかいってるからサンプル眺めるだけでえいやっと思い付こうとしてるのかな。
n=1からn=4, 5くらいまで自分で書き出してみれば考え方もわかりそうなものだが。
787デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/12(日) 08:28:51
()を評価したら()でええの?
エラーではないの?
789デフォルトの名無しさんsage2009/07/12(日) 09:08:13
規定ではエラーだねぇ
790デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/12(日) 10:40:02
>>788
'()のがいいですね。Gaucheだとエラーにならないので
他の処理系使うまで気づきませんでした

>>790
(1 2 3)を(1 . (2 3))のように見たら
>>784を満たしているので
中途半端ですが満足してしまいました
多分ちょっといじればその出力に出来ると思います
792デフォルトの名無しさんsage2009/07/12(日) 11:01:56
>>791
自分も考えてみたけどけっこう難しい例題だと思うよ。
根本的に書き直さないといけないんじゃない?悪いけど。
793デフォルトの名無しさんsage2009/07/12(日) 11:21:17
そんなことない、ちょっと書き直したら動きましたよ

>>792さんも考えてるかもしれないのでヒントだけ
ネストしたmapの中身を修正するだけです
794デフォルトの名無しさんsage2009/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))))
795785sage2009/07/12(日) 11:34:56
実はドット対で二分木を構成した方が分かりやすい
とアドバイスを入れるかどうか迷った。
結局元の問題と違っちゃうから書かなかったけど。
796デフォルトの名無しさんsage2009/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))))))

うんこーどですが、どうでしょうか
797796sage2009/07/12(日) 11:43:40
駄目ですた
798デフォルトの名無しさんsage2009/07/12(日) 11:50:51
>>794
これは神コード・・srfi-42かぁ
799792sage2009/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)))))
800792sage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/13(月) 15:42:48
何も理解してないバカと説明する気のないバカ
804デフォルトの名無しさんsage2009/07/13(月) 16:29:33
数値計算に比べて数式処理は世の中の主流になれないみたいな感じなのかな?
map f (map g xs) == map (f . g) xsとか、数式処理みたいなものだと思うんだけど。
805デフォルトの名無しさんsage2009/07/13(月) 17:05:23
う〜ん、難しくてよくわからないな。

x = x + 1 みたいな変なのがプログラミングの世界ではまかり通ってる
のだけど、こんなの普通の高校や大学初年で習う数学じゃ扱えないはず。
高度な数学なら扱えるのかな?もっと詳しくお聞きしてみたいです。
806デフォルトの名無しさんsage2009/07/13(月) 17:19:31
数式処理が主流になれない理由は、解析的に解けない問題がたくさんあるから、だね。
807デフォルトの名無しさんsage2009/07/13(月) 17:38:25
>>805
http://en.wikipedia.org/wiki/Fixpoint_theorem
808デフォルトの名無しさんsage2009/07/13(月) 18:44:18
set-car!とset-cdr!を使って
(define a (list 1 2))
このaを'()にすることは可能ですか?
809デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/13(月) 20:53:23
gosh> (let ((src (list 'a 'a)))(set-car! src 'quote) (set-cdr! src '(()))(eval src (interaction-environment)))
()

;; unko-
814デフォルトの名無しさんsage2009/07/13(月) 21:42:37
>>805
> x = x + 1

C/C++ では lvalue と rvalue を区別してフォーマルな意味論を与えられている。
後付けの感は拭えないが、ちゃんと扱える理屈は存在する。
厳密な意味においては数学的とは言えない面はあるけど、
プログラミングに必要な要素ってのを考えると充分な妥協だと思う。
815デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/13(月) 22:39:18
>>805
代入と等式を混乱していないか
817デフォルトの名無しさんsage2009/07/13(月) 23:02:30
http://tinyurl.com/mwees3
なんで16年前のメールがgoogleグループにあるんだ?
818デフォルトの名無しさんsage2009/07/13(月) 23:09:09
ログが残っているから
819デフォルトの名無しさんsage2009/07/13(月) 23:34:06
http://tinyurl.com/m92nbe
5月には圏論をやっとる。
820デフォルトの名無しさんsage2009/07/13(月) 23:42:43
直リン張らないほうがいいな。すまん。
821805sage2009/07/14(火) 07:36:23
>>815
知りたかったのはそういうことです。
関数プログラミングは高校で習った帰納的定義、数学的帰納法など
普通の数学の延長にあるように思えました。
一方、命令型の破壊的代入を主体とするものには理屈はあるのだろうか?
と思っていました。実用的なものが関数型だけで書けるとは思ってないのですが。
822デフォルトの名無しさんsage2009/07/14(火) 07:58:33
Static single assignment的に、
X_1 = X_0 + 1
と考えると面白い。
あるlambda式をlambda droppingすると、それは、
対応するSSA文をoptimal変換したことと同じ。
823デフォルトの名無しさんsage2009/07/14(火) 09:11:10
>>821
それならホーア論理じゃなくてチューリング機械じゃないの?
824デフォルトの名無しさんsage2009/07/14(火) 11:49:11
・表示的意味論(ピラミッドの頂点=神)
数学の延長。

・公理的意味論
ホーア論理。長い証明を書く羽目に。

・操作的意味論(食われるだけの存在=ミジンコ)
抽象機械。
825デフォルトの名無しさんsage2009/07/14(火) 16:03:26
>>824
言いたいことはわからなくもないが、3つとも数学だろ。
826デフォルトの名無しさんsage2009/07/14(火) 16:25:00
>>821
意味論というより、命令型プログラミングの根拠となる計算モデルを
知りたいということではないのか?
だとすれば、RAMモデルでは破壊的代入が定義されている。
827デフォルトの名無しさんsage2009/07/14(火) 22:34:41
>>824
Aczelの項書換えシステム。文脈原理。
828デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/14(火) 23:31:26
線形論理ってアスペルガー症候群みたいな感じだね。
830デフォルトの名無しさんsage2009/07/15(水) 00:14:28
逆では?
線形論理では、上の例でA→B∧Cが成り立たない。
831デフォルトの名無しさんsage2009/07/15(水) 04:13:43
>>828
805です。自分でも何を知りたいのか混乱していました。
表示的意味論です。
「プログラム意味論」横内寛文著(赤本)は持っているのですが
よく理解できていません。R^5RSに収録されているのは表示的意味論
とのことで理解したいとは思うのですが。

ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
そうですが何故なのかと思っています。
832デフォルトの名無しさんsage2009/07/15(水) 05:12:42
Operational Semanticsは意味論を勉強してなくても簡単に理解できるからな。
833デフォルトの名無しさんsage2009/07/15(水) 05:18:25
> 「プログラム意味論」横内寛文
その本読んでみたいんだけど売ってないんだよね。
834デフォルトの名無しさんsage2009/07/15(水) 12:17:28
>>831
>ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
>そうですが何故なのかと思っています。

表示的意味論が分かり難い上に実装にも証明にもあまり役に立たないから。
しかもR5RSのは矛盾だかあいまいさが証明されてたはず。
835デフォルトの名無しさんsage2009/07/15(水) 17:43:24
>>805
意味論を理解することが目的なら、もう少し具体的に今どこがわからないのかを
示せばここで解説される可能性はある。

意味論がさっぱりわからん、ということでしかないとすると、本読め、以外にない。

意味論を理解することが目的じゃなくて、何かをするために意味論を理解したい
なら、目的を示した方がいいと思う。それについて助言可能かもしれない。
836デフォルトの名無しさんsage2009/07/15(水) 18:08:29
>>828
いや、変数、変項、というのは形式的な数学では日常茶飯事だから、
代入というのは数学でもよくある概念じゃないか? それは人間の
頭の中で実施されることが多いが、何かを証明するときに紙に
書いたりもする。

よくある概念であるがゆえ、それ自体が明示的な対象となるのは数学基礎論
にはなるが。

あと、一見代入だからといって副作用を伴うとは限らない。
述語論理のユニフィケーションとかもあるし。
837デフォルトの名無しさんsage2009/07/15(水) 18:17:42
代入?いいえ項書換えです
838デフォルトの名無しさんsage2009/07/15(水) 18:25:32
>>835
805です。数学がわからないと数学を必要とするコンピューターの理論も
理解できないのではないかと思いしばらくの間、数学の勉強に行っていました。
目的はプログラムと数学との関連の理解です。
本を読みつつ、ご助言を仰ぐこともあるかもしれません。よろしくお願いいたします。
839デフォルトの名無しさんsage2009/07/15(水) 18:49:37
真面目に勉強するなら2chにレスしてないで本読めでぶ
840デフォルトの名無しさんsage2009/07/15(水) 19:03:00
>>839
ああ、ここは2chだってことを忘れてた。でも玉石混交だから。
841デフォルトの名無しさんsage2009/07/15(水) 19:18:18
>>838
それなら、まずは計算可能性理論を勉強してみると良いな。
842デフォルトの名無しさんsage2009/07/15(水) 20:27:45
>>838
上にでてきたfjとか。2chだとせっかくの話が消えてしまう。
ただ、迷惑にならないようにしたほうがいいだろうけど。
843デフォルトの名無しさんsage2009/07/15(水) 21:04:29
>>802
>また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
>すべてという意味なら、それは正しくない。

難しい話になるとは思うのですが、現時点では”数学”とは何を指している
言葉だといえるのですか。
マックレーンはアイディアを抽出化して形式化したものが数学だ、形式機能主義だ
と言ってるんですけど、それって、つまり数学的対象とはあくまで形式という事なんですか。

確かに、理解していないバカではある。書いてて確かに思う。
けど、表立っては出ないがこういう話が問題になる分野領域は存在する気がするんだよね。
844デフォルトの名無しさんsage2009/07/15(水) 21:16:33
もう十分以上の情報が出ているぞ

耳学問としょうもないプライドのせいで
無知だとかバカだとか思われたくないからいつまでも演説を続けるんだろうが
いいかげん黙れ
845デフォルトの名無しさんsage2009/07/15(水) 21:19:29
805=815で釣りでもやってるのかと思ったが
846802sage2009/07/15(水) 22:41:53
>>844
おお、すまなかった。誰を指しているかがイマイチわからんが、
この流れをつくった私がいけないのだろう。

>>843
というわけで、すまんが退散しようと思う。844の言うとおり、
結構いろいろな情報が出ているので、参考にして欲しい。

お邪魔しました。

847デフォルトの名無しさんsage2009/07/16(木) 01:17:17
>>844
混在してわけがわからないことになってるけど、いくつか独立した話しが
並行して進んでいるんだよ。
それに、そんなぶっきらぼうに言っちゃうとみんなびっくりしてしまうよ。
848デフォルトの名無しさんsage2009/07/16(木) 01:43:59
たまに情報学板のことも思い出してあげてください。
849デフォルトの名無しさんsage2009/07/16(木) 01:48:23
確かに最近の話題は情報学板の方が向いてるな。
あそこ過疎りすぎだけど、見てる奴はそれなりにいるっぽい。
850デフォルトの名無しさんsage2009/07/16(木) 03:37:46
>>838
数学とか理論計算機科学の話題だったらプログラム板はやめておいたほうがいいよ。
でたらめな情報が多すぎてろくなことがないから。
851デフォルトの名無しさんsage2009/07/16(木) 04:02:29
>>850
情報学板に移動するよ。ありがとう。
852デフォルトの名無しさんsage2009/07/16(木) 08:45:47
ERR5RS(だっけ?)って幾らかでも流行ってるんですか?
853デフォルトの名無しさんsage2009/07/16(木) 13:51:52
顧みるにR5RS自体流行ってるかな?
お察しください
854デフォルトの名無しさんsage2009/07/16(木) 16:05:08
LOL邦訳本ってamazonじゃ普通に買えないんだろうか。
ページはあるんだけど、なぜかプレミア価格の出品しかない。(´・ω・`)
855デフォルトの名無しさんsage2009/07/16(木) 22:57:07
まさかすぐに絶版にしたりしないよね?
856デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/17(金) 01:43:50
>>855
弱小出版会社だから、東販/日販の初回取り扱いが少なかったんだと思う。
注文すれば、出版社に発注されるでしょう。在庫はしているだろうから。
859デフォルトの名無しさんsage2009/07/17(金) 05:31:14
ふぁびょったってしゃーない。
860デフォルトの名無しさんsage2009/07/17(金) 05:33:54
と書いたけど、LOLが売れるとはおもえない。グレアムのような知名度もなけりゃ
LOLそのものがそれほど定評だったレビューもなかった。
なにより、極度にマニアックだから。
細く長く生き残ればよいという本だと思う。
861デフォルトの名無しさんsage2009/07/17(金) 05:55:53
On Lisp はついてけないけどLOLは単にLisp最強伝説本として楽しめた
862デフォルトの名無しさんsage2009/07/17(金) 07:36:45
COMIC LOL
863デフォルトの名無しさんsage2009/07/17(金) 13:09:17
LOLは前提知識それほど必要ないの?
864デフォルトの名無しさんsage2009/07/17(金) 13:28:47
いまから買いに行こうと思ってたのに・・・・・
865デフォルトの名無しさんsage2009/07/17(金) 14:49:16
>>863
コードが短くて解説がうまいから分かった気分になれる
866863sage2009/07/17(金) 16:44:02
>>865
じゃあ丘リスパーの漏れにぴったりでつね(自嘲
867デフォルトの名無しさんsage2009/07/18(土) 02:23:20
>>852
ERR5RSは、実際に対応してるのはLarcenyくらい。
提唱者のWilliam D Clingerが開発してるから当然だけど。
Ypsilonは対応予定。Gaucheもそのうち対応する予定。予定は未定。
他は知らない。

ちなみに、ERR5RSで書いてる人はいる。主にLarceny-usersとかに。
というわけで、will先生の活躍に御期待下さい。
868デフォルトの名無しさんsage2009/07/19(日) 07:43:54
連休中、みなさんはLOLを読みふけるのでしょうか^^
869デフォルトの名無しさんsage2009/07/19(日) 09:23:21
とりあえず著者はVimmerってとこまで読んだ。
870デフォルトの名無しさんsage2009/07/19(日) 09:38:45
とりあえずForth最高!ってところまで読んだ。
871デフォルトの名無しさんsage2009/07/19(日) 11:43:17
postscript万歳!ってところまで書いた
872デフォルトの名無しさんsage2009/07/19(日) 12:36:02
LOL、オビの煽りに苦笑い、スルーw
873デフォルトの名無しさんsage2009/07/19(日) 13:46:39
lolって略はネトゲ的にどうなんだろう
874デフォルトの名無しさんsage2009/07/19(日) 13:55:47
LOLは元々ネトゲ用語じゃないよ
875デフォルトの名無しさんsage2009/07/19(日) 18:40:27
MUDからUsenetに輸入された可能性もあるので一概にそうとも言えない
876デフォルトの名無しさんsage2009/07/19(日) 21:09:04
emacs論だけ立ち読みすれば十分な本だな
877デフォルトの名無しさんsage2009/07/19(日) 22:35:35
>>854
今見ると「一時的に在庫切れですが、商品が入荷次第配送します。 」だそうですよ
878デフォルトの名無しさんsage2009/07/19(日) 22:48:12
タイトルがかっこいい
class over defとは違うんですみたいな
879デフォルトの名無しさんsage2009/07/20(月) 00:51:52
lol=laugh out loudly だからwwwwwwwww だよ。
880デフォルトの名無しさんsage2009/07/20(月) 21:28:37
Lispは関数型言語じゃない。まで読んだ。
881デフォルトの名無しさん2009/07/20(月) 21:59:02
すみません、私はschme大好き人間なんですが、
common lispの defunが嫌いです。「でふん」っていう語感が。
やっぱしscheme最強でしょ。
882デフォルトの名無しさんsage2009/07/20(月) 22:02:31
致命的なまでに英語が苦手なようだなw
883デフォルトの名無しさんsage2009/07/20(月) 22:05:35
でふん
デフィネ
884デフォルトの名無しさんsage2009/07/20(月) 23:05:35
つか気に入らないなら自分で好きな名前にすればいいじゃない
これだから最近scheme始めたガキは困る
885デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/21(火) 01:08:10
labels使え
888デフォルトの名無しさんsage2009/07/21(火) 01:19:29
let over set!
889デフォルトの名無しさんsage2009/07/21(火) 03:07:15
letrec over μ
890デフォルトの名無しさんsage2009/07/21(火) 03:17:25
scheme大好きな私ですがたった一つ好きになれないのがランバダです。
語感が嫌ですね。
891デフォルトの名無しさんsage2009/07/21(火) 03:40:41
コードギアスでさぁ、
ルルーシュが C.C. の名前を呼ぶ場面があるでしょ。
call/cc を見るたびに連想するんだ
892デフォルトの名無しさんsage2009/07/21(火) 04:01:29
でっかいアニメ好きです
893デフォルトの名無しさんsage2009/07/21(火) 04:39:34
俺はCCガールズっていう人達見ると思い出すな。
894デフォルトの名無しさんsage2009/07/21(火) 04:49:01
それじゃあ、思い出さないんですね。見ることないもんね。
895デフォルトの名無しさんsage2009/07/21(火) 05:01:59
その代わりにCCレモンをよく見るからね。
896デフォルトの名無しさん2009/07/21(火) 08:54:45
lispのコードを出してくれるyacc,lexって有りますか?
897デフォルトの名無しさんsage2009/07/21(火) 09:19:46
CCっていったらサクラだろJK
898デフォルトの名無しさんsage2009/07/21(火) 09:25:46
俺もNHKでやってるという免罪符で見てた>CCさくら
なんか色使いが綺麗だったし
話自体はよくわからなかった
899デフォルトの名無しさんsage2009/07/21(火) 09:57:57
それを言うならリリカルなんて
900デフォルトの名無しさんsage2009/07/21(火) 10:46:49
リリカル・トカレフ・キルゼムオール
901デフォルトの名無しさんsage2009/07/21(火) 11:03:05
りこさんのエロ画像キボンヌ
902デフォルトの名無しさんsage2009/07/21(火) 13:09:07
おまいはこっちに行けw
http://pc12.2ch.net/test/read.cgi/tech/1183396621/
903デフォルトの名無しさんsage2009/07/21(火) 13:42:06
もっとネタscheme処理系を!
904デフォルトの名無しさんsage2009/07/21(火) 13:44:06
いぷしろん萌え
905デフォルトの名無しさんsage2009/07/21(火) 16:17:27
VSCM萌え
906デフォルトの名無しさんsage2009/07/21(火) 20:47:00
Mathematica 萌え
907デフォルトの名無しさんsage2009/07/21(火) 21:29:44
割と普通に関数型として使えるのには感心したが
正直書きにくかった
908デフォルトの名無しさん2009/07/21(火) 22:30:28
Little Schemerを読んでるんですが、Qを読んですぐAを読むっていう
ただ読んでるだけなんですが、
みなさんはちゃんと自分で答えを考えながら読んでるんですか?
909デフォルトの名無しさんsage2009/07/21(火) 22:32:49
俺は考えて読んだけど、好きなようにすればいいんじゃないかな。
一度全部読んでから、次は自分で考えれば?
たぶん二回目でも100点にはならないと思うから、
二回読むことには意味があると思う。
910デフォルトの名無しさんsage2009/07/22(水) 00:26:36
>>909
なるほど、ありがとうございます。
いま3章の終りに来ていますがなかなかなか複雑で頭を使います。がんがる。
911デフォルトの名無しさんsage2009/07/22(水) 02:23:55
LOLなんだけど、ざっと斜め読みしてたら、
マクロを本当に使いこなせるのはSchemeで修行してきた人達だ。
みたいなことが書いてあった。
912デフォルトの名無しさんsage2009/07/22(水) 04:29:56
Schemerのほうが偉い症候群ですねわかります
913デフォルトの名無しさんsage2009/07/22(水) 17:44:32
↓ここからCLerの猛反論
914デフォルトの名無しさんsage2009/07/22(水) 18:19:14
まあ最近はSchemeからこの世界に入って、
Schemeで修行せずにCommon Lisp入る人の数の方が少ない、
ってのはそれほど間違ってないと思う。
Schemeは取り上げる大学が多いからね。
そんな噛みつくことじゃないのでどうでもいい。
915デフォルトの名無しさんsage2009/07/22(水) 19:25:41
C99/C++のコメントを除去したかったので
コードを書いたんだけどえらい遅い
改良するとしたらどの辺でしょうか?

最初非末尾再帰版で書いて
末尾再帰に書き直したのですが
相互再帰関数は通常最適化されないのですかね?
処理時間が通常の再帰版と同じで
250kbのファイル(5千行中4000行がコメント)
を処理するのに100秒かかります

コード(続く)
916デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/22(水) 20:18:56
>>915
test の中の (length lst)
918デフォルトの名無しさんsage2009/07/22(水) 20:21:17
コメントが現れる度string->listしてる所、
(test "/*" l)とかを
(test `,(string->list "/*") l)
にしとくとか。(test側も修正)
それと、100秒掛かるって言われても判らんから
環境と処理系も書いて欲しいな
919デフォルトの名無しさんsage2009/07/22(水) 20:25:49
あ、`',(string->list "/*")にしないとだめだったかな
動かしてないから間違ってたらごめん
920デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/22(水) 21:24:16
上の"/*"みたいな最終的にstring->listに掛かるようなやつって
gaucheじゃ定数伝播してくれないのかな
923デフォルトの名無しさんsage2009/07/23(木) 12:29:59
数値計算を主体でプログラムしてると
あまり自分でマクロを作る場面に出くわさない
on lispのマクロはそのまま使ったりするけど
924デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/23(木) 13:28:31
何が?
926デフォルトの名無しさんsage2009/07/23(木) 17:44:08
いや、なんでもない
927デフォルトの名無しさんsage2009/07/23(木) 17:48:00
let/ccってのはPLTやGaucheにあるね
928デフォルトの名無しさんsage2009/07/24(金) 00:17:53
redditから
ttp://www.google.com/search?hl=en&q=recursion
929デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/25(土) 05:18:15
> unzip *.zip

訂正
for f in *.zip; unzip $f
932デフォルトの名無しさん2009/07/25(土) 09:45:41
MatzLispを搭載してるmfilerで展開&連番リネーム
933デフォルトの名無しさんsage2009/07/25(土) 18:25:06
MatzLispなんてLispはありません
Lispと言うからにはS式とマクロがないと駄目です
934デフォルトの名無しさんsage2009/07/25(土) 19:28:09
lisp--
935デフォルトの名無しさんsage2009/07/25(土) 19:52:08
l4u…
936デフォルトの名無しさんsage2009/07/25(土) 20:07:36
AVRやPICで使えるSchemeってある?LEGO Mindstrom用は見つけたけどマイコン用は見つからなかった。
937デフォルトの名無しさんsage2009/07/25(土) 20:09:27
stalinでCコード吐かせてgccでコンパイルする
938929sage2009/07/25(土) 21:15:23
なんだ結局正規表現に頼るのか
939デフォルトの名無しさんsage2009/07/25(土) 21:19:55
こういう時のための正規表現だからね。

まぁ、正規表現に親を殺されて憎んでいるから絶対使いたくないとか、
そういう理由があるなら仕方ないかもしれんが。
940デフォルトの名無しさんsage2009/07/25(土) 21:50:57
正規表現殺人事件
「私は見ました!! 彼はバックトラックに轢き殺されたんです!!」
941デフォルトの名無しさんsage2009/07/25(土) 22:10:15
オートマでした
942デフォルトの名無しさんsage2009/07/25(土) 22:47:25
>>936 Marc Feeleyの研究室で何年か前にPIC用Schemeコンパイラを作ってた人がいたと思う。
943デフォルトの名無しさんsage2009/07/25(土) 22:54:44
>>938
やりたければ SRE でも PEG でも使うがいい。
やろうとしてることがいかにもスクリプト言語的なので、
手段だってそれに見当ったものになるだけだろ。
そこに Lisp らしさを求めたところでナンセンスなだけだ。
944929sage2009/07/25(土) 23:30:41
>>943
> やりたければ SRE でも PEG でも使うがいい。
SRE S-expression Regular Expression
PEG Parsing Expression Grammar
ですね.勉強します.

> やろうとしてることがいかにもスクリプト言語的なので、
はい,あえてこういう問題をLisperはどう考えるか知りたくてきいてみました.
ありがとうございました.

945デフォルトの名無しさんsage2009/07/26(日) 01:33:50
>>944
というか、そもそもLisp族での回答が出てないじゃないか。

典型的なパターンだと、ディレクトリを探索する手続きに、
ファイルごとの処理を行う手続きを渡すのがLisp的だと思う。
文字列のマッチングとかは、SREとかPEGとかあるけど、
特別Lisp的に、ってのは無いんじゃない?
946デフォルトの名無しさんsage2009/07/26(日) 03:30:51
まぁ、質問が悪すぎたね。
物事を「無駄に難しく」解決したくてLispをやってる人なんて、
そう居ないわけだからさぁ。
947デフォルトの名無しさんsage2009/07/26(日) 05:04:52
だが、SICPの日本語は無駄に難しい。
948デフォルトの名無しさんsage2009/07/26(日) 06:05:22
質問者の頭が悪すぎた
949デフォルトの名無しさんsage2009/07/26(日) 07:46:32
>>946
そうだったのか。おれは"物事を「無駄に難しく」解決したくてLispをやってる"と思ってた。
頭の体操のために開発された言語だと思っていたが間違っていたか。、
950デフォルトの名無しさんsage2009/07/26(日) 08:11:56
まぁ、間違ってるね。
言語としてのLispは、ラムダ算法の表現法として開発されたのであって、頭の体操の為ではないし、
「頭の体操」が主に指向するのは、物事を「無駄に難しく」解決することではなく「美しく」解決することだし、
(その美しさを理解or表現する力を身につけるのが「難しい」ということはあり得るけど)
句点のあとに読点つけるのは、正式な日本語としても、2chによく見られる崩しとしてもおかしいし。
951デフォルトの名無しさんsage2009/07/26(日) 08:38:17
「。、」 は

↓こんな風に落ち込んでる人の顔文字だと解釈した。
。、
-
952デフォルトの名無しさんsage2009/07/26(日) 09:21:18
>>950
読点消し忘れたからってそんなに喜ぶなよ。
ラムダ算法の表現法として開発されたということはラムダ算法に無縁の人には
いらない言語ということか納得できる答えだ。頭の体操の定義はおいといてい
らない人には頭の体操以外のなんでもない。
953デフォルトの名無しさんsage2009/07/26(日) 09:38:13
> 言語としてのLispは、ラムダ算法の表現法として開発されたのであって、

リスト処理用の言語として作られたんであって、ラムダは用語以外関係ない。
954デフォルトの名無しさんsage2009/07/26(日) 10:25:17
>>952
何をムキになって、相手の言葉からできるだけ相手が辿り着いて欲しく無さそうな結論を見出す
中二病っぽいクソゲーを頑張ってるのかわからないけど、
最初に開発した人の目的なんて、その後の人々にはそこまで関係のあるものではないよ。
Unix開発したい人だけがCを使うわけでもなし。
955デフォルトの名無しさんsage2009/07/26(日) 10:27:58
あと、「いらない人には」って条件つけちゃったら何でもアリだよな。
板チョコから人命まで、「いらない人には価値を見出すことができない」のは共通でしょ?
956デフォルトの名無しさんsage2009/07/26(日) 10:33:29
あなたもわざわざ構いなさんなw
957デフォルトの名無しさんsage2009/07/26(日) 10:35:21
>>953
リスト処理用のFORTRANライブラリとして歩みだし、
ラムダ算法の表現を模索するうちにプログラミング言語となった。
といってもそれほど間違ってないと思う。
958デフォルトの名無しさんsage2009/07/26(日) 10:44:41
>>956
でも、そんな長くない文章でかなり凄いこと言いまくってて、つい反応してしまうだろうこれはw
「Xの定義はおいといて、X以外のなんでもない」って物言いも、かなりキてるし。
「頭の体操のために開発された言語」という話を「いらない人には頭の体操」まで一気に前線下げて、
それを鼻息のパワーアップでカバーしようとしてるのも、えらくシュールだし。
なんか変な資質あるぞ、この子w
959929sage2009/07/26(日) 10:55:16
なるほど,Lispにとってこういう問題は難しいのですね.
Lisperと名乗る人も身近なものにはLispを使わない.
ググったところで教科書の写経をするページしか見つからないわけですね.
960デフォルトの名無しさんsage2009/07/26(日) 11:12:44
おれがよく行くアニメ系板ならわんさかこーゆーのいるけど。

>>959
Lispに限らず他言語のスレ行っても「ファイラでやれ」「シェルでやれ」って反応が殆んどだと思うが。
あーでもrake使ってエロ画像整理とかはやってる人が稀にいるかもしれん。

正しく道具を使い分けるよう心がけてる人が多いのはどの辺だろうねぇ。
961デフォルトの名無しさんsage2009/07/26(日) 11:14:52
ttp://evalwhen.com/pregexp/index.html
正規表現も自前で実装するのが Lisp クオリティ
962デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/26(日) 11:37:04
>>959
どういう過程を辿ってそういう結論に至ったのかは知らないけど、
別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。
某ネ実ゲーの武器の性能計算したりとか、もう日常感たっぷり。

ネット見ると結構そういうのあると思うんだけどな。
ニコニコのコメント抜き出したり、WinampをSchemeで操作したりしてる人とかいたよ。
965929sage2009/07/26(日) 11:40:01
> 正規表現も自前で実装するのが Lisp クオリティ
正規表現を必要としないのが Lisp クオリティと思ってた.
966デフォルトの名無しさんsage2009/07/26(日) 11:51:17
>>916とかは正規表現では出来ない例
正規表現で出来ない問題を出せよ
9679292009/07/26(日) 11:58:49
>>964
> >>959
> どういう過程を辿ってそういう結論に至ったのかは知らないけど、
> 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。

はい,945の方がおっしゃってるように
ディレクトリを探索する手続きに,ファイルごとの処理を行う手続きを渡すというのは理解できるのですが
ここで正規表現って発想ではなくリードマクロを使って...てのを期待してました.

968929sage2009/07/26(日) 11:59:36
>>966
> >>916とかは正規表現では出来ない例
> 正規表現で出来ない問題を出せよ

やりたいことはエロファイルの整理です.
969デフォルトの名無しさんsage2009/07/26(日) 12:04:17
エロファイルの整理がしたいんじゃなくて
Lispのリードマクロを使った回答を知りたい、が正しいんじゃないの?

その目的なら>>930-931で回答が出てるんだから
970929sage2009/07/26(日) 12:10:38
やりたいことは,エロファイルの整理
知りたいことは,シェルスクリプトなどで簡単にできる問題を lisp脳はどう考えるかです.
971デフォルトの名無しさんsage2009/07/26(日) 12:17:12
シェルスクリプト使うよ
972デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/26(日) 12:27:17
>>970
rename.pl(1)使います。
974デフォルトの名無しさんsage2009/07/26(日) 12:32:52
>>967
俺その>>945

リーダーマクロについて、何か勘違いをしてる気がする。
根本的に正規表現とは違う層の概念だよ。
独自の記法をS式にマッピングするだけ。

単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
パーザコンビネータとかがそれ。上に出てるPEGとか。
975デフォルトの名無しさんsage2009/07/26(日) 12:56:46
>>958
あなたには頭の体操は「美しく」解決しなきゃいけないのかそれともそうではないのか。
「美しく」とはどういうことかなどを定義されることをお勧めします。そしてその後レス
してください。
976929sage2009/07/26(日) 14:30:38
>>974
> リーダーマクロについて、何か勘違いをしてる気がする。

いえ,理解出来ていないというか,誤解しているのでしょう.
だから,相手に対して勘違いをあたえる.

> 根本的に正規表現とは違う層の概念だよ。
> 独自の記法をS式にマッピングするだけ。

ディレクトリ(ファイル)名のリストを作る.そのリストを読み込む際,リードマクロを使って処理をディスパッチする.のかなぁって考えました.

> 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
> パーザコンビネータとかがそれ。上に出てるPEGとか。

文字列処理で正規表現使わない.リードマクロを使う.と言う発想じゃなくPEGを使うって発想するのですね.
977デフォルトの名無しさんsage2009/07/26(日) 14:44:38
>> リーダーマクロについて、何か勘違いをしてる気がする。
>いえ,理解出来ていないというか,誤解しているのでしょう.

勘違いして理解してるから誤解だろ。
978デフォルトの名無しさんsage2009/07/26(日) 15:06:02
>>976
リードマクロは表現をS式にマッピングする機能だって上で出てるだろうが。
書いてある表現のパースは必要なんだよ。
違う層の話が入り混じっててわけわかんなくなってるぞ。
979デフォルトの名無しさんsage2009/07/26(日) 15:20:13
まあ確かにcfgやreは無駄に難しいから
素朴な再帰下降パーサーを高階関数とかで改良していこうという方針は正しい気がする

そして、Perlのような言語がそういう方針転換をするよりも
過去の成果物にとらわれないLispのほうが有利だと言えないこともない
980デフォルトの名無しさんsage2009/07/26(日) 19:08:54
50以上レスが進んでるから何かと思えばずっと雑談か
暇だなおまいら
981デフォルトの名無しさん2009/07/26(日) 19:53:39
処理系何使ってるあたしはGauche。
982デフォルトの名無しさんsage2009/07/26(日) 20:40:58
            /\___/ヽ
         /ノヽ       ヽ、
         / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ
         | ン(○),ン <、(○)<::|  |`ヽ、
         |  `⌒,,ノ(、_, )ヽ⌒´ ::l  |::::ヽl  
.        ヽ ヽ il´トェェェイ`li r ;/  .|:::::i |
        /ヽ  !l |,r-r-| l!   /ヽ  |:::::l |
       /  |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄
       /   | .|           | .| ,U(ニ 、)ヽ
      /    | .|           | .|人(_(ニ、ノノ
983デフォルトの名無しさんsage2009/07/26(日) 20:51:39
テキスト処理を主体としたいわゆる「スクリプト言語」的な使い方をするなら Gauche はやはり強いよなぁ。
日本語の扱いをちゃんとしているところがよい。
Ypsilon なんかはやたら高速なのがよい。
まぁ、用途によるんじゃね?
984デフォルトの名無しさんsage2009/07/26(日) 20:58:51
Gaucheとclisp、newlispを入れてる
newlispは簡単にwindow出せたりして面白いよ
985デフォルトの名無しさんsage2009/07/26(日) 21:30:14
ベタで申し訳ないが、schemeの健全なマクロって必要なのか?
正直 ` , ,@ (gensym) だけのほうがスマートだし、変数捕捉されるのも考慮してこそマクロだと思うんだけどなぁ。
schemeの仕様作ってる人は何を心配してるんだろう。ユーザのこと心配してくれてるのかな。
(PGが人が使う用の為に作っちゃダメっていってたよ。)
986デフォルトの名無しさんsage2009/07/26(日) 21:30:36
ノシ clisp
987デフォルトの名無しさんsage2009/07/26(日) 21:35:59
不健全なマクロはきたない。健全なマクロのほうが美しい。
988デフォルトの名無しさんsage2009/07/26(日) 21:54:42
` gensym を必要としなくなれば
シンボルやコンスが無い言語でもマクロが書けるようになるかもしれない
989デフォルトの名無しさんsage2009/07/26(日) 22:11:13
>>985
モジュール化が絡んでくるとそう単純な話ではない。
scheme と CL ではスコープのルールも若干違う。
健全性に固執しすぎなのは確かかもしれないけど、
Scheme 的な一貫性のためには必要だと思うよ。
990デフォルトの名無しさんsage2009/07/26(日) 22:21:20
>>985
scheme では同じ名前のシンボルは常に同じシンボルなので、
gensym では名前の衝突を本質的には回避できない。
991985sage2009/07/26(日) 22:28:07
なるほど。今まで馬鹿みたいに「うは、ペアeval apply ぐるぐる最強!」とか思ってたけど、
ことはそう単純じゃないのね。もうちょっと精進するよ。馬鹿みたいなこといってごめんね。
992デフォルトの名無しさんsage2009/07/26(日) 23:09:19
純粋さよりも簡潔さを重んじるSchemeとしてはそれこそ
シンプルな古典的マクロの上に保健的マクロを構築するアプローチのほうが合っていると思う
R5RSのなかでもsyntax-rulesは浮いているように感じる
993デフォルトの名無しさんsage2009/07/26(日) 23:46:52
>シンプルな古典的マクロの上に保健的マクロを構築する

挫折した奴がここにおわす
994デフォルトの名無しさんsage2009/07/26(日) 23:52:29
>シンプルな古典的マクロの上に保健的マクロを構築する

これをまじめにやろうとすると、言語の構文をほぼ全て上書きして
意味論を追加するってこと
LISPだから可能なんだけど
おれは挫折した
995デフォルトの名無しさんsage2009/07/27(月) 01:06:27
シンプルさを保つべきだって考えと現実問題を解決するときに少々の汚れ仕事を請け負っても良いの2派閥の間の溝だからなぁSchemeとCommonLISP
996デフォルトの名無しさんsage2009/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デフォルトの名無しさんsage2009/07/27(月) 08:32:57
Monoでそれなりには動くらしいよ
使ったことないからよく知らんけど
1000デフォルトの名無しさんsage2009/07/27(月) 09:25:26
SML#があるじゃん
10011001Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
 254KB (260971Byte)
dummy_for_searchRef

DAT2HTML 0.32g Converted.