トップページ⇒tech
1001コメント315KB

Lisp Scheme Part25

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2009/01/13(火) 23:16:33
※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※

Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/
Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part09: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
0002デフォルトの名無しさん2009/01/13(火) 23:17:35
□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)

□参考リンク□

日本Lispユーザ会 (日本語)
ttp://jp.franz.com/jlug/index.html
ここにかなりの情報があります。削るとAllegro Common Lispのページへ。

プログラミング言語Scheme (日本語)
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。

Schemeへの道 (日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
Schemeの入門サイト。

Practical Scheme (日本語)
ttp://practical-scheme.net/index-j.html
Scheme処理系「Gauche」の作者である川合史朗氏のサイト。
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。

LispUser.net (日本語)
ttp://lispuser.net/
Lisp関連の有用な情報がまとめられています。Common Lispの話題が中心。
0003デフォルトの名無しさん2009/01/13(火) 23:18:30
面倒くせえ
後は誰か頼むw
0004デフォルトの名無しさん2009/01/14(水) 00:08:31
□仕様関係□

CLtL2: Common Lisp the Language 2nd edition (英語)
ttp://www-2.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html

CLHS: Common Lisp Hyper Spec (英語)
ttp://www.lispworks.com/documentation/HyperSpec/Front/index.htm

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

R5RS: Revised(5) Report on the Algorithmic Language Scheme (英語)
ttp://swiss.csail.mit.edu/~jaffer/r5rs_toc.html

R5RS: Revised(5) Report on the Algorithmic Language Scheme (日本語)
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html

ERR5RS: A proposal for an Extended R5RS Scheme (英語)
ttp://scheme-punks.cyber-rush.org/wiki/index.php?title=ERR5RS:Charter

R6RS: Revised(6) Report on the Algorithmic Language Scheme (英語)
ttp://www.r6rs.org/final/html/r6rs/r6rs.html
0005デフォルトの名無しさん2009/01/14(水) 00:08:56
□Wikipedia関連□

ttp://ja.wikipedia.org/wiki/LISP
ttp://ja.wikipedia.org/wiki/Common_Lisp
ttp://ja.wikipedia.org/wiki/Scheme

□継続関連□

なんでも継続 (日本語)
ttp://practical-scheme.net/docs/cont-j.html

Schemeへの道:継続 (日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html

継続の使い方 (日本語)
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation

継続の使用法 (日本語)
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html

Kahua: 継続ベースのアプリケーションサーバ。
ttp://www.kahua.org/
0006デフォルトの名無しさん2009/01/14(水) 00:09:24
□書籍関連(1)□

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

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

How to Design Programs (英語)
ttp://www.htdp.org/2003-09-26/Book/
Schemeを使った優れたプログラミング入門書。全文がオンラインで読めます。

The Little Schemer (英語)
ttp://www.ccs.neu.edu/home/matthias/BTLS/
The Seasoned Schemer (英語)
ttp://www.ccs.neu.edu/home/matthias/BTSS/
Schemeの教科書として定評のある「Schemerシリーズ」のサポートページです。

The Scheme Programming Language (英語)
ttp://www.scheme.com/tspl3/
Scheme入門書。全文がオンラインで読めます。
0007デフォルトの名無しさん2009/01/14(水) 00:10:01
□書籍関連(2)□

『プログラミングGauche』 (日本語)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-87311-348-7
ttp://karetta.jp/book/gauche-hacks (立ち読み版)
ttp://karetta.jp/book-cover/programming-gauche (サポートページ)
Scheme処理系言語Gaucheの初の解説書!

『入門Scheme』 (日本語)
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
幻となったScheme入門書。全文がダウンロードできます。

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

Practical Common Lisp (英語)
ttp://www.gigamonkeys.com/book/
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06721-1
S式の羅列で現実的な問題をどう解くのか、そのギャップに悩まされてる人に。
全文がオンラインで読めます。日本語版は『実践Common Lisp』として出版されています。
ttp://pcl.lispuser.net/ (日本語版非公式サポートページ)

『On Lisp』 (日本語)
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06637-5
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/ (日本語訳HTML版)
ttp://www.paulgraham.com/onlisp.html (英語原文がダウンロード可)
LispハッカーPaul Grahamが、Lispの力の源泉であるマクロプログラミングを解説。
0008デフォルトの名無しさん2009/01/14(水) 00:10:14
実装いろいろ
ttp://community.schemewiki.org/?scheme-faq-standards#implementations
0009デフォルトの名無しさん2009/01/14(水) 00:10:24
□その他(1)□

John McCarthy's Home Page (英語): Lispの生みの親、ジョン・マッカーシーのサイトです。
ttp://www-formal.stanford.edu/jmc/

Association of Lisp Users (英語): 米国のLispユーザ会です。
ttp://www.alu.org/alu/home

CLiki (英語): Common Lisp関連のリソースが集積されています。
ttp://www.cliki.net/index

CMU Common Lisp Repository (英語): 新旧様々なプログラムが置いてあります。
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html

The Common Lisp Cookbook (英語): いわゆるCookbookです。
ttp://cl-cookbook.sourceforge.net/

The EncyCMUCLopedia (英語): CMUCL関連文書。CMUCLユーザーでなくとも有益なはず。
ttp://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/

Common-Lisp.net (英語): 多くのプロジェクトがホスティングされています。
ttp://common-lisp.net/

よろずや (日本語): Lisp関連の実用的な情報が色々。
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/

どう転んでもLisp (日本語): 竹内郁雄氏による発表のスライドです。
ttp://jp.franz.com/base/seminar/2005-11-18/SeminarNov2005-Takeuchi.files/v3_document.htm

Lispとは何か (日本語): 中村正三郎氏による発表のスライドです。
ttp://www.asahi-net.or.jp/%7Eki4s-nkmr/lisp20061121/lisp.html
0010デフォルトの名無しさん2009/01/14(水) 00:13:38
□その他(2)□

独習Scheme三週間 (日本語): Schemeの教科書。
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html

Bibliography of Scheme-related Research (英語): Scheme関連の論文リンク集。
ttp://library.readscheme.org/

Scheme Hash (英語): S式でXMLを使えるようにするSXML等。
ttp://okmij.org/ftp/Scheme/index.html

Scheme-users.jp (日本語): Schemeユーザのためのハブサイトです。
ttp://scheme-users.jp/

(Scheme) (Lisp) (日本語): 各種Scheme処理系をCygwin上でビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/

SLIB (英語): Scheme用のライブラリとして有名なSLIBのサイトです。
ttp://swiss.csail.mit.edu/~jaffer/SLIB

Scheme Requests for Implementation (英語): いわゆる「SRFI」のサイトです。
ttp://srfi.schemers.org/

Meadow memo: 2ちゃんねるログ: dat落ちした過去スレの一部が見られます。
ttp://www.bookshelf.jp/2ch/index.html
0011デフォルトの名無しさん2009/01/14(水) 00:14:18
□その他(3)□

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

Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/
コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。
0012デフォルトの名無しさん2009/01/14(水) 00:14:42
□Schemeの実装(1)□

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

PLT Scheme: DrScheme、MzSchemeなどのR5RS準拠および独自拡張のScheme処理系。
ttp://www.plt-scheme.org/

Scheme48: R5RS準拠のSchemeバイトコードインタプリタ。
ttp://www.s48.org/

Gambit-C: R5RS準拠のScheme処理系。
ttp://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page

Chicken: R5RS準拠のScheme処理系。スタンドアロン実行ファイルが簡単に作成可能。
ttp://www.call-with-current-continuation.org/

Stalin: 激烈な最適化を施すScheme処理系。人間の書くCコードより速いという噂。
ttp://cobweb.ecn.purdue.edu/~qobi/software.html
ftp://ftp.ecn.purdue.edu/qobi/fdlcc.pdf (Stalinの最適化技術を解説した論文)

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

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

JScheme: Javaで書かれたR4RS準拠Scheme処理系。Javaインターフェイスをサポート。
ttp://jscheme.sourceforge.net/jscheme/main.html
0013デフォルトの名無しさん2009/01/14(水) 00:15:16
□Schemeの実装(2)□

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

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

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

SECDR-Scheme: SECD machine modelに基づく実装。
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu

LispMe: Palm上で動くScheme処理系。これもSECD virtual machine。
ttp://www.lispme.de/lispme/

Minischeme: 1ファイルに凝縮されたScheme処理系。
ttp://tinyscheme.sourceforge.net/minischeme.tar.gz

TinyScheme: Minischemeを色々弄ったもの。
ttp://tinyscheme.sourceforge.net/

Schemix: Linuxのkernelへのパッチで/dev/として扱えるTinyScheme。
ttp://www.abstractnonsense.com/schemix/

Bit: Minischemeよりも小さい(?)バイトコード変換系。
ttp://www.iro.umontreal.ca/~dube/

KI-Scheme, AM-Scheme, etc...
ttp://www.nifty.com/download/dos/prog/lisp/
0014デフォルトの名無しさん2009/01/14(水) 00:15:53
□Common Lispの実装□

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

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

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

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

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

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

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

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

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

Scieneer Common Lisp: 商用Common Lisp処理系。
ttp://www.scieneer.com/scl/index.html
0015デフォルトの名無しさん2009/01/14(水) 00:17:40
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0016デフォルトの名無しさん2009/01/14(水) 00:17:46
□その他の実装□

awklisp: Awkで書かれたわずか500行のLispインタプリタ。
ttp://www.accesscom.com/~darius/

CAMPUS LIsP Lemon version: Cでわずか1000行。
ttp://www-masu.ist.osaka-u.ac.jp/~kakugawa/hacks/clisp/

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

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

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

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

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

Liskell: Lispの顔をしたHaskell。
ttp://liskell.org/
0017デフォルトの名無しさん2009/01/14(水) 00:18:10
□イベント関連□

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

GaucheNight (2008-03-08)
ttp://practical-scheme.net/wiliki/wiliki.cgi?gauche.night
「SchemeとGaucheとλとS式を愛するすべての人に贈るマクロな一夜」
出演:川合史朗、伊藤篤、山下伸夫、笹田耕一、ひげぽん、zick、
   黒田寿男、えんどうやすゆき、ほか

GaucheNight (2007-05-09)
ttp://practical-scheme.net/wiliki/wiliki.cgi?GaucheNight%3a2007
出演:川合史朗、黒田寿男、まつもとゆきひろ(Skype中継)、小飼弾、
   伊東勝利、久井亨、小黒直樹、ほか

黒田寿男氏関係 (黒板の人)
ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/901-909
ttp://www.bookshelf.jp/2ch/tech/1151025773.html#901
Schemeのマクロに関する黒田氏の所感
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
それに対する川合史朗氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83
それに対する黒田氏の再反論
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night
それに対する川合氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83%3a%e6%84%8f%e5%91%b3%e8%ab%96

その他、黒田氏によるLisp関連のエッセイがこちらで読めます。
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/
0018デフォルトの名無しさん2009/01/14(水) 00:20:33
□2ch上にあるLisp関連のスレ□

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

>>3
諦めんなよ!

>>8 >>15
お前らも手伝えよ!
0020デフォルトの名無しさん2009/01/14(水) 00:36:46
これは乙じゃなくてλなんだからね
0021デフォルトの名無しさん2009/01/14(水) 00:55:07
乙です
0022デフォルトの名無しさん2009/01/14(水) 01:00:04
>>1
っT
0023デフォルトの名無しさん2009/01/14(水) 01:37:21
1乙

Little終わったので萩谷先生の関数プログラミング買った。
3月まではこれとものまね鳥読む。
0024デフォルトの名無しさん2009/01/14(水) 04:37:00
てんぷら増えすぎじゃないか?
毎回20レス近く潰れるのは無駄な気がする
どうせ雑談しかしてないし、こんな長いと読まないっしょ
仕様書程度でいいんじゃないか
0025デフォルトの名無しさん2009/01/14(水) 04:47:45
つまり
Common Lisp→EuLisp
R6RS→R5RS
ですね 乙と違うんだからね
0026デフォルトの名無しさん2009/01/14(水) 05:00:33
>>24
「仕方ない。代わりに貼るか→この分量マジすか」
というコンボを喰らった身としては、同意せざるを得ない。

細かい内容は、テンプレ置き場でまとめれば良いと思う。
0027デフォルトの名無しさん2009/01/14(水) 06:12:57
           ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ まピョーん☆
 彡、   |∪|  /
/ __  ヽノ /
(___)   
0028デフォルトの名無しさん2009/01/14(水) 06:49:51
なんだお前?やるんか?
くらえ!つ nil
0029デフォルトの名無しさん2009/01/14(水) 11:03:20
テンプレ置き場ってないし。

WiLikiあたり借りる?
0030デフォルトの名無しさん2009/01/14(水) 11:21:19
>>29
>>2
0031デフォルトの名無しさん2009/01/15(木) 00:50:24
テンプレが役に立ってないことがよくわかる。
0032デフォルトの名無しさん2009/01/15(木) 07:52:33
>>30 の役には立っている。
0033デフォルトの名無しさん2009/01/15(木) 08:45:23
on lisp読み終わったんだが
次はpractical common lisp読んだらいいのかな

schemeの対応する本はないのかな
0034デフォルトの名無しさん2009/01/15(木) 09:04:48
SICP
0035デフォルトの名無しさん2009/01/15(木) 10:10:36
>>34
昔、飛ばし読みしちゃったので
今度は問題やりながら読んできます
0036デフォルトの名無しさん2009/01/15(木) 17:23:59
http://cheese.2ch.net/math/kako/1000/10001/1000107761.html
★100!と1000!の桁数の出し方★

http://codepad.org/lbITOona
0037デフォルトの名無しさん2009/01/15(木) 22:59:45
>>36
このほうがいい。10000!の桁数も楽々

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

http://codepad.org/8evfGr7x
0038デフォルトの名無しさん2009/01/16(金) 19:14:11
関数のアーギュメントの順番ってこうするのがいいって習慣みたいなのはないの?


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

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


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

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

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






0039デフォルトの名無しさん2009/01/16(金) 23:10:26
その辺は場合にもよるから一般化はできないね。
反例は例えば with-input-from-string は入力が先だし。
まぁ、主要なもの、対象とするものが前のほう、くらいだろうね。
0040デフォルトの名無しさん2009/01/16(金) 23:53:23
http://jibun.atmarkit.co.jp/ljibun01/rensai/genius/03/01.html
誰も言及しないのは何故。
0041デフォルトの名無しさん2009/01/17(土) 01:26:16
既にCyanスレで見たから。
0042デフォルトの名無しさん2009/01/17(土) 01:40:01
そんなのもあるんだ
0043デフォルトの名無しさん2009/01/17(土) 01:40:49
クラスのないオブジェクト指向とかS式のないマクロとかは面白いね
大前提をぶっ壊すところが
0044デフォルトの名無しさん2009/01/17(土) 03:00:46
>>43
S式の無いマクロならDylanがあるし、
プロトタイプベースのOOPならSelfとかがあるじゃん。

むしろ、そういう引用元の概念を、あの歳できっちり理解してるのが末恐ろしいよ。
0045デフォルトの名無しさん2009/01/17(土) 04:16:34
5つの自然言語ならよかったのになあ
0046デフォルトの名無しさん2009/01/17(土) 15:28:41
高速で使えるライブラリのそろったCyan実装が登場したら
Ruby以上に世界中のハッカーにインパクトを与えそう。
0047デフォルトの名無しさん2009/01/17(土) 16:11:52
>>40
ニュータイプって感じだね。
0048デフォルトの名無しさん2009/01/17(土) 20:20:32
私は信じんよ、ニュータイプの存在など
0049デフォルトの名無しさん2009/01/17(土) 21:30:31
既存のpythonのlibraryが使えてマクロありなら便利かもね
0050デフォルトの名無しさん2009/01/17(土) 23:55:38
現状だと荒削りだし、そりゃ言い杉なんじゃないかな。将来は楽しみだけど。
素直に理論面とかハードウェアの知識を学んでいったら楽しみだね。
まだだ、まだ終わらんよ!とか言わされちゃうのかなー
0051デフォルトの名無しさん2009/01/18(日) 00:14:09
本人乙www
0052デフォルトの名無しさん2009/01/18(日) 01:22:19
クワトロ・バジーナ降臨ときいてすっ飛んできました。
アクシズ落とさないでね。
0053デフォルトの名無しさん2009/01/18(日) 09:45:33
wikipediaのclikiのリンクが古いままだ
0054デフォルトの名無しさん2009/01/18(日) 12:38:12
>>53
なんのための「Wiki」pediaだよ
0055デフォルトの名無しさん2009/01/18(日) 12:59:52
>>53,54
直しておきますた ノシ
0056デフォルトの名無しさん2009/01/18(日) 18:08:54
>>37
goshだとexactな数値のlogがとれなかった
0057デフォルトの名無しさん2009/01/18(日) 22:18:02
>>56
他の処理系みた?
Gaucheで数値計算するから・・・
0058デフォルトの名無しさん2009/01/18(日) 23:06:53
>>56
普通にとれるだろ
gosh> (log 1000)
6.907755278982137
gosh> (log 10000)
9.210340371976184
gosh> (log 100000)
11.512925464970229
gosh> (* 0.4342944819032518 (log 1000))
3.0
gosh> (* 0.4342944819032518 (log 10000))
4.0
gosh> (* 0.4342944819032518 (log 100000))
5.0
0059デフォルトの名無しさん2009/01/18(日) 23:13:57
gosh> (* 0.4342944819032518 (log 3628800))
6.559763032876794
gosh> (* 0.4342944819032518 (log 93326215443944152681699238856266700490715968264
38162146859296389521759999322991560894146397615651828625369792082722375825118521
0916864000000000000000000000000))
157.97000365471578
0060デフォルトの名無しさん2009/01/18(日) 23:17:51
gosh> (log 402387260077093773543702433923003985719374864210714632543799910429938
51239862902059204420848696940480047998861019719605863166687299480855890132382966
99445909974245040870737599188236277271887325197795059509952761208749754624970436
01418278094646496291056393887437886487337119181045825783647849977012476632889835
95573543251318532395846307555740911426241747434934755342864657661166779739666882
02912073791438537195882498081268678383745597317461360853795345242215865932019280
90878297308431392844403281231558611036976801357304216168747609675871348312025478
58932076716913244842623613141250878020800026168315102734182797770478463586817016
43650241536913982812648102130927612448963599287051149649754199093422215668325720
80821333186116811553615836546984046708975602900950537616475847728421889679646244
94516076535340819890138544248798495995331910172335555660213945039973628075013783
76153071277619268490343526252000158885351473316117021039681759215109077880193931
78114194545257223865541461062892187960223838971476088506276862967146674697562911
23408243920816015378088989396451826324367161676217916890977991190375403127462228
99880051954444142820121873617459926429565817466283029555702990243241531816172104
65832036786906117260158783520751516284225540265170483304226143974286933061690897
0061デフォルトの名無しさん2009/01/18(日) 23:18:15
96848259012545832716822645806652676995865268227280707578139185817888965220816434
83448259932660433676601769996128318607883861502794659551311565520360939881806121
38558600301435694527224206344631797460594682573103790084024432438465657245014402
82188525247093519062092902313649327349756551395872055965422874977401141334696271
54228458623773875382304838656889764619273838149001407673104466402598994902222217
65904339901886018566526485061799702356193897017860040811889729918311021171229845
90164192106888438712185564612496079872290851929681937238864261483965738229112312
50241866493531439701374285319266498753372189406942814341185201580141233448280150
51399694290153483077644569099073152433278288269864602789864321139083506217095002
59738986355427719674282224875758676575234422020757363056949882508796892816275384
88633969099598262809561214509948717012445164612603790293091208890869420285106401
82154399457156805941872748998094254742173582401063677404595741785160829230135358
08184009699637252423056085590370062427124341690900415369010593398383577793941097
00277534720000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000)
+inf.0
0062デフォルトの名無しさん2009/01/18(日) 23:21:43
(log (fact 1000))が計算できないのはGaucheの事情。
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E6%95%B0%E5%80%A4%E3%81%AE%E5%85%A5%E5%87%BA%E5%8A%9B
0063デフォルトの名無しさん2009/01/18(日) 23:25:55
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E9%96%A2%E6%95%B0%E3%81%AE%E5%86%8D%E5%AE%9A%E7%BE%A9
0064デフォルトの名無しさん2009/01/18(日) 23:34:44
一般的なlog10の計算の注意点
http://codepad.org/MjooyHH4
0065デフォルトの名無しさん2009/01/19(月) 11:15:03
on lispの原著が34000円もするなんて・・・
最後のいくつかの章で図がみえないから欲しかったのに
0066デフォルトの名無しさん2009/01/19(月) 17:18:17
何千ページの本なの?
0067デフォルトの名無しさん2009/01/19(月) 20:55:42
http://www.paulgraham.com/onlisp.html
>> 65 ここから落とせない? 著者公開してるけど.
0068デフォルトの名無しさん2009/01/19(月) 21:32:16
>>67
そこのは、例えばFigure 24.1
が見えないよ。他にも見えない図がいくつかあった
0069デフォルトの名無しさん2009/01/19(月) 21:38:09
on lisp $13 しかし日本への送料が4000円
http://www.lulu.com/content/3060872

こっちから買うかな
何冊かまとめ買いすれば送料安くなんないかな
0070デフォルトの名無しさん2009/01/19(月) 22:35:33
日本語訳の本に載ってないって事?
0071デフォルトの名無しさん2009/01/20(火) 00:18:36
ttp://www.amazon.co.jp/dp/0130305529/
ttp://www.amazon.com/dp/0130305529/
高いな
0072デフォルトの名無しさん2009/01/20(火) 22:57:56
Head First Common Lispはまだか。
0073デフォルトの名無しさん2009/01/22(木) 03:10:07
たぶん一生でないよw
0074デフォルトの名無しさん2009/01/22(木) 13:05:51
主婦の友増刊号「誰にもわかるコモンリスプ」
0075デフォルトの名無しさん2009/01/22(木) 14:23:07
片仮名で書くとめちゃくちゃイメージ違うなぁ。
0076デフォルトの名無しさん2009/01/22(木) 16:32:13
フランス語みたい。

イロムサコン・フィヨンセ・コモンリスプ
0077デフォルトの名無しさん2009/01/23(金) 01:35:12
特別寄稿ガイ・スチール・ジュニア氏
「君もリスプやらないか?」
0078デフォルトの名無しさん2009/01/23(金) 02:00:30
「いいこと思いついた。
お前、俺のテイルジャンプで、メッセージパッシングしろ」
0079デフォルトの名無しさん2009/01/23(金) 17:50:52
「アッーーク!」
0080デフォルトの名無しさん2009/01/23(金) 21:18:38
アンジー・コモン・リスプ
0081デフォルトの名無しさん2009/01/23(金) 23:24:26
微妙にワロタ
0082デフォルトの名無しさん2009/01/25(日) 02:43:49
GaucheにIDE付けれの人まだ張り付いてるのか
0083デフォルトの名無しさん2009/01/25(日) 03:26:34
Lisp 系言語だと emacs か vi しか選択肢が無いのは事実だけど、
あらたに統合環境を用意する積極的な理由ってのも無いんだよなー。

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

これだけ長い Lisp の歴史の中でいわゆる「デバッガ」が言及された
ことがそんなにないってのはただの偶然だとでも思ってんだろうか。
0084デフォルトの名無しさん2009/01/25(日) 06:25:23
pltはそのへんがんばってるんじゃないの
0085デフォルトの名無しさん2009/01/25(日) 06:30:20
なんでlispは歴史的にデバッガが言及されないの?
0086デフォルトの名無しさん2009/01/25(日) 08:36:47
>>85
文脈嫁。

>>83 は、GCを考案し、動的言語の先駆けとなったLisp に、デバッガの話が持ち上がらなかったのは、Lispにデバッガが不要だから、と云いたいんだろ。
0087デフォルトの名無しさん2009/01/25(日) 08:47:36
>>83は、これだけ長い Lisp (スレ)の歴史の中で、と言いたかったんだよ。
0088デフォルトの名無しさん2009/01/25(日) 09:10:02
>>83
Schemeの話をLisp系と一般化しないでくれ。Emacs Lispのデバッガはなかなかいい、
CL系は昔から規格に最適化オプションで debug 指定ができたりと、デバッガは
売りにしてたよ。SchemeでもPLTやGuileはがんばってるじゃん。
0089デフォルトの名無しさん2009/01/25(日) 09:43:29
DebuggerのないLisp machineなど存在しない。
もともとsmalltalk実装のモデルになったような
統合プログラミング環境を持っていたのがLisp。
今はむしろLLみたいな軽い環境が流行りで、
外界とのインターフェースは昔より豊か。
0090デフォルトの名無しさん2009/01/25(日) 16:54:11
eclipseあたりに自力で作ってみたらいいのに
0091デフォルトの名無しさん2009/01/25(日) 17:19:03
調べるのめんどくさいんでここで聞きますがscheme ってバイトコードはけるの
0092デフォルトの名無しさん2009/01/25(日) 17:42:27
>>91
Kawa, JSchemeでググレカス
0093デフォルトの名無しさん2009/01/25(日) 18:42:50
>>89
Smalltalkより前にIDEを持っていたLispってどんなLispだよw
0094デフォルトの名無しさん2009/01/25(日) 18:46:35
つ ttp://ja.wikipedia.org/wiki/Interlisp
0095デフォルトの名無しさん2009/01/25(日) 19:05:55
まったく関係ないがh抜き不便
0096デフォルトの名無しさん2009/01/25(日) 19:15:49
アセンブラ使え
0097デフォルトの名無しさん2009/01/25(日) 19:23:10
>>93
TECO+MacLisp
後継のEmacsがSmalltalk-76と同時期。
0098デフォルトの名無しさん2009/01/25(日) 21:57:10
超古代文明の発掘みたいな。
断絶があるのはなぜだろう。
0099デフォルトの名無しさん2009/01/25(日) 21:58:24
車輪の再発明と言ってだな、
0100デフォルトの名無しさん2009/01/26(月) 00:28:22
>>82
別にどんな主張をしようが構わないが、
「デバッガ」っていう重要なカテゴリ以下を私物化してるのがちょっと……。
あれのどこがGaucheのデバッガの話なのよ?

何で、自分のページとか作って、そこでやらないんだろうね?
0101デフォルトの名無しさん2009/01/26(月) 11:20:53
まあWiLilki的にひどすぎるということになれば管理者のShiroさんが強権発動するでしょ
0102デフォルトの名無しさん2009/01/27(火) 13:43:07
俺はffiの項目を私物化したいぞおお
ジョジョオ〜
0103デフォルトの名無しさん2009/01/27(火) 21:30:00
継続渡しマクロなんて作るぐらいなら
common lispの上にscheme作っちゃえばいいのに
0104デフォルトの名無しさん2009/01/27(火) 23:30:15
みんながACL使えばみんなが幸せ
0105デフォルトの名無しさん2009/01/27(火) 23:39:46
もっとお手頃価格でACL売ってくれ。
俺も使うから。
0106デフォルトの名無しさん2009/01/28(水) 02:43:48
一方、ロシアのSchemerは黒板を使った。
0107デフォルトの名無しさん2009/01/28(水) 03:34:23
>一方、ロシアのSchemerは黒板を使った。
作らないところが寂しいよな

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


株主になっても一票そこに投じられそうもないのが悲しいやね
0108デフォルトの名無しさん2009/01/28(水) 13:46:02
ロシアのLisp事情ってどんな感じなんだろう。
あそこは数学も物理も凄いんでしょ?
0109デフォルトの名無しさん2009/01/28(水) 14:21:33
行って確かめてこいよ
0110デフォルトの名無しさん2009/01/28(水) 16:10:27
ロシアは遠いし言葉がわからないから
かわりにロシアンパブ行ってきます。
0111デフォルトの名無しさん2009/01/28(水) 21:13:51
ttp://sourceforge.jp/magazine/09/01/27/0039208

あとまあ、これもある意味予想通りではあるが、LispやScheme、Haskellと言ったあたりは、
結局のところ「語られる」言語であって、「使われる」言語ではないようだ。
HaskellにしろCommon Lispにしろ、近年ではライブラリも相当揃ってきており、
パフォーマンスの面から言っても実用言語として遜色ないものになりつつあるので、個人的には残念なのだが。
0112デフォルトの名無しさん2009/01/28(水) 21:22:15
Emacs Lispも仲間に入れてほしいんですけど。
0113デフォルトの名無しさん2009/01/28(水) 21:52:50
だが断る
0114デフォルトの名無しさん2009/01/28(水) 22:17:45
各個人の問題として何故使わないのか。
0115デフォルトの名無しさん2009/01/28(水) 22:35:50
先週新聞に載ってたセンター試験の数学�UAをやってみたんだけど
21世紀になって10年たとうというのにひどいBASICのプログラムが載ってたんだわ
高校生に勉強させるなら
COMETでもMIPSでもいいからアセンブラでやらせるか
BFで難易度高めにするか
LispやHaskelやForthで教養を身につけさせるかすればいいのに
あるいはスパコンのためにFortranを教えるか
0116デフォルトの名無しさん2009/01/28(水) 22:50:30
>>114
次々と新たな処理系が開発されるのは、既にある処理系を使いたくないのかもな。
勉強のためだとしても、なんで人のソースを読むことより自分で書くことを選ぶのか。
それが問題だと思うよ。
0117デフォルトの名無しさん2009/01/28(水) 22:52:42
IT音痴大国の名に恥じないな。
0118デフォルトの名無しさん2009/01/28(水) 22:58:36
Lispはラテン語ではない。と誰かが言ったとか言わないとか。
0119デフォルトの名無しさん2009/01/29(木) 20:26:19
むしろラテン語だろ
0120デフォルトの名無しさん2009/01/29(木) 22:59:04
まあもう少し待ってれば予想外の変化が起きるかもよ
0121デフォルトの名無しさん2009/01/29(木) 23:03:38
Lisp/Scheme類は法律で禁止され、地下で開発するしかないのだ。
0122デフォルトの名無しさん2009/01/30(金) 00:02:26
>>115
あれはなんの冗談なんだろうと思ったな。
釣りじゃないのか、とか日付を確認したりとか。
徐々にその事実が恐ろしくなっていった。

>LispやHaskelやForthで教養を身につけさせるかすればいいのに
お前は俺かw
0123デフォルトの名無しさん2009/01/30(金) 00:06:09
BFで難易度をってところにワロタ
0124デフォルトの名無しさん2009/01/30(金) 06:22:02
http://d.hatena.ne.jp/niitsuma/20080209/1233260146
0125デフォルトの名無しさん2009/01/31(土) 00:58:37
Lisperだけで会社作ったら、経営していけるかな。
0126デフォルトの名無しさん2009/01/31(土) 01:03:15
http://codepad.org/7ozb95V2
0127デフォルトの名無しさん2009/01/31(土) 05:02:34
漢詩って何かいいね。
0128デフォルトの名無しさん2009/01/31(土) 05:15:40
情景が目に浮かぶようだね。霜ってのがまた良いな。

……ところで、ここ何のスレだっけ?
0129デフォルトの名無しさん2009/01/31(土) 15:23:31
comp.lang.lispに何度か書き込みしてるはずなのに反映されない
なんでだろ
0130デフォルトの名無しさん2009/01/31(土) 16:48:38
ネットニュースだから配送の問題とか?
0131デフォルトの名無しさん2009/02/01(日) 13:40:24
http://quasiquote.org/log2/Scheme/Gauche/Gauche-lazy-ffi
をconfigure make make installしてから

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

Stack Trace:
_______________________________________
gosh>


何が問題なのでしょうか
0132デフォルトの名無しさん2009/02/01(日) 13:44:27
だからここはサポート掲示板じゃねえっつーの
またどうせバージョン違うんだろ
0133デフォルトの名無しさん2009/02/01(日) 14:06:25
>>131
glibcにOpenBSD由来のstrlcpy(3)はありません。
http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/
から持ってきてリンクしてください。
デストリによってはパッケージで提供されているかも知れませんが。
0134デフォルトの名無しさん2009/02/01(日) 14:12:09
やっぱlinuxってきもいなー
0135デフォルトの名無しさん2009/02/03(火) 04:35:42
gimp2.6.3(ほぼR5RS互換) のscript-fu で

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

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

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

上に書いたlispと同じ動作にするにはどう書けば良いでしょうか?
0136デフォルトの名無しさん2009/02/03(火) 06:59:00
>>135
「'」(クォート)をつかわず、 (list foo bar) としたら良いのでは。
あるいは `(,foo ,bar) (先頭はバッククォートね)かな。
0137デフォルトの名無しさん2009/02/03(火) 09:54:45
letやmapcarが出てくるのにquoteが判らないとは
えらい偏った学び方したんだな
quoteはLISPの基礎
0138デフォルトの名無しさん2009/02/03(火) 13:39:03
>>137
偏ってない。変数とシンボルを混同するのはLISPの名物。
変数とimmutableな文字列なら、混同することはあまりないのだが。

最近思うんだが、LISPは動的スコープに戻したほうがいいんじゃないか?
変数は常に(eval シンボル)と等価で、関数は常にS式と等価。
静的スコープではこれが成立しない。
0139デフォルトの名無しさん2009/02/03(火) 14:13:37
'(1 2)と(list 1 2)の結果が同じだし、勘違いしちゃうことってあるよね
0140デフォルトの名無しさん2009/02/03(火) 16:24:19

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


(defmacro mvbind (&rest args)
(let ((name 'multiple-value-bind))
`(,name ,@args)))
0141デフォルトの名無しさん2009/02/03(火) 17:07:30
これでうまくいった
(let ((foo 2)
(bar 3))
(mapcar (lambda (arg)
(display (eval arg))) '(foo bar)))
0142デフォルトの名無しさん2009/02/03(火) 17:31:30
>>138
かなり偏ってるね
混同するのが名物とか、変な偏見も持ってそうだが
多分>>140-141もお前じゃないか?
きちんとした処理系で基礎から勉強し直した方がいいと思うね
0143デフォルトの名無しさん2009/02/03(火) 18:38:40
>>136
そうだね。前スレ372-390でも話題になってたよね。
(list foo bar)
== (list `,foo `,bar)
== `(,foo ,bar)
quasiquoteの分配則では気をつけないとね。
0144デフォルトの名無しさん2009/02/03(火) 18:43:43
データとコードの違いは最初に叩き込まれると思っていたがそうでもないのか?
0145デフォルトの名無しさん2009/02/03(火) 18:48:15
>>139
>結果が同じだし

微妙な違いは理解してるのか?
同じ臭いがするんだよ>>138-141はよ。
0146デフォルトの名無しさん2009/02/03(火) 19:05:17
マクロの勉強でもしてみれ
0147デフォルトの名無しさん2009/02/03(火) 19:11:52
eval使って解決した気になれるとか、初心者の特権だねえ。
0148デフォルトの名無しさん2009/02/03(火) 19:15:57
>>135
それよりmapcarの使い所を間違えてないかね?
処理系変えるとうまく動かないかもよ。
quoteはちゃんと理解した方がいいよ。

>>140
どんだけ頓珍漢なことやってるのかって
最初は気付かないもんだよ。
01491352009/02/03(火) 20:15:17
ありがとうございます。
もう一度 quote の部分を見直しましたが
まだいまいちわかっていないので
もう一度じっくり読んでみます。

>>148
mapcar の使い方を確認しようと
Revised5 Report on the Algorithmic Language Scheme
を見てみたところ mapcar は乗っていなかったので
map を使うことにしました。
0150デフォルトの名無しさん2009/02/03(火) 21:12:28
>>135は展開すると
'(foo bar)
== (list 'foo 'bar)
となる。
これと>>143を比べると違うことは明白。
(list 'foo 'bar)ではlistの要素はシンボルになっている。>>135
(list foo bar)ではlistの要素は変数になっている。>>136,>>143
0151デフォルトの名無しさん2009/02/03(火) 21:34:33
初心者ならそこまで気を回さなくてもいいかもしれないけど
(equal? '(foo bar) (list 'foo 'bar)) => #t
だけど
(eq? '(foo bar) (list 'foo 'bar)) => #f ; ほとんどの場合
quoteはquoteでlistとは別物(返り値も含めて、書き換え可能かどうか等も)
返ってくる値がequalなだけ
0152デフォルトの名無しさん2009/02/03(火) 23:03:12
それからR5RSのmapは返り値の順序は規定されているけど
評価順序は未規定
だから
(map display '(A B C)) => '(#<undef> #<undef #<undef>)
標準出力にはABC、ACB、BAC、BCA、CAB、CBAのいずれか
評価順序をリストの順通りにしたいのならfor-eachを使う
(for-each display '(A B C)) => #<undef>
標準出力には必ずABC
評価順序と戻り値のデータ構造内の順序の区別は
HaskelのIOモナドにもつながる
(たぶん)
R5RSでは関数の引数の評価順さえ未規定
0153デフォルトの名無しさん2009/02/03(火) 23:52:11
>>152
>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定

うわ…これ今ごろ知ったよ、ありがとう。つかこの仕様で誰が得するんだろ。
慌てて調べたけど、Gauche は独自仕様で常にリスト内の順番どおり、なのね。
ちょっと安心。
0154デフォルトの名無しさん2009/02/04(水) 00:06:16
並列処理が楽になるとは聞いたな。
0155デフォルトの名無しさん2009/02/04(水) 12:25:14
少しActorも意識してるんだろうね。
各要素に並行にfがメッセージパッシングされて。

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

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

こうすればいいんじゃないの?
(lambda (f g) `(lambda (x) (,f (,g x))))
0157デフォルトの名無しさん2009/02/04(水) 22:50:12
quoteが嫌いな人はクロージャやsyntax-rulesを使う
quoteが大嫌いな人はPythonやRubyを使う
そんな気がする
0158デフォルトの名無しさん2009/02/05(木) 00:05:31
quasi-quoteの便利さは異常。
そんな嫌いになるなんて、これが本当のくぉーつ嫌いってやつか・・・
0159デフォルトの名無しさん2009/02/05(木) 00:51:16
昔のマクロにはバッククォートなんてなかったよな
ひたすらlistでS式をこさえてたっけw
0160デフォルトの名無しさん2009/02/05(木) 03:32:58
どんだけ昔の人だよ
0161デフォルトの名無しさん2009/02/05(木) 03:40:10
Lisp-85とかって言っても分からんだろうなw
0162デフォルトの名無しさん2009/02/05(木) 03:53:31
そんな最近かよ
とっくにバッククオートあるよw
0163デフォルトの名無しさん2009/02/05(木) 04:06:48
Lisp-85ってS-OSというZ-80のOS上で動く奴なんだが
fexpr形式やmacro形式はあってもバッククォートは無かったぞ
0164デフォルトの名無しさん2009/02/05(木) 08:52:25
Alan Bawden, "Quasiquotation in Lisp"によれば、

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

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

ということらしい。

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

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

0165デフォルトの名無しさん2009/02/05(木) 10:11:52
'の逆はevalだと思ってた
0166デフォルトの名無しさん2009/02/05(木) 10:29:33
>>163
Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし
0167デフォルトの名無しさん2009/02/05(木) 10:39:22
全然問題ない。
0168デフォルトの名無しさん2009/02/05(木) 10:57:09
あっそ
ならLisp-85作った人が入れ忘れたんだね
0169デフォルトの名無しさん2009/02/05(木) 11:05:52
quasi-quoteを効率を保ってきちんと実装するのは意外と難しい。
80年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。
0170デフォルトの名無しさん2009/02/05(木) 11:51:35
Gauche WiLiLiのあんまり目立たないとこに自分の作ったパッケージ書き足す方法はないものだろうか
0171デフォルトの名無しさん2009/02/05(木) 16:28:07
>>156
その関数の引数f,gにシンボルxを引数として渡すと死ねる。
0172デフォルトの名無しさん2009/02/05(木) 18:05:14
やっぱり gensym が必要なんだね。
0173デフォルトの名無しさん2009/02/05(木) 18:47:23
関数名じゃなく、関数「値」を式に埋め込めばいい。
gosh> (define x (list + 1 2))
x
gosh> (define y (list '+ 1 2))
y
gosh> (define + -)
+
gosh> (+ 1 2)
-1
gosh> (eval x (current-module))
3
gosh> (eval y (current-module))
-1
0174デフォルトの名無しさん2009/02/05(木) 20:23:37
再帰関数だったら?
0175デフォルトの名無しさん2009/02/05(木) 21:49:55
そこまで行くとR5RSでも解決できてるかどうか怪しい
R6RSは再定義禁止だっけ
0176デフォルトの名無しさん2009/02/05(木) 21:59:07
R5RSの件は
(define f (letrec ((f ...)) f))
と書けば安全かも
0177デフォルトの名無しさん2009/02/06(金) 08:10:38
仕様に自由があるから面白い。
0178デフォルトの名無しさん2009/02/06(金) 16:01:07
>>173
で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?
0179デフォルトの名無しさん2009/02/06(金) 17:53:52
>>178
SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね
0180デフォルトの名無しさん2009/02/06(金) 18:39:03
俺はOnLispをお勧めする。
0181デフォルトの名無しさん2009/02/06(金) 19:54:30
ふつうにあのお魚の本でよくないか?
0182デフォルトの名無しさん2009/02/06(金) 20:48:41
処理系のソースで十分
0183デフォルトの名無しさん2009/02/06(金) 21:37:03
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/
ほれ
0184デフォルトの名無しさん2009/02/06(金) 23:02:05
うわーっ!びっくりした
と避ける
0185デフォルトの名無しさん2009/02/07(土) 08:31:34
>>169
ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは

`(foo ,bar)

とはかけなくて、

(` (foo (, bar)))

と書いていたような。
0186デフォルトの名無しさん2009/02/07(土) 13:41:36
関係ないけどチャイティンのLispでは'はシンボルで
(QUOTE X) == (' X)
って書いてたな
0187デフォルトの名無しさん2009/02/07(土) 14:53:09
(define (% num1 num2) (remainder num1 num2))
としてるんですが、関数に別名与えるもっと良い方法はありますか?
0188デフォルトの名無しさん2009/02/07(土) 15:21:52
引数の数が一致しているのなら
(define % remainder)
0189デフォルトの名無しさん2009/02/07(土) 17:06:46
それでいいんですね。
気づきませんでした。

ありがとうございます。
0190デフォルトの名無しさん2009/02/07(土) 19:07:14
指定のクロージャが束縛されているシンボルを探す方法ってありますか?
0191デフォルトの名無しさん2009/02/07(土) 20:08:34
処理系によってはあるかもしれないけどRnRSにはないんじゃないかなぁ。
CLにはあるかもしれませんけどSchemerだから知らないです。
シンボルのリストを引数に与えるのであれば
グローバル束縛されているクロージャをevalで取り出してeq?して調べられるけど
グローバル変数のリストはどうやって得ればいいかわかりません。
それにローカル束縛も含めるとなると不可能じゃないでしょうか。
0192デフォルトの名無しさん2009/02/07(土) 20:28:40
CL なら do-symbols で探せるんじゃないかと。
0193デフォルトの名無しさん2009/02/07(土) 22:01:31
Haskellとlispの得意不得意ってどんなところなのでしょうか?
0194デフォルトの名無しさん2009/02/07(土) 22:44:15
別に無いよ?
0195デフォルトの名無しさん2009/02/07(土) 22:53:19
>>193
特にないんじゃないの?
文字列を扱うとめちゃくちゃメモリ食うってのがHaskellの弱点かもしれんけど
今時のマシンだったら何の問題も無いし。

0196デフォルトの名無しさん2009/02/07(土) 22:56:48
Haskellとlispを戦わせたくてしょうがないらしい
0197デフォルトの名無しさん2009/02/07(土) 23:04:03
ムシキングか何かでやってください
0198デフォルトの名無しさん2009/02/07(土) 23:39:04
[Lisp] 攻撃:85 素早さ:94 防御:96 命中:68 運:32 HP:154
[Haskell] 攻撃:68 素早さ:55 防御:65 命中:52 運:31 HP:233

Lisp vs Haskell 戦闘開始!!
[Lisp]の攻撃 HIT [Haskell]は91のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は11のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は109のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は0のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は76のダメージを受けた。
[Lisp]が[Haskell]を倒しました(ラウンド数:3)。
魔法のMD5 - MD5バトル http://www.newspace21.com/mix/btl.php
0199デフォルトの名無しさん2009/02/07(土) 23:41:50
いちいち貼らなくていいよ
0200デフォルトの名無しさん2009/02/07(土) 23:49:28
>>193
Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?
0201デフォルトの名無しさん2009/02/08(日) 00:02:40
外に出なくても済む方がいいです
0202デフォルトの名無しさん2009/02/08(日) 07:17:52
λ
0203デフォルトの名無しさん2009/02/08(日) 08:13:10
maximaの中に面白いのみっけた

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

(setq x 1)
(for-eval-then-quote x)
-> '1
0204デフォルトの名無しさん2009/02/08(日) 12:37:31
>>203
えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)
0205デフォルトの名無しさん2009/02/08(日) 13:23:49
>>204
間違えました
(eval (for-eval-then-quote x))
->'1
0206デフォルトの名無しさん2009/02/09(月) 01:08:08
loopマクロ勉強したのにiterateの方が使われてたり
言語の発展はゆるやかだ
とか言ってたのどこのどいつだ
0207デフォルトの名無しさん2009/02/09(月) 01:52:43
>>206
それ言語じゃなくてライブラリの発展だと思うんだが……。
0208デフォルトの名無しさん2009/02/09(月) 02:14:28
>>206
これ読め。
http://pc11.2ch.net/test/read.cgi/tech/1203096230/251
0209デフォルトの名無しさん2009/02/10(火) 12:06:52
[clojure] 攻撃:28 素早さ:67 防御:78 命中:87 運:55 HP:202
[Qi II] 攻撃:51 素早さ:21 防御:48 命中:69 運:23 HP:189

clojure vs Qi II 戦闘開始!!
[clojure]の攻撃 HIT [Qi II]は1のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は16のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は10のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は38のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は25のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は57のダメージを受けた。
[clojure]が[Qi II]を倒しました(ラウンド数:6)。
魔法のMD5 - MD5バトル http://www.newspace21.com/mix/btl.php
0210デフォルトの名無しさん2009/02/10(火) 13:48:31
kill
0211デフォルトの名無しさん2009/02/10(火) 15:30:33
連邦のモビルスーツは化け物か!?
0212デフォルトの名無しさん2009/02/11(水) 05:14:36
array->list 変換関数がみつからない
自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))
0213デフォルトの名無しさん2009/02/11(水) 23:55:21
>>自分で書くものなの?
R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?
0214デフォルトの名無しさん2009/02/12(木) 00:02:23
#2A(..)ってのはCommon Lispの二次元配列かな。
ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。
0215デフォルトの名無しさん2009/02/12(木) 03:21:33
lispに興味があるんですが、
いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー
0216デフォルトの名無しさん2009/02/12(木) 05:29:30
オンラインで読める無料の
・独習Scheme三週間 ttp://www.sampou.org/scheme/t-y-scheme/
・入門Scheme ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
や
書籍じゃないけど
・もうひとつのScheme ttp://www.shido.info/lisp/idx_scm.html
あたりを読んでから買えばいいんじゃないでしょうか。
0217デフォルトの名無しさん2009/02/12(木) 05:46:35
>>215
SICP読んでみて、自分に合いそうなら買うのがいいとおも。
http://mitpress.mit.edu/sicp/
0218デフォルトの名無しさん2009/02/12(木) 10:05:25
SICP日本語版はちょっと高い
0219デフォルトの名無しさん2009/02/12(木) 10:48:56
なんでいきなりSICPなんじゃーー
0220デフォルトの名無しさん2009/02/12(木) 11:11:47
「良い本だ」ってよくScheme関連のWEBに載ってるから。
0221デフォルトの名無しさん2009/02/12(木) 11:20:35
良い本には違いないけど、
SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。
0222デフォルトの名無しさん2009/02/12(木) 12:06:25
maximaが使いたいだけだったので
on lispはじっくり読んだが
SICPは問題もやらずに流し読み
0223デフォルトの名無しさん2009/02/12(木) 20:13:48
SICP は Scheme の本というわけではない。
Scheme を使って解説してる本。
0224デフォルトの名無しさん2009/02/12(木) 20:19:01
>>223
え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。

序盤の関数 f(x) の話とか、大学の数学が懐かしいです。
0225デフォルトの名無しさん2009/02/12(木) 20:22:09
SICPにアルゴリズムの話が出てないわけではないが、
SICPをやってもアルゴリズムを勉強したとは言えない。
0226デフォルトの名無しさん2009/02/12(木) 20:22:39
>>223
何を解説してるの? w
0227デフォルトの名無しさん2009/02/12(木) 20:28:22
>>226

っ人生
0228デフォルトの名無しさん2009/02/12(木) 20:36:31
>>226
本のタイトル
0229デフォルトの名無しさん2009/02/12(木) 20:44:04
>>226
降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識
0230デフォルトの名無しさん2009/02/13(金) 01:35:07
SICP読んだら魔法使いになれますか?
0231デフォルトの名無しさん2009/02/13(金) 07:26:27
>>230
なれません。
0232デフォルトの名無しさん2009/02/13(金) 07:45:20
>>230
なれます。
就活に有利です。
0233デフォルトの名無しさん2009/02/13(金) 11:01:41
>>230
さあ、30歳になるまで貞操を守る作業に戻るんだ
0234デフォルトの名無しさん2009/02/13(金) 14:39:58
30歳を越えてるのですがSICPは読めますか?
0235デフォルトの名無しさん2009/02/13(金) 14:51:53
読めなかったら困ると思いますよ
0236デフォルトの名無しさん2009/02/13(金) 15:01:35
60歳とかでも読めるらしいですよ
読めなかったら数学勉強してから再挑戦しましょう
0237デフォルトの名無しさん2009/02/13(金) 19:19:40
30歳過ぎてもSICP読むと童貞になりますか?
0238デフォルトの名無しさん2009/02/13(金) 19:34:56
俺はSICPを読んで、背が10cm伸びたよ
0239デフォルトの名無しさん2009/02/13(金) 19:49:08
SICP読んで宝くじ当たったよ。
0240デフォルトの名無しさん2009/02/13(金) 19:50:51
もしかして訳者の和田さんってスーフリの和田さん?
0241デフォルトの名無しさん2009/02/13(金) 19:52:39
プログラマ50人に1人ぐらいはSICP読んでるよね。
0242デフォルトの名無しさん2009/02/13(金) 19:54:25
>>250
和田って俺のことだけど。
0243デフォルトの名無しさん2009/02/13(金) 20:28:13
SICP未読で許されるのは小学生までだよね!
0244デフォルトの名無しさん2009/02/13(金) 22:31:02
ちょっと待ってくれ。「人生に必要な知恵はぜんぶ幼稚園の砂場で学んだ」とあるように、幼稚園のうちに読んでおくべきものではないだろうか?
0245デフォルトの名無しさん2009/02/13(金) 22:34:17
なんてこったい/(^o^)\
0246デフォルトの名無しさん2009/02/13(金) 22:52:02
人生に必要な知恵はぜんぶサンドボックで学んだ。
0247デフォルトの名無しさん2009/02/13(金) 22:55:25
俺、人生に必要な知恵はぜんぶ死後の世界で学ぶんだ…
0248デフォルトの名無しさん2009/02/13(金) 23:02:42
次はアメンボに生まれてきたりして
0249デフォルトの名無しさん2009/02/13(金) 23:07:08
おれも人生に必要なことは幼稚園で一通り学んだ覚えがあるな
0250デフォルトの名無しさん2009/02/13(金) 23:14:11
>>249
ってことは、幼稚園で、チュー済ませたタイプか。
0251デフォルトの名無しさん2009/02/13(金) 23:45:23
登り棒オナニーなら幼稚園の時に覚えました
0252デフォルトの名無しさん2009/02/14(土) 00:48:59
SICP以外誇れるものはないのか
0253デフォルトの名無しさん2009/02/14(土) 00:54:55
essential of なんたらとかreasoned schemerとかもいいかも
0254デフォルトの名無しさん2009/02/14(土) 01:00:19
時代は宝石の名前の言語じゃね?
0255デフォルトの名無しさん2009/02/14(土) 01:05:57
党員の友人とMercuryを学んでいます。
0256デフォルトの名無しさん2009/02/14(土) 01:13:10
Perlのことですね、わかります
0257デフォルトの名無しさん2009/02/14(土) 01:27:06
あのバージョン6がすべった言語のことか
0258デフォルトの名無しさん2009/02/14(土) 01:28:03
>>255
それは金属であって宝石ではない(゚д゚)!
0259デフォルトの名無しさん2009/02/14(土) 01:28:14
真珠の綴りはPerlじゃないぞ・・・
0260デフォルトの名無しさん2009/02/14(土) 01:32:50
まぁなんにせよ変な宗教言語は使いたくないわなw
0261デフォルトの名無しさん2009/02/14(土) 05:43:57
()とか幼稚園じゃ習わなかった
0262デフォルトの名無しさん2009/02/14(土) 09:40:03
幼稚園の時、世の中はすべてnilだと習った。
0263デフォルトの名無しさん2009/02/14(土) 09:44:22
うちの幼稚園ではnil派と()派が闘争を繰り返していた。
0264デフォルトの名無しさん2009/02/14(土) 10:01:49
little schemerって幼稚園児でも理解できるように書かれたんだっけ
0265デフォルトの名無しさん2009/02/14(土) 11:41:33
誰が象のラムダ君役をするかで喧嘩になってみっちゃんが泣いた。
0266デフォルトの名無しさん2009/02/14(土) 11:43:25
ここは幼稚園で人生のすべてが再帰的だと悟ったみなさんが集まるスレですかね。
0267デフォルトの名無しさん2009/02/14(土) 11:45:16
継続渡しスタイルで幼稚園ドロップアウトした。
0268デフォルトの名無しさん2009/02/14(土) 12:36:37
ところで、
チョコはいくつもらえましたか
0269デフォルトの名無しさん2009/02/14(土) 12:38:38
カーチャンから一個、姉さんから一個
0270デフォルトの名無しさん2009/02/14(土) 12:44:26
(´;ω;`)
0271デフォルトの名無しさん2009/02/14(土) 12:46:02
ええい、FOR文でもらえた奴はいないのか!
0272デフォルトの名無しさん2009/02/14(土) 12:50:04
「末尾再帰!」と叫んで保母さんのスカートをめくったのはいい思い出
0273デフォルトの名無しさん2009/02/14(土) 13:14:52
Next Boston Lisp Meeting: Monday February 23th 2009 at 1800 at MIT 34-401B
http://fare.livejournal.com/139926.html

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

これおもしろそうね。

0274デフォルトの名無しさん2009/02/14(土) 18:38:38
Seasoned Schemer ってどうですか?
0275デフォルトの名無しさん2009/02/14(土) 18:39:22
Let Over the Lambda ってどうですか?
0276デフォルトの名無しさん2009/02/14(土) 22:52:52
海は死にますか?
0277デフォルトの名無しさん2009/02/14(土) 23:11:19
nilもそうですか?
0278デフォルトの名無しさん2009/02/14(土) 23:18:17
水曜どうですか?
0279デフォルトの名無しさん2009/02/15(日) 00:06:17
明日来てくれるかな?
0280デフォルトの名無しさん2009/02/15(日) 00:43:26
このスレのネタの応酬はハイレベル過ぎて
0281デフォルトの名無しさん2009/02/15(日) 00:50:07
終いますか〜?
0282デフォルトの名無しさん2009/02/15(日) 00:58:25
括弧の山を愛する連中の嗜好が平凡なわけがなかった・・・・
0283デフォルトの名無しさん2009/02/15(日) 01:02:23
別に愛してるわけじゃないけど、無いと不安になるというか不安定に感じる。
0284デフォルトの名無しさん2009/02/15(日) 01:44:31
十分平凡でないです!
0285デフォルトの名無しさん2009/02/15(日) 17:10:57
アイちゃんも冗談を言うようになったか。
0286デフォルトの名無しさん2009/02/15(日) 20:27:36
>>274
何が?
俺は好きだよ?
0287デフォルトの名無しさん2009/02/15(日) 23:07:40
hogehoge
0288デフォルトの名無しさん2009/02/15(日) 23:40:17
(hage? >287)
0289デフォルトの名無しさん2009/02/15(日) 23:54:06
一連の1行の糞レスをあぼーんするプログラムを作れ
0290デフォルトの名無しさん2009/02/15(日) 23:59:14
(waha >>288)
0291あぼ〜ん2009/02/16(月) 00:38:22
あぼ〜ん
0292デフォルトの名無しさん2009/02/16(月) 02:11:17
>>289
navi2chちょっといじればいいだけ
0293デフォルトの名無しさん2009/02/18(水) 03:08:12
iPhone/iPod touch用のLisp/Schemeを発見。次スレのテンプレに入れて。

http://www.turbozen.com/sourceCode/TinyLisp/
http://programming.nu/
0294デフォルトの名無しさん2009/02/18(水) 04:15:12
こういうlist が返ってくるときに
((1 2 3) (1 2 3) (1 2 3))

こういう処理にするにはどうすればできますか?
(map + '(1 2 3) '(1 2 3) '(1 2 3))
0295デフォルトの名無しさん2009/02/18(水) 04:25:47
(apply map (cons + list))
0296デフォルトの名無しさん2009/02/18(水) 04:36:47
>>295
ありがとうございます!
0297デフォルトの名無しさん2009/02/19(木) 10:24:17
>>293
wikiのテンプレに書き加えておいて。
0298デフォルトの名無しさん2009/02/20(金) 00:27:38
(setq list1 '((message "X") (message "Y")))
があったとして、list1 の各要素を順番に実行していく方法を教えてください。
0299デフォルトの名無しさん2009/02/20(金) 00:38:32
(eval (cons 'progn list1))
こういう話?
それともこんなのをお望み?
(mapcar #'(lambda (x) (apply (car x) (cdr x))) list1)
0300デフォルトの名無しさん2009/02/20(金) 00:44:13
(mapcar #'eval '((message "X") (message "Y")))
とかでもいいのか。
0301デフォルトの名無しさん2009/02/20(金) 01:01:05
仮定が分からないな。
messageというのが関数なのか?
(setf *func-hash* (make-hash-table))
(setf (gethash 'message *func-hash*) #'(lambda (x) (princ x)))
(setf list1 '((message "x") (message "y")))
(mapc #'(lambda(x)(funcall (gethash (car x) *func-hash*) (cadr x))) list1)
=> 以下が結果 maximaとかはこの手のことをやってるね。
xy
("x" "y")
03022982009/02/20(金) 03:13:07
>>299
>(eval (cons 'progn list1))

すごいです。これでできました。
ありがとうございました。
0303デフォルトの名無しさん2009/02/20(金) 05:52:44
Scheme

(let ((list1 '((display "X") (display "Y"))))
 (map eval list1))
⇒XY(#<void> #<void>)
0304デフォルトの名無しさん2009/02/21(土) 01:33:52
(cons 1 '(2 3))
-> (1 2 3)

となりますが

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

になりますよね

今は (append '(1 2) '(3)) と書いてますが
(cons 1 '(2 3)) に比べて冗長だと感じます
もっと良い書き方はありますか?
0305デフォルトの名無しさん2009/02/21(土) 01:51:17
書き方というか、片方向リストの仕様だから
0306デフォルトの名無しさん2009/02/21(土) 03:11:26
(define (wahacons a b) (append a (list b)))
(wahacons '(1 2) 3)
0307デフォルトの名無しさん2009/02/21(土) 05:12:06
>>305
仕様ですか…。
>>306
関数を書いてしまえば良かったんですね
ありがとうございます
0308デフォルトの名無しさん2009/02/21(土) 06:25:59
>>307
quasiquoteは?

> (define x '(1 2))
x
> `(,x 3)
((1 2) 3)
0309デフォルトの名無しさん2009/02/21(土) 06:28:27
肝心な部分コピペし忘れとかどうなのよ、俺……orz

> `(,@x 3)
(1 2 3)
0310デフォルトの名無しさん2009/02/21(土) 23:02:45
Luaスレがschemeネタで盛り上がってるw
0311デフォルトの名無しさん2009/02/22(日) 00:35:49
ちょっと見てくルア
0312デフォルトの名無しさん2009/02/22(日) 01:21:09
見てきたけど、あんまり面白い流れでも無かった。
速いなら実装を参考にしよう、とか建設的な意見が出る訳でもなく、
単にSchemeイラネ、だし。
0313デフォルトの名無しさん2009/02/22(日) 04:20:15
括弧うぜえとか。
0314デフォルトの名無しさん2009/02/22(日) 09:18:44
Schemeは作るの簡単とか。
0315デフォルトの名無しさん2009/02/22(日) 09:36:45
>>312
Luaってのはどういう言語かもよく知らないんだが、
処理系は結構よくできているみたいで遅くはないよ。
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&box=1
0316デフォルトの名無しさん2009/02/22(日) 14:35:16
ypsilon軍団とgauche軍団どっちが多い?
0317デフォルトの名無しさん2009/02/22(日) 14:36:35
[gauche] 攻撃:52 素早さ:32 防御:27 命中:74 運:17 HP:258
[Ypsilon] 攻撃:88 素早さ:69 防御:92 命中:95 運:96 HP:144

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


0318デフォルトの名無しさん2009/02/22(日) 14:38:19
何という二番煎じ、お前は車輪の再発明でもしてろ
0319デフォルトの名無しさん2009/02/22(日) 20:43:41
車輪の再発明はハッカーの大好物
0320デフォルトの名無しさん2009/02/22(日) 21:09:19
>>315
遅くないのは知ってるけど、向こうの話題の発端がそういう話だった。

俺の場合、VCSのmonotoneで組み込まれてて知ったんだけど、
かなり評価高い言語だよね。Adobeとかも採用してるとか。
0321デフォルトの名無しさん2009/02/22(日) 21:14:55
Lispが早いとか
0322デフォルトの名無しさん2009/02/22(日) 22:30:29
CLでもSchemeでもいいので話題のHSPみたいに簡単にゲーム作れるソフトはありますか?
0323デフォルトの名無しさん2009/02/22(日) 22:38:44
>>322
CL/scheme はしらんが、どこぞのメーカは
ゲーム開発ベッドで専用 Lisp 使ってなかったっけ?
0324デフォルトの名無しさん2009/02/22(日) 22:56:50
>>322
LispやSchemeをゲーム制作に生かしている企業とかはあるみたいだけど、
誰でも分かり易いライブラリだの、特化した処理系だのはないんじゃない?
一応、SDLとかOpenGLとか使ってゲーム作るのは、大抵の処理系で出来ると思うけど。

というか、HSPが話題っていつの話だ。
0325デフォルトの名無しさん2009/02/22(日) 23:41:31
>>323
これね。
http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
0326デフォルトの名無しさん2009/02/23(月) 02:25:21
LuaとかSquirrelは遅かったらC++に書き直せばいいだけだからな
0327デフォルトの名無しさん2009/02/23(月) 02:48:48
Lisp/Schemeも同じことができると思うんだが……。
0328デフォルトの名無しさん2009/02/23(月) 03:01:43
書き直す際に
実装が多いのが弱点ではないかと。
0329デフォルトの名無しさん2009/02/23(月) 03:04:34
Squirrelは書き直すのが楽そうだ
0330デフォルトの名無しさん2009/02/23(月) 06:21:26
StalinならCより速くなることもあるんじゃなかったっけ?
0331デフォルトの名無しさん2009/02/23(月) 09:01:55
Stalinって実際どんな感じ?
0332デフォルトの名無しさん2009/02/23(月) 09:49:25
StalinってCを出力するんでしょ?
Cより速くなる事は無いと思うけど…
Cで「人間が」書くより速くなる事ならあるかもしれないけど
0333デフォルトの名無しさん2009/02/23(月) 10:13:08
stalin ... それは、かつてソ連で大量虐殺をおこなった恐怖の支配者。。。
だから
非人間的な行動(コード)だろ?人間が書くCのコードより速いってことじゃ?
0334デフォルトの名無しさん2009/02/23(月) 12:45:31
Stalinは、人間がかくCコードよりかなり早い場合も多い。
ただし、継続が使えないとか制限が多いし、コンパイル時間がめっちゃかかる。

>>332
> Cより速くなる事は無いと思うけど…
> Cで「人間が」書くより速くなる事ならあるかもしれないけど
こんなこというやつ初めて見た。
0335デフォルトの名無しさん2009/02/23(月) 13:00:30
そうか?理論値と実情を別に語るのは良くあると思うが。
0336デフォルトの名無しさん2009/02/23(月) 14:49:32
だって、人間が書いたものではないCを含めて 「C言語より速い」
を語るなら、それって実質的にCコンパイラの最適化の差に帰着するじゃん。

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

まぁ言い出しておいてアレだけどスレチだな。すまん
0337デフォルトの名無しさん2009/02/23(月) 15:49:25
Stalinの話は定期的にでてくるけど、流れとしては・・・

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

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

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

俺は盛り上がった派だけどw
最適化の解説の論文は勉強になった
0339デフォルトの名無しさん2009/02/23(月) 21:26:10
schemeのマクロを使って 
見た目から括弧を無くしていくことって出来ますか? 
例えば括弧のない1 + 2を3と評価するとか 
for リスト do 処理 done 
みたいな構文がmapの意味で動くようにしてみたい 
0340デフォルトの名無しさん2009/02/23(月) 21:34:29
>>339
まえにどっかでみたことがある。srfiなんとか だったと思う。
0341デフォルトの名無しさん2009/02/24(火) 01:17:57
SRFI 49のI-expressionsは、インデントで構文木を表す表記法であって、
マクロは関係なかった気がするんだけど、違ったっけ?
0342デフォルトの名無しさん2009/02/24(火) 06:02:54
SRFI 49: Indentation-sensitive syntax
http://srfi.schemers.org/srfi-49/srfi-49.html

最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
http://lispuser.net/memo/lisp/2006-03-30-23-58.html
0343デフォルトの名無しさん2009/02/24(火) 12:45:19
つ Standard Lispの記号モード
0344デフォルトの名無しさん2009/02/24(火) 15:44:53
>>339
「schemeのマクロを使って」も
マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
ただしこの3つをなくするのはRnRSではできない。
処理系によってはリーダマクロをサポートしているのでそれを使うと可。
0345デフォルトの名無しさん2009/02/24(火) 20:11:25
なるほど、やはり出来ないのかー
リーダーマクロ、存在だけは知ってましたが
コンパクトでかっこいいSchemeで出来たらなぁって思いまして

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

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

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

Gaucheの拡張で優先順位を計算して括弧を省略ってページなら見つけましたが
そういった話でしょうか?
0346デフォルトの名無しさん2009/02/24(火) 20:42:16
こういうことじゃないの
(define-syntax calc
(syntax-rules (+ -)
((_ a + . rest) (+ a (calc . rest)))
((_ a - . rest) (- a (calc . rest)))
((_ a) a)
)
)
> (calc 1 + 10 - 5)
5
0347デフォルトの名無しさん2009/02/24(火) 20:44:04
5かよ
0348デフォルトの名無しさん2009/02/24(火) 20:44:55
> Schemeには演算子の優先順位がないのが原因でしょうね
> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
> これ非常に興味あるんですが、どういうことでしょうか?
そうゆう reader を作ればいいじゃね?
作るだけだったら誰でも作れると思うし…
0349デフォルトの名無しさん2009/02/24(火) 20:45:29
>>345
俺は344じゃないけど、344の言ってることは違う。

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

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

0350デフォルトの名無しさん2009/02/24(火) 20:46:54
× 一番その側
○ 一番外側
0351デフォルトの名無しさん2009/02/24(火) 21:16:51
>>344
これ面白いなぁ。
引き算は
(calc 1 - 2 - 3)
こう展開されてしまうから
(- 1 (- 2 3))
正しい値にならないね
けど、面白いからちょっと考えてみます

>>349
なるほど、勉強になります。
「マクロ使用を囲う括弧と、マクロ名さえあれば」
というのは、344氏の例でいけば、
一番外側の()とマクロ名であるcalcっていう意味なわけですね
そして、それより内側であれば、がんばり次第で自由自在だ、と。
0352デフォルトの名無しさん2009/02/24(火) 21:51:26
('A`)y-~
0353デフォルトの名無しさん2009/02/25(水) 02:20:27
そもそも、何で括弧なくしたいんだ?
知的好奇心満たしたいだけなら何も言わんが。
0354デフォルトの名無しさん2009/02/25(水) 07:19:11
Lisp Scheme初心者です。マグロウヒルの「プログラムの構造と実行」をテキストに
Schemeを勉強しようと思っています。
そこで皆様のアドバイスをお願いしたいのですが、どのScheme処理系がお勧めでしょうか?
あまりにもたくさんありすぎて判断できません。
OSはWindows XPです。よろしくお願いします。
0355デフォルトの名無しさん2009/02/25(水) 08:44:21
>>354
windows上で勉強目的なら統合環境のほうが楽だろうしPLT schemeで良いんじゃないかな。
さもないなら、linux上でemacs+gauche(日本語の本があるから)とかでも良いように思うん
だけどね。
0356デフォルトの名無しさん2009/02/25(水) 15:03:43
>>338
stalinがダメなら
記述力と速度を同時に達成できるのって
ocamleぐらい?
0357デフォルトの名無しさん2009/02/25(水) 16:11:06
GCの停止時間がなくて
記述力も同時に達成できるのはC++しかないんだぜ
0358デフォルトの名無しさん2009/02/25(水) 16:19:51
確か2月前半ぐらいに
comp.lang.lisp
でreadable なlisp -> C 変換の話がでてたはずなのに見つからない
0359デフォルトの名無しさん2009/02/25(水) 16:55:36
C++はOOPの振りをした関数型言語だからな
0360デフォルトの名無しさん2009/02/25(水) 17:34:58
>>359
テンプレートで遊ぶ分にはそうだけどな
0361デフォルトの名無しさん2009/02/25(水) 18:16:37
OOPは言語関係ねーす
0362デフォルトの名無しさん2009/02/25(水) 18:20:23
c++でoneceonlyマクロって書けるんだろうか
前にoneconleyできない関係で何度も代入評価されてる
「そんなエラー絶対みつかんないだろう」ってエラーがboost関係で報告されてた
0363デフォルトの名無しさん2009/02/25(水) 19:39:11
>>353
どっちかっていうと実用的な理由
 ・タイプ量を減らしたい
 ・括弧がネストすると、対応が激しくおいづらい
0364デフォルトの名無しさん2009/02/25(水) 19:48:59
emacsを使えばそんなこと屁でもないな
むしろ()がある方がタイプ量が減るし、移動が楽ってぐらいになる
逆にエディタの支援が無いとなるとなるほどそれは確かに致命的だ
0365デフォルトの名無しさん2009/02/25(水) 20:09:55
エディタの機能でどうのこうのっていうのは
言語の話とは別のような・・
俺もemacsは使ってるが

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

まあ、実際にやってみて、構文を増やす度に複雑化する、
仕様やリーダーマクロのメンテにうんざりしてみれば、
その辺良く分かるとは思うけど。
0367デフォルトの名無しさん2009/02/25(水) 20:34:54
実用ってことはコードを編集することを含むだろう?
ならエディタは関係あるじゃないか
0368デフォルトの名無しさん2009/02/25(水) 20:52:06
emacsの括弧うんぬんはいじる方の腕しだいで楽になる。
0369デフォルトの名無しさん2009/02/25(水) 20:56:54
emacs はこのへんを組み込んでるかどうかでも全然ちがうよ。
1. insert-parentheses を使ってるかどうか
2. show-paren-mode を使ってるかどうか
3. transient-mark-mode を使ってるかどうか
0370デフォルトの名無しさん2009/02/25(水) 20:57:00
>>365
プログラムのコードのタイプ量は減るだろうけど、
編集作業全体のタイプ量は驚きの増加量、って感じになる気がするよ。
S式単位での編集を使わないと、移動に掛かる手間が段違い。
0371デフォルトの名無しさん2009/02/25(水) 21:03:44
emacs userは1匹見ると10匹いると思え
0372デフォルトの名無しさん2009/02/25(水) 21:06:15
>>371
ごきぶりみたいにいうな にがわらひ
370みたいなべてらんもいるけど、C-F C-B C-N C-Pもままならずマウスな初心者も
いるから。
viでもlispモードは普通にあるよ。
0373デフォルトの名無しさん2009/02/25(水) 21:36:25
>>371
むしろ1匹しかいない絶滅危惧種扱いの所が多いよ。
0374デフォルトの名無しさん2009/02/25(水) 22:18:10
google trendsをみても検索数の指数は減ってるけど、多い地域はアカデミックなところが
多いね。日本も亜米利加もね。
0375デフォルトの名無しさん2009/02/25(水) 23:15:14
俺ベテランじゃなくて異端。
viper-modeで、viとEmacs両方のキーバインドを同程度に使う変態。
0376デフォルトの名無しさん2009/02/25(水) 23:19:42
vipperかお?
0377デフォルトの名無しさん2009/02/25(水) 23:22:13
お じゃない。
0378デフォルトの名無しさん2009/02/25(水) 23:27:08
>>375
viper-modeかぁ。15年以上起動したことがない。笑い
0379デフォルトの名無しさん2009/02/25(水) 23:31:02
>>375
   ___l___   /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
   ノ l Jヽ   レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
    ノヌ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    / ヽ、_      /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
   ム ヒ       /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
   月 ヒ      /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
   ノ l ヽヽノ    /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
      ̄ ̄    /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |
0380デフォルトの名無しさん2009/02/25(水) 23:56:13
>>375
viperモードたまに使うけど、完全に終了させる方法教えて下さい。
viper-go-away しても別のファイル開いたらまたviperになってて、
仕方ないからemacs毎再起動してる。
0381デフォルトの名無しさん2009/02/26(木) 02:13:24
>>380
せっかくなので、ソースコードを読んで原因を探ってきました。

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

なので、自分でコードを修正するか、本家にフィードバックするか、
俺のようにVIPER常駐野郎になるか選んでください。
0382デフォルトの名無しさん2009/02/26(木) 04:40:02
と思ったんだけど、追加で調べていったら、
デフォルトのメジャーモードを元に戻さないってバグもあって、
これが本筋っぽい。CVS最新版では修正されてる。
↓を.emacsに追加でひとつ。

(defadvice viper-go-away (after revert-default-major-mode activate)
(setq default-major-mode 'fundamental-mode))
0383デフォルトの名無しさん2009/02/26(木) 08:37:29
maximaの細かいbugが未だに放置なのは
common lispの問題なんだろうか
schemeで書かれてるならbugは少なくなるんだろうか
0384デフォルトの名無しさん2009/02/26(木) 11:34:14
妄想はそのくらいに
0385デフォルトの名無しさん2009/02/26(木) 19:45:52
もともと"Common Lisp"じゃないものをGCLに、そして"Common Lisp"に書き直したからじゃない?
最初から"Common Lisp"で書かれていたら違っていたかも
Maxima使ってないからよくわからないけど
0386デフォルトの名無しさん2009/02/26(木) 23:21:25
質問。この2つに違いってありますか?

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

(define (g x)
(let ((h 10))
(+ x h)))
0387デフォルトの名無しさん2009/02/26(木) 23:29:49
5.2.2 internal definitionsに変らないと書いてある。

> A <body> containing internal definitions can always be converted
> into acompletely equivalent letrec expression.
0388デフォルトの名無しさん2009/02/26(木) 23:45:33
(define (g x)
 (letrec ((h 10))
  (+ x h)))
となら同じ、が正しいのでは?
letとletrecは違う
この例はたまたまコンビネータ式が束縛されているに過ぎない
(正確には式が束縛されているわけではないけど)
0389デフォルトの名無しさん2009/02/26(木) 23:53:51
質問の意図によるだろうけど
最終的な機械語に落とす段階では同じコードになる
03903882009/02/26(木) 23:57:23
とはいったものの、束縛する式が1つならSchemeレベルではletとletrecは等価ですね
0391デフォルトの名無しさん2009/02/27(金) 00:01:31
>>387
ありがとうございます
自分の知らない、
何か違う意味があるんだろうと思って質問したんですが
letrecと同じ意味なんですね
0392デフォルトの名無しさん2009/02/27(金) 00:01:49
おっちょこちょいですね。
0393デフォルトの名無しさん2009/02/27(金) 00:04:11
>>391
>>386の例ではletで問題ない。
0394デフォルトの名無しさん2009/02/27(金) 00:11:24
>>393
了解です。Schemeってシンプルですね。ありがとうございます
0395デフォルトの名無しさん2009/02/27(金) 00:20:22
>>387
編集ミスった。
acompletely→a completely

否定のa-に見えてしまう すまん
0396デフォルトの名無しさん2009/02/27(金) 10:00:52
さしずめ「うは宇宙のう」
0397デフォルトの名無しさん2009/02/27(金) 21:31:01
>>382
遅くなったけどありがとう。これでviperモードと仲良く暮らせそうです。
0398デフォルトの名無しさん2009/02/28(土) 08:07:26
お
0399デフォルトの名無しさん2009/02/28(土) 09:35:38
399
0400デフォルトの名無しさん2009/02/28(土) 09:36:03
400
0401デフォルトの名無しさん2009/02/28(土) 18:05:35
shibuya.lisp ストリーミング中!
って今ごろ気付いたorz
0402デフォルトの名無しさん2009/02/28(土) 23:49:13
見逃した……
ニコニコ動画辺りに上げてくれないかあ
0403デフォルトの名無しさん2009/03/01(日) 20:33:59
>>402
マイリスト Shibuya.lispテクニカルトーク#2‐ニコニコ動画(ββ)
http://www.nicovideo.jp/mylist/11305224
0404デフォルトの名無しさん2009/03/01(日) 20:48:54
>>403と投稿者に感謝を
0405デフォルトの名無しさん2009/03/01(日) 20:57:15
>>403
マジでありがとう!!
0406デフォルトの名無しさん2009/03/02(月) 01:21:33
他の関数型言語でこの手の集まりをみないのは
学会で代用してるからなのだろうか
0407デフォルトの名無しさん2009/03/02(月) 01:33:04
>>406
勉強会ならあるけどな。
0408デフォルトの名無しさん2009/03/02(月) 05:19:41
>>403
あー、配信のときとは別テイクで音声がずいぶん聞きやすくなってる!
ありがとうございます。
0409デフォルトの名無しさん2009/03/02(月) 10:57:50
>>406
HaskellとかOCamlだと人がそんなにまだ多くないし(Lispに比べれば)、
ゲーム作りましたみたいな大きいネタとか、その筋なら誰でも知ってる大先生とか
そういうのないからねぇ。
さがせば>>407が書いてるみたいに勉強会とかあるからメイリングリストとか
入ってみれば? 今時捨てアドのひとつやふたついくらでも作れるし。
0410デフォルトの名無しさん2009/03/02(月) 17:06:35
lispが多いといってもschemerが多いんじゃない?
やはり、川合さんとか、処理系製作者が3人もいるくらいだからね。
common lispは人は少ないよ。Qiやclojure,newLispに至っては壊滅的。

そーいえば、abclがバージョンアップしてたな。
0411デフォルトの名無しさん2009/03/02(月) 17:12:46
ircを覗くと、常駐者が

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

くらいみたいだね。haskellがなんでこんなに多いんだ?
0412デフォルトの名無しさん2009/03/02(月) 18:35:37
has略は中ニ設定豊富だからな
0413デフォルトの名無しさん2009/03/02(月) 22:33:36
http://pc11.2ch.net/test/read.cgi/tech/1234635513/378

自分はLispが全然書けないけど、どんだけ短くなるのか見てみたいです。
どなたお願いします〜
0414デフォルトの名無しさん2009/03/03(火) 00:34:29
>>410
Qiというものを始めて知りましたが、Haskellっぽくて面白そうですね。
ところで皆さんはこういった面白い実装の情報をどこで得てるんでしょうか?
英語のメーリングリストなのかな?とは思ってるんですが・・・
0415デフォルトの名無しさん2009/03/03(火) 01:00:31
>>414
それはねぇ。。。こまめに調べてるだけよ。ふふふ。。。lisperがあつまる日本語のチャット
も情報源だよ。
うんQiはHaskellっぽいね。
0416デフォルトの名無しさん2009/03/03(火) 01:13:41
ttp://www.zazzle.com/lisp+gifts

これがメリケンだ!?
0417デフォルトの名無しさん2009/03/03(火) 02:06:13
>>416
made with secret alien technologyのシャツが無いなんて信じられん
0418デフォルトの名無しさん2009/03/03(火) 03:44:57
schemer多いのはシンプルだからなんだろうか
0419デフォルトの名無しさん2009/03/03(火) 03:50:50
Qi ECLでは駄目なんだ・・・
高速化って書いてるから期待したのに
0420デフォルトの名無しさん2009/03/03(火) 04:18:51
>>413
(use srfi-1)
(define request '((hoge . 1) (fuga . 2) (piyo . 3)))
(filter (lambda (x) (member (car x) '(hoge fuga))) request)
とか
0421デフォルトの名無しさん2009/03/03(火) 08:26:08
>>414
Planet LispってRSSあるよ。
0422デフォルトの名無しさん2009/03/03(火) 09:50:56
>>421
おおっ、有り難うございます!! さっそくGoogle Readerに追加しました。
0423デフォルトの名無しさん2009/03/03(火) 12:07:00
>>420 3行目 srfi-26使って(gaucheならuse不要)
(map (cut assoc <> request) '(hoge fuga))
0424デフォルトの名無しさん2009/03/03(火) 12:13:58
ハッシュテーブルに代入したら負けですねわかります
0425デフォルトの名無しさん2009/03/03(火) 13:20:03
(defvar *request* (make-hash-table))
(mapc #'(lambda (elem)
(setf (gethash (car elem) *request*) (cdr elem)))
'((hoge . 1) (fuga . 2) (piyo . 3) ...))
(let ((res (make-hash-table)))
(mapc #'(lambda(key)(setf (gethash key res)
(gethash key *request*)))
'(hoge fuga piyo))
res)

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

動作イメージ
(tflist 1)
 '(#t #f) or '((#t) (#f))
(tflist 2)
 '((#t #f) (#t #t) (#f #f) (#f #t))
(tflist 3)
 '((#t #t #t) (#t #t #f) (#t #f #t) (#t #f #f) (#f #t #t) (#f #t #f) (#f #f #t) (#f #f #f))
0427デフォルトの名無しさん2009/03/03(火) 22:07:54
(define (tflist n)
 (cond
  ((<= n 0) '())
  ((= n 1) '((#t) (#f)))
  (else
   (let ((l (tflist (- n 1))))
    (define (add-t l) (cons #t l))
    (define (add-f l) (cons #f l))
    (append (map add-t l) (map add-f l))))))
0428デフォルトの名無しさん2009/03/03(火) 22:08:27
(define (tflist n)
(if (= n 1)
(list (list #t) (list #f))
(append
(map (lambda (x) (cons #t x)) (tflist (- n 1)))
(map (lambda (x) (cons #f x)) (tflist (- n 1))))))
0429デフォルトの名無しさん2009/03/03(火) 23:19:22
>>427-428
おお、神よ。なるほど、(append (map..)(map..))の形になるのか
もしよろしければもう1個
以下の例で最後の行は動くようになりませうか?
;guile/gaucheでどちらもエラー
(define (mujunritu p) (not (and p (not p))))
(define (haityuritu p) (or p (not p)))
(define (try1 f) (map f '(#t #f)))
(try1 mujunritu)
;これがダメ。try1のfでλx(apply f x)やλx(eval(f x))も試してみたものの
(map try1 '(mujunritu haityuritu))

OCamlでは動作
let mu p = not (p && (not p));;
let hai p = p || (not p);;
let tr f = List.map f [true;false];;
List.map tr [mu;hai];;
0430デフォルトの名無しさん2009/03/03(火) 23:23:52
>>420>>425
サンクス。今の自分じゃ全然理解できないけどorz
0431デフォルトの名無しさん2009/03/03(火) 23:25:52
前きたquote判ってない人かね
0432デフォルトの名無しさん2009/03/03(火) 23:28:26
>>429
`(,mujunritu ,haityuritu)または(list mujunritu haityuritu)
'(mujunritu haityuritu)との違いわかるかな
0433前きたquote判ってない人2009/03/03(火) 23:55:18
>>431
別人です。あれからROMしかしてないですよ。
0434デフォルトの名無しさん2009/03/05(木) 00:52:37
>>432
Lisp属の初心者には、このあたりは難しすぎます
調べるのは本当に大変でしたが、何とか見つかりました
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html
これのことですよね?
 Common Lispでも、関数引数に関数実体も名前も両方使える。
 (略)
 Schemeでは、関数しか受けとらない

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

schemeの場合
(list mujunritu haityuritu)だと関数実態が返ってくるが
(quote (mujunritu haityuritu))だと名前が返ってくる
schemeにもCLのsymbol-functionみたいな関数があれば
quoteのほうでも動作すると思い調べてみたものの
該当の関数が全然見つからない\(^o^)/
しかし、関数はおいといて、この考えでたぶん、大丈夫ですよね?
0435デフォルトの名無しさん2009/03/05(木) 01:20:53
>>434
つ「eval」
0436デフォルトの名無しさん2009/03/05(木) 02:00:08
quoteとevalは静的スコープな言語にふさわしくないとつくづく思う
0437デフォルトの名無しさん2009/03/05(木) 02:12:51
スコープと評価が?
0438デフォルトの名無しさん2009/03/05(木) 02:50:43
schemeのシンボルは文字列に毛の生えた特殊オブジェクトと思えばよろし。
プログラム内でそのシンボルに何が束縛されているかとは基本的に全く関係ない。
0439デフォルトの名無しさん2009/03/05(木) 07:25:51
R5RS の eval だと、その時点の環境での評価ができないから symbol-function の代わりにはできないし。
0440デフォルトの名無しさん2009/03/05(木) 12:06:53
あくまでも、定義中の名前はシンボルではなくただの変数の入れ物の
名前として使われる。また、プログラムを実行するには変数の位置を
表現できれば名前のような冗長な情報は必要ない。
よって名前は実行前のある時点でアドレスに変換されていると考えるべき。

evalやCLのsymbol-functionみたいな実行時にシンボルからその位置情報へ
変換する仕組みを作るとなると、処理系のインタプリタやコンパイラ相当を
必要時に起動するのと全く事になり、非常に馬鹿げたコストが掛かる。
0441デフォルトの名無しさん2009/03/05(木) 12:13:45
>>436
evalはともかくquoteはこの件と関係ない
0442デフォルトの名無しさん2009/03/05(木) 13:16:24
>>440
文章として突っ込みどころ多すぎw

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

(defun foo ()
(print 'foo))
(flet ((foo () (print 'foolet)))
(foo)
(funcall (function foo))
(funcall (symbol-function 'foo))))
FOOLET
FOOLET
FOO
0443デフォルトの名無しさん2009/03/07(土) 12:49:38
急に流れが止まったから釣りかと思ったが
やっと>>422の言っていることがわかった
symbol-functionってグローバルな関数定義しか参照しないんだな
0444デフォルトの名無しさん2009/03/07(土) 13:48:24
schemeにシンボルが無いってことが少し分かってきた
やっぱ Common Lisp 最強だな!
0445デフォルトの名無しさん2009/03/07(土) 14:16:03
>>442
(let ((foo #'(lambda () (print 'fooval))))
(flet ((foo () (print 'foolet)))
(foo)
(funcall foo)
(funcall 'foo)
(funcall (function foo))
(funcall (symbol-function 'foo))))
FOOLET
FOOVAL
FOO
FOOLET
FOO

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

funcallは>>440の後段のような処理は、
functionに任せて、関数呼び出しに専念する仕様。
funcallの第一引数は関数か、シンボル。
シンボルの場合symbol-functionの結果を使う。
0446デフォルトの名無しさん2009/03/07(土) 16:10:34

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

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

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

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

>>442氏の440へのコメント
 ここのあたりが一番わからない
 symbol-functionは(トップレベル変数が動的スコープのため)
 動的スコープを参照出来る
 →functionのようにレキシカルスコープの変数を考慮しなくてよい
 →symbol-functionに関してはevalもそんなにコストかからんぜ、ってこと?
0447デフォルトの名無しさん2009/03/07(土) 17:43:08
>>446
442,445はCommon Lispのコードっていうのは分かってる?

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

これは俺も何が言いたいのかさっぱりわからんというか、
はっきり言って間違い。反証はScheme。
0448デフォルトの名無しさん2009/03/07(土) 19:15:47
> evalは静的スコープにはふさわしくない
はLisp1.5世代の人の意見なのかな。
0449デフォルトの名無しさん2009/03/07(土) 20:28:14
現在のevalはLispらしさを演出するためだけの存在だからな
0450デフォルトの名無しさん2009/03/07(土) 21:07:27
evalを使うってのは、速度的にも不利になるし、普通にlispでプログラムを組む人は
避けるところだと思うよ。避けないとすれば腕の悪い人という印象しかないな。少な
くとも他の方法を探すだろう。
0451デフォルトの名無しさん2009/03/08(日) 10:41:58
大抵マクロでおkだからな
0452デフォルトの名無しさん2009/03/08(日) 15:39:34
Qiは
データ
[]
program
()
のカッコをわけたらlispの意味ないとは思わなかったんだろうか
0453デフォルトの名無しさん2009/03/08(日) 16:21:06
>>451
マクロでできることはevalでもできるみたいな言い方だな
第一印象はそんなものだろうけど
それをいつまでも引きずっていていいのかな?
0454デフォルトの名無しさん2009/03/08(日) 16:40:18
451じゃないけど違うの?
0455デフォルトの名無しさん2009/03/08(日) 16:49:10
Lispのマクロ機能はevalで実装されていると思うのだが・・・
0456デフォルトの名無しさん2009/03/08(日) 17:11:36
http://codepad.org/kiclBi61
0457デフォルトの名無しさん2009/03/08(日) 18:36:31
(display (eval (let1 'y 2 `(+ ,x y))))
これで動くよ
何が言いたいのかわからんが
0458デフォルトの名無しさん2009/03/08(日) 19:00:31
言いたいことは
>>443
>symbol-functionってグローバルな関数定義しか参照しないんだな
と同じことがevalにも言えるということ。

evalは外側のローカル変数xの定義を参照できないから
>>457では、事前にxのところを値で置き換えたものをevalに渡している。
0459デフォルトの名無しさん2009/03/08(日) 19:58:27
つーかevalは他のローカル変数のことなんか知らんから。
関数の引数として渡されたコンテクストで評価するしかない。
それを知らせる手段として(current-environment)みたいなものが
処理系にあればやりたいことは実現できるんじゃないか。
0460デフォルトの名無しさん2009/03/08(日) 20:13:48
Schemeのevalの話?

Common Lispでは、

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

Schemeのevalは渡された環境への変更に制限もあるよね。
;; R5RSとR6RSで少し違う
0461デフォルトの名無しさん2009/03/08(日) 21:10:14
(let ((x 10))
(print (eval '(+ x x))))

*** - EVAL: variable X has no value

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

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

(define x 1)
(display (eval '(+ x x)))
2
(fluid-let ((x 10))
(display (eval '(+ x x))))
20
x
1
0463デフォルトの名無しさん2009/03/09(月) 08:01:39
mzschemeで、CGIをPOSTメソッドで使いたいのですが(クライアント側)、うまくいきません。

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

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

でいけると思ったのですが、エラーメッセージが帰ってきます。
どこがまずいのでしょうか?
0464デフォルトの名無しさん2009/03/09(月) 08:57:46
コンビネータパーサを作ったから
せっかくなのでR5RSかR6RS準拠のパーサを書いてみようと思ったんだが
全体のBNFのリストってどこかにまとまってる?
仕様書をざっと見した感じでは、
ばらばらにちょっとずつBNFが載っているように感じるんだが
仕様書ってのはこんな感じのもん?
0465デフォルトの名無しさん2009/03/09(月) 09:02:30
Schemeの仕様書はこんな感じのもん。
まぁLispでBNFもくそもないが。
0466デフォルトの名無しさん2009/03/09(月) 17:51:26
Lisp系言語の場合、構文のフォーマルな定義がBNFとはちょっと合わない。書けなくはないけれど。
構文の定義はこんな感じのレイヤになってる。
(1)まずtokenに分解 (R6RSの用語ではlexical syntax)
(2)S式として読み込み (R6RSの用語ではdatum syntax)
(3)S式の中の特定の構造をプログラムの構文として認識 (R6RSの用語ではprogram syntax)
このうち、(2)の出力は既に抽象的な木構造のデータなんで、(3)のレベルの構文定義っていうのは
木構造に対する定義になる。もちろん木構造にマッチする文法を書けばいいんだけど。
プログラムの字面に対するBNFとは違ってくるな。
例えば、"(if x y z)" と"(if . (x . (y . (z))))" は字面では違うけどdatum syntaxとして
読まれた後は全く同じ木構造になる。program syntaxはその木構造だけを見る。

0467デフォルトの名無しさん2009/03/09(月) 18:22:02
コンビネタ・パーザだとレキサも一体で書くスタイルが多い。
>>466で言うと(1)と(2)が一体。
ただ演算子多重定義出来る言語じゃないと、
見た目がシンプルにならない。
0468デフォルトの名無しさん2009/03/09(月) 20:48:06
>>467
それは知ってるんだが、要点はそこじゃなくて(2)と(3)が分離してるってとこ。仕様からして。
>>464 は言語構文のBNF定義がまとまってないってことに違和感を覚えたわけだろ。
(1)-(3)までまとめて書くことはできると思うがきれいになるかな?
0469デフォルトの名無しさん2009/03/09(月) 21:39:11
(3)は、R5RSとR6RSでちょっと違うし、
内部表現的には変える必要ない上に、
read/evalの分離構造ともマッチしているから、
あえて混ぜる必要はないと思う。

>>449
そういえばEuLispにはevalがなかったな。
おもしろい試みだったけどあっさりと廃れたね。
YooTooはまだ更新されているみたいだけど。
R6RSのmoduleも一部影響受けてるね。
0470デフォルトの名無しさん2009/03/10(火) 06:01:07
>>463ですが、自己解決しました。
このコードで動きます。


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

すくなくともen.wikipedia.orgのサーバーは、Content-Typeを指定しないとCGIだと認識してくれないようです。
0471デフォルトの名無しさん2009/03/10(火) 23:41:18
>>465-469
ありがとう。こういうもんか
特に466の説明はとてもわかりやすい。
R5RSのほうはBNFついてそうだから
こっちやってみよかな

しかし、PDFって扱いにくいわ
<hoge>って表記をテキストでコピペするとhhogeiになるし
<で検索できんから不便
0472デフォルトの名無しさん2009/03/11(水) 05:03:58
ファイルの basenameを取得する関数ってありますか?

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

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

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

もし既にあるなら書くのも悲しいので
どなたかご存知ありませんか?
0473デフォルトの名無しさん2009/03/11(水) 05:37:46
(pregexp-replace "(.*)\\.[^.]+" "foo.bar.txt" "\\1")
0474デフォルトの名無しさん2009/03/11(水) 05:49:52
pathname-name
http://www.lispworks.com/documentation/HyperSpec/Body/f_pn_hos.htm
0475デフォルトの名無しさん2009/03/11(水) 06:47:07
>>473-474
レスありがとうございます。

環境を書いていませんでした申し訳ありません。
R5RSで行うにはどうすれば良いでしょうか?
0476デフォルトの名無しさん2009/03/11(水) 07:39:05
R5RSにそんな高レベルな標準関数ないと思う
0477デフォルトの名無しさん2009/03/11(水) 08:52:04
R5RSで動く出来合いのライブラリが欲しいってことかね
04784722009/03/11(水) 09:17:26
>>476-477
ありませんか…。

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

(define (chop str)
(substring str 0 (- (string-length str) 1)))
(define (basename str)
(if (string? (basename-if-thereis str))
(basename-if-thereis str)
str))
(define (basename-if-thereis str)
(cond ((= (string-length str) 0) #f)
((eqv? (string-ref str (- (string-length str) 1)) #\.)
(chop str))
(#t (basename-if-thereis (chop str)))))
0479デフォルトの名無しさん2009/03/11(水) 11:47:54
>>472
SRFI 13 使えばいいんじゃね

(let ((i (string-index-right s #¥.)))
(if i
(substring s 0 i)
s))
0480デフォルトの名無しさん2009/03/11(水) 14:19:19
basenameの本質って拡張子を省くことじゃなくてディレクトリパスの削除じゃないのかな?
(my-basename "foo.txt") => "foo.txt"
(my-basename "foo.txt" #t) => "foo"
(my-basename "/foo/bar.txt") => "bar.txt"
みたいな
472の例はgaucheではpath-sans-extensionという手続きが割り当てられている
0481デフォルトの名無しさん2009/03/11(水) 15:07:51
クラススロットを辞書のように自由に登録したいのですが、
何かいい方法はありませんか?

例えば、
 (define-class <test> () (()))
というクラスから
 (define foo (make <test> :xxx 0 :yyy 10))
 (ref foo 'xxx) -> 0
 (ref foo 'yyy) -> 10
を可能にしたいのです。
0482デフォルトの名無しさん2009/03/11(水) 16:09:20
>>481
処理系は?
0483デフォルトの名無しさん2009/03/11(水) 16:16:34
>>482
gaucheです
0484デフォルトの名無しさん2009/03/11(水) 18:23:09
簡単にやるならこんな感じかな
(use gauche.sequence) (use util.list)
(define-class <test> () (%slots))
(define-method initialize ((self <test>) initargs)
(next-method)
(slot-set! self '%slots (map (lambda (x) (cons (string->symbol (keyword->string (car x))) (cadr x))) (slices initargs 2))))
(define-method ref ((self <test>) slot) (assq-ref (slot-ref self '%slots) slot))
(define-method (setter ref) ((self <test>) slot val) (assq-set! (slot-ref self '%slots) slot val))
ほんとうのスロットのようにふるまわせたいならMOP使わないとだめかも。
0485デフォルトの名無しさん2009/03/11(水) 19:37:09
>>484
それだとクラス内に辞書を確保して、
setterとgetterをスロット操作のようにエミュレートするってことですね。
なるほど〜
ありがとうございます。

ところで、Gauche本やリファレンスを見てもMOPの使い方がいまいち分からないのですが、
MOPを使うとどのようなソースになるのでしょうか?
よかったら教えてください。
よろしくお願いします。
04864722009/03/11(水) 22:12:20
>>479
こういうライブラリがあるんですね、紹介ありがとうございます。
ただ、これだけのためにライブラリ入れるのも何なんで
もう少し難しい文字列処理が必要になったら入れることにします。

>>480
そうですね、確かに言われてみれば。
名前は変えることにします。
0487デフォルトの名無しさん2009/03/12(木) 01:34:42
コンビネータの勉強がしたいんですが
(expand S)とすると
(fun x (fun y (fun z ((x z) (y z)))))
が返ってくるような関数orマクロを作ろうとしたら
実質インタプリタを作るようなもんでしょうか?
もし楽な方法(特定の処理系の拡張機能etc)等があるのであれば知りたいです
0488デフォルトの名無しさん2009/03/12(木) 08:19:24
lispな方はバージョン管理は何を使ってますか?

git
svn
cvs
0489デフォルトの名無しさん2009/03/12(木) 08:23:19
>>488
darcs
0490デフォルトの名無しさん2009/03/12(木) 08:28:28
mercurial,
git
0491デフォルトの名無しさん2009/03/12(木) 09:14:18
Bazaar
0492デフォルトの名無しさん2009/03/12(木) 11:02:23
質問します。
組合せ問題、経路問題などの、記号処理問題をリストを使って解決するのに
相応しい言語を教えてください。
環境はできるだけ特定のOSに限定されない方が結構です。
グラフ表示は別の専門家が扱うのでロジック部分のみです。
04934922009/03/12(木) 11:15:29
すみません。誤爆です。"初心者のためのプログラミング言語ガイド Part14"に書き込む
つもりでした。直前にこのスレを確認していたのでpasteされたURLがここになって
いました。
このスレの方々は それはSchemeだ! っておしゃいますよねw
0494デフォルトの名無しさん2009/03/12(木) 11:16:25
cl-graph
boost::graph
0495デフォルトの名無しさん2009/03/12(木) 11:54:50
>>492
「リストを使って解決するのに相応しい」って、その質問がすでにLISPを想定しているとしか。その名も、LISt Processer。
昔は人工知能を書くために使われていたので、ターゲット分野的にもぴったり。

LISPをはずすなら、Haskellかなぁ。
ただ、Haskellはマルチバイト文字の処理周りが痛いらしい。
0496デフォルトの名無しさん2009/03/12(木) 12:03:13
>>485 Gauche特有の話だし、wilikiででも質問してみたら?
0497デフォルトの名無しさん2009/03/12(木) 16:25:52
ものまね鳥をまねる、14000円つけてるなw
今図書館で借りっぱなしで催促の電話が何度もかかってる。
忙しくて読めなかったんです。
この場を借りて予約入れてる人に謝るよ。
0498デフォルトの名無しさん2009/03/12(木) 16:33:29
lispのラーメンタイマーだよ
(require :pythononlisp)
(py::py "import noodletimer;noodletimer.noodletimer")
0499デフォルトの名無しさん2009/03/12(木) 16:43:28
QiはQiからlispよぶのは簡単なのに
Qiをdumpしてlispから呼ばせるにはコードいじれって書いてある
自動でできないものなんだろうか
0500デフォルトの名無しさん2009/03/14(土) 03:25:49
lispは、カッコばかりでみづらいとよく言われるけど
これは、慣れだね

生産効率性については、まだよくわからないけど
0501デフォルトの名無しさん2009/03/14(土) 05:23:24
入門者レベルなんですが、lambdaを使わないと書けないんでしょうか

練習問題 1

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

; 3 模範解答
(define (remove x ls)
(if (null? ls)
'()
(let ((h (car ls)))
((if (eqv? x h)
(lambda (y) y)
(lambda (y) (cons h y)))
(remove x (cdr ls))))))
0502デフォルトの名無しさん2009/03/14(土) 06:56:30
>>501

(define (remove x ls)
(cond
((eq? x (car ls)) (cdr ls))
(else (cons (car ls) (remove x (cdr ls))))))
05035022009/03/14(土) 08:50:42
Σ(゚д゚)

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

(define (remove x ls)
(cond
((null? ls) '())
((eq? x (car ls)) (remove x (cdr ls)))
(else (cons (car ls) (remove x (cdr ls))))))
0504デフォルトの名無しさん2009/03/14(土) 08:58:47
>>502
突っ込もうと思っていました
最初のは、(remove 5 '(1 2 3 2))でもコケますね

ヒントで実装までできました
ありがとうございました
0505デフォルトの名無しさん2009/03/14(土) 19:18:21
これ読んでいるとlispのほうが良さそうにみえるね
http://www.unixuser.org/~euske/doc/python/python-lisp-j.html
0506デフォルトの名無しさん2009/03/14(土) 20:54:29
Schemeでスタックを書こうとした場合
スタックのデータはグローバル変数に置くのが普通ですか?
出来たらクロージャとかに閉じ込めたいのですが
引数を2個にして1個目でpush/pop判断だとpopの時は引数が一つ無駄だし
個別にクロージャを使うと環境が別々になるし。

Gaucheのオブジェクト指向拡張とかだと綺麗にかけるんでしょうかね
他に思いつくのは、モジュールを作って
そこにスタック本体のデータを置くとかですが
どれが良いと思いますか
環境はGauche0.8.14です
0507デフォルトの名無しさん2009/03/14(土) 21:08:09
どれがって、consセルで作れば簡単じゃないかと
0508デフォルトの名無しさん2009/03/14(土) 21:21:08
(define top car)
(define pop cdr)
(define push cons)
じゃまずいですか?

0509デフォルトの名無しさん2009/03/14(土) 21:40:07
>>505
例外処理の項目の数値が未だに信じられない
0510デフォルトの名無しさん2009/03/14(土) 21:52:51
>>508
スタックをリストとして直接触らせたくないってことなんじゃね?

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

くわしく
なにと比べて?
効率って生産効率?
0512デフォルトの名無しさん2009/03/14(土) 22:06:56
>>506-508

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

オブジェト志向なら、
 a = stack.pop()
stack.push(b)
 …
とか書くわけジャン。
0513デフォルトの名無しさん2009/03/14(土) 22:14:32
>>511
速度とかメモリ効率とか。
メソッドのディスパッチも基本的には実行時にしか出来ないし。
どうでもいいけど、アンカ間違ってるぞ。

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

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

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

(define (pop stack-obj)
(stack-obj
(lambda(stack)
(if (null? (car stack))
'()
(let ((elem (car stack)))
(set-car! stack (cadr stack))
(set-cdr! stack (cddr stack))
elem)))))
0514デフォルトの名無しさん2009/03/14(土) 22:23:34
スタックはconsで実装するつもりだったし、
なんか話がかみ合わないと思ったら・・そういうことか、理解しました
自分がやりたかったのは510氏のいうような意味でして
ちょっと調べてたら可変長引数なる便利なものがあるってわかったので
これで実装出来ました。もう少し処理を追加したら自分の目的には使えそうな感じ

(define (stack)
(let1 val '()
(lambda a
(let-optionals*
a
((b 'none)(c '()))
(cond ((eq? b 'none) val)
((eq? b 'top) (if (eq? val '()) '() (car val)))
((eq? b 'push) (set! val (cons c val)) c)
((eq? b 'pop) (if (eq? val '()) '() (let1 r (car val) (set! val (cdr val)) r))))))))
(define a (stack))
(a 'push 1)
(a 'push 2)
(a 'push)
(a)
(a 'pop)
(a)
0515デフォルトの名無しさん2009/03/14(土) 22:43:02
>>513
(規制されてて書き込みのタイミングが悪かったのですが・・)
そういえば、Schemeのライブラリは、こういう形のほうが多いですね
参考にさせてもらいます
ありがとうございました
0516デフォルトの名無しさん2009/03/14(土) 23:03:47
最近のスタックインターフェースは、
top, pop, pushと三つに分けるのが主流だよ。
もはやイディオムになっているといっていい。
0517デフォルトの名無しさん2009/03/15(日) 00:08:39
;; クロージャに閉じ込める
(define (with-stack f)
(let ((stack '()))
(f
;; push
(lambda (obj) (set! stack (cons obj stack)))
;; pop
(lambda ()
(if (null? stack)
'()
(let ((obj (car stack))) (set! stack (cdr stack)) obj)))
;; top
(lambda () (if (null? stack) '() (car stack))))))

(with-stack
(lambda (push pop top)
(push 1) (push 2) (push 3)
(write (top)) (write (pop))
(write (top)) (write (pop))
(write (pop))
(write (pop))))
0518デフォルトの名無しさん2009/03/15(日) 00:10:58
topってなんや?
0519デフォルトの名無しさん2009/03/15(日) 00:11:52
解決
あとemptyっていうのも重要っぽいね
0520デフォルトの名無しさん2009/03/15(日) 02:34:25
[]も使うようにしたほうがいいの?

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

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

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

括弧の意味の多重化 (中段)
http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3aS%E5%BC%8F%E3%81%AE%E7%90%86%E7%94%B1
0521デフォルトの名無しさん2009/03/15(日) 03:12:22
どうせそんなのはppしたら消えてしまうでしょ。
意味がある試みとは思えない。
0522デフォルトの名無しさん2009/03/15(日) 03:32:55
つーかカッコが何種類も入り乱れるのは激しくウザい
0523デフォルトの名無しさん2009/03/15(日) 04:59:08
世間でC言語みたいなものが好まれるのは、
演算子を含む式と文とのバランスが良く、
メリハリが付くからだと思う。
LISPは書式が関数も式も文も全く同じ規則で
さらにそれを括る括弧に極端に縛られる。
C言語でも関数呼び出しだけで書いていけば
同じ印象になるが、C言語では関数のネストなんて
書こうと思わなければほとんどする必要がない。
要するに括弧の形を変えたところであまり効果はない。
S式ベースでうだうだ考えるよりは、括弧に縛られない
都合の良い構文フロントエンドを作った方がマシである。
0524デフォルトの名無しさん2009/03/15(日) 05:20:32
俺は好きでよく使っているけどなぁ。
処理系によっては()[]{}の3種類が使えるから、数学の式を書くときみたいな感覚で。
0525デフォルトの名無しさん2009/03/15(日) 05:34:48
・よく言われる演算子の有無
前置記法である事と関係する。
a.b.cは
(ref(ref a 'b)'c)
1  2    3

のような書き方になる。
見ての通り1を脳内スタックに積んで2を読み、
1を降ろして3と結合する、という思考を要求する。
また、aとb,cは同一に扱えない。
((ref a b c)とは書けず、何かしら歪になる)
演算子があれば
a.b.c
1 2 3
や
a().b().c()
1 2  3
どちらも1から3まで、左から右へと目を動かすだけで良い。
修正が発生しても一箇所で済む。
これはS式というより、前置記法では解決できない問題と認識している。
0526デフォルトの名無しさん2009/03/15(日) 05:46:04
前置記法を排除すればS式でも(a -> b -> c)と書ける。
ここで、aをマクロ的に加工して実装してしまう事も考えられる。
が、それが現実的ではない事も判っている。
自分で演算子を作り、管理するのと同じ事になる。
0527デフォルトの名無しさん2009/03/15(日) 05:58:26
また>>526の(a -> b -> c)のように、
S式内で独自言語を構築する場合、
独自言語の構文としての括弧もあるので、
S式のくくりの括弧がどうしても邪魔に見える。
ここまでやるならもうS式である意味がない。
a->b->cと書きたいならそのまま書けばいい。
0528デフォルトの名無しさん2009/03/15(日) 06:25:55
だから、どうせやるなら>>523に書いた通り、必要時にS式も扱えるような
ちゃんぽん言語でもLISPで作ったらどうかというわけ。
不毛な縛りの中で何かやるよりはよっぽど健全ではないかと思う。
S式はデータとしてならともかく、コードとして出てくる必然性はあまりない。

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

if (predicate(x)) { do-something(); do-something2(); }
else if (predicate(y)) { do-another-thing(); }
else { do-whatever(); }
0529デフォルトの名無しさん2009/03/15(日) 06:54:38
入門者なんですが、shchemeでS式以外の書き方の標準構文ってあるんでしょうか?

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

採用する理由になった論文の疑似コードもみてみたいところだが
0530デフォルトの名無しさん2009/03/15(日) 07:12:55
>>525
refが関数なら、(define ref* (lambda x (fold ref (car x) (cdr x))) で
(ref* a 'b 'c) って書けるんじゃない。
つか一般に二項演算子があるならfoldしてやりゃ不定長でも扱えるでしょ。
マクロならマクロでくるんでやればいいだろうし。
まあquoteは必要だけど、それは別の話だよね。
0531デフォルトの名無しさん2009/03/15(日) 07:43:20
>>529
昔の Lisp の論文とかには M 式ってあったね。
http://en.wikipedia.org/wiki/M-expression
Scheme の方だと SRFI 49 で I 式っていうのが提案されてる。
http://srfi.schemers.org/srfi-49/srfi-49.html
正規表現云々は知らないが、どっちもあまり流行ってない。
0532デフォルトの名無しさん2009/03/15(日) 10:10:46
そういえば、syntax が安定するまでは yacc を使って試行錯誤して
安定したら手書きの parser を使うという話を聞いたことがある。
lisper は逆に yacc より更に柔軟な方向に進もうとするのか。
0533デフォルトの名無しさん2009/03/15(日) 10:31:03
リードマクロがあるからね。
0534デフォルトの名無しさん2009/03/15(日) 11:54:13
>>528
マクロを忘れてるぜ。
コードがS式だからマクロ変換子は単なるリスト操作をすれば済むんだろう。
Scheme のマクロは単なるリスト操作じゃないけど、S式は大前提だ。
リーダーマクロにしたところで、内部的にはやっぱりS式だしな。
0535デフォルトの名無しさん2009/03/15(日) 12:13:45
リードマクロってキャラクタストリームベースじゃなかったっけ?
0536デフォルトの名無しさん2009/03/15(日) 21:58:23
; M-x run-scheme で下のコードをC-x C-eすると、最後に添付するエラーになってしまいます
(define (foo x)
(if (= x 0) '()
(cond ((= (modulo x 15) 0) (cons "FizzBuzz" (foo (- x 1))))
((= (modulo x 5) 0) (cons "Buzz" (foo (- x 1))))
((= (modulo x 3) 0) (cons "Fizz" (foo (- x 1))))
(else (cons x (foo (- x 1)))))))

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

エラー(長いので、一部略)
guile> ... ...
Display all 1922 possibilities? (y or n)
...
Display all 1922 possibilities? (y or n)
$abs
EISCONN
ERROR: Unbound variable: s
ABORT: (unbound-variable)
"Fizz"
0537デフォルトの名無しさん2009/03/15(日) 21:58:57
Backtrace:
In current input:
307: 0* [foo 3]
304: 1 (if (= x 0) (quote ()) ...)

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

Backtrace:
In current input:
308: 0* [foo 3]
0538デフォルトの名無しさん2009/03/15(日) 21:59:36

<unnamed port>:304:1: In procedure memoization in expression (if (= x 0) (quote ()) ...):
<unnamed port>:304:1: In line 303: Missing or extra expression in (if (= x 0) (quote ()) d ((= (modulo x 15) 0) (cons "FizzBuzz" (foo (- x 1)))) s "Buzz" (foo (- x 1))).
ABORT: (syntax-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:19: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:20: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:21: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:22: unexpected ")"
ABORT: (read-error)
ERROR: In procedure scm_lreadr:
ERROR: #<unknown port>:308:23: unexpected ")"
ABORT: (read-error)
guile>
0539デフォルトの名無しさん2009/03/15(日) 22:58:47
(print (foo 21)) or (write (foo 21))
トップレベルプリンタが同一オブジェクトを複数回出力しないだけの問題では?
0540デフォルトの名無しさん2009/03/16(月) 02:04:38
>>539
どういう意味ですか?
自分なりに解釈して、やってみたけど、ダメでした
0541デフォルトの名無しさん2009/03/16(月) 04:02:54
>>540
>>539 の言っているのは gosh の出力についてだね。
guile のエラーについては式が guile にちゃんと渡されてない感じがする。
プロンプトが複数回表示されてるあたり、
式が複数に分割されて渡されている形になってそうなんだけど。
gosh だと C-x C-e でちゃんと動いてるのかな。
0542デフォルトの名無しさん2009/03/16(月) 06:02:16
アドバイスをきっかけに解決しました
タブによるインデント構造をつくるとこのエラーになるみたいです
スペースに置換してみたら、通りました
おとといまでは、普通に使えていた気がしたので、謎です
特別な設定をしたとしたら、メニューバーのschme欄をちょっと触ったときなのかな
触ったあとに特別不都合は、なかった気がしたけど
>>541
> >>539 の言っているのは gosh の出力についてだね。
把握しました

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

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

気に掛けてくださったみなさま、お世話になりました
0543デフォルトの名無しさん2009/03/16(月) 07:18:20
ああそっちの問題か
readlineが悪さをしてる予感
emacsで使うときはactivate-readlineを無効にしたらどうでしょう
0544デフォルトの名無しさん2009/03/16(月) 09:56:12
>>543
本当だ
cat ~/.guile
(use-modules (ice-9 readline))
(activate-readline)
の設定を外したら、tabインデントでもC-x C-eが通るようになりました

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

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

guileのgaucheに対する利点:多くのOSでportやpackageが用意されている。リードマクロがある。親方GNU。
gaucheのguileに対する利点:速い。日本語のドキュメントが多い。マルチバイト文字がサポートされている。
0546デフォルトの名無しさん2009/03/16(月) 22:37:55
(activate-readline)を外すのが嫌だったので、とりあえず関数に割り当ててみました

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

cat ~/.guile
; first setting
(use-modules (ice-9 readline))
(define (a) (activate-readline))
; adding
(use-modules (ice-9 popen))
(use-modules (ice-9 rdelim))
(define date (read-line (open-input-pipe "date -R")))
(define pwd (read-line (open-input-pipe "pwd")))
(define echo-home (read-line (open-input-pipe "echo $PATH")))
0547デフォルトの名無しさん2009/03/16(月) 22:43:57
activate-readlineはemacsからrun-schemeで使うときは不要。っていうか邪魔。
(or (string=? "dumb" (getenv "TERM")) (activate-readline))
とか書けばいいんじゃないかな
(run-schemeのときは環境変数TERMがdumbに設定されるから)
0548デフォルトの名無しさん2009/03/16(月) 22:59:01
ああそれからactivate-readlineは起動後の任意の段階で評価できるから
.guileに書かないでおいて、シェルから直にguileを起動しただけ
手動で評価してもいい。
$ guile
guile> (activate-readline)
guile>

scheme、lisp関連の設定といっても自分は.emacsくらいですね。
ttp://karetta.jp/book-node/gauche-hacks/004682などを参考にするといいと思います。
0549デフォルトの名無しさん2009/03/16(月) 23:11:27
>>543
なるほど、readline が \t を食っちゃうのか。
知らないと意外とはまりそうだな。覚えておこう。
0550デフォルトの名無しさん2009/03/16(月) 23:26:15
逆に言えばreadlineでシンボル補完が効きます
0551デフォルトの名無しさん2009/03/17(火) 00:01:45
ドキュメントとデバッグ環境でGuileを選ぶってのも珍しい気がする。
そういう場合はPLTとかに行きそうなもんだけど。
0552デフォルトの名無しさん2009/03/17(火) 00:26:21
>>547
コンソール時
echo $TERM
linux

gnome-terminal時 
echo $TERM
xterm

emacs時 echo $TERM
emacs
なのに、なぜemacs時だけ(activate-readline)が実行されないの?
>>551
scheme処女なもんで4つのinfoがあるguileなのかなと思って
PLTは、存じませんでした
候補として考えたのは、Gauche, guile(, tiny scheme)の2つ(3つ)ですね
ちょっとした疑問なんですが、guileにあるhelp関数ってGaucheにもあるんでしょうか?
あと日本人のguile率って少ないんでしょうか?
SchemeでぐぐるとGaucheがいっぱいひっかかりますね
0553デフォルトの名無しさん2009/03/17(火) 00:47:53
Gaucheは高機能な上、日本人のShiro Kawaiさん作なので日本語のドキュメントがたくさんある。
guileはGNU標準でポータビリティは高いんだけど動作が遅くてスタックが(標準では)少ない。
入門用ならばR5RS規格に最も厳格にマッチしている上にguile以上のポータビリティがあるScheme48もお勧め。
自分はGauche>>guile>Scheme48の順に使ってます。
マクロの種類で言えば
Gauche:syntax-rulesマクロ、伝統的マクロ
guile:syntax-rulesマクロ、syntax-caseマクロ、伝統的マクロ、リードマクロ
Scheme48:syntax-rulesマクロ、明示的改名マクロ
なのでguileが最も充実してますが。
0554デフォルトの名無しさん2009/03/17(火) 04:34:29
>>552
gaucheにはhelp関数は無いけどinfo関数というのがある。
ただ、表示されるのが「その関数を含むinfoの1ページ」なのでちょっと面倒。
emacsから使ってるなら、カーソルのある関数のinfoエントリを一発で*info*バッファに
表示するelispが昔MLに流れたことがあった気がする。
0555デフォルトの名無しさん2009/03/17(火) 04:57:19
describeもaproposも使えるけど
なんだかんだでhyperspecとslimeが使いやすいやね
05565522009/03/17(火) 05:23:33
自己解決しました
コピペまんまだと、activate-readlineきいていました
"dumb"のところを"emacs"に変えればいいわけですね
当たり前と言えば、当たり前なんだけど

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

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

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

>>555
slimeって聞きますね
もうちょっとしたら、導入してみます
0557デフォルトの名無しさん2009/03/17(火) 08:05:53
あれ、run-schemeで起動したguileで
guile> (getenv "TERM")
"dumb"
ってなりませんでしたか?
guile> (getenv "TERM")
"emacs"
なら"dumb"を"emacs"でいいですけど…
0558デフォルトの名無しさん2009/03/17(火) 09:22:34
>>557
shellモードもrun-schemeモードも"emacs"と返りますね

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

基本的なlet, set, lambda関連の記述の仕方は、わかるんですが
ちょっと複雑になると理解しにくい・・・
0559デフォルトの名無しさん2009/03/17(火) 10:39:23
>SchemeでぐぐるとGaucheがいっぱいひっかかりますね
絶望した!横文字をウェブ全体から検索した結果に絶望した!
0560デフォルトの名無しさん2009/03/17(火) 13:28:37
infoで勉強する心意気は結構ですけど
先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。
わからない所はこことかに具体的にドシドシ書きこむと
さらに後に続く人の為にもなるでしょう。
0561デフォルトの名無しさん2009/03/17(火) 19:17:54
>>560
> infoで勉強する心意気は結構ですけど
> 先ずは>>216あたりのウェブページで勉強するほうが楽かもしれません。

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

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

英語圏の人は、infoだけで事足りるのか、プログラミング経験度を前提しているのかとか
0562デフォルトの名無しさん2009/03/17(火) 22:17:23
>infoだけで事足りるのか
そんな完璧な文書があると思うか?
あるわけねーだろ
完璧を目指すのはいいが少しずつ地道に改善していくしかない


ちなみに、アジャイルとかなんとか言われるようになる以前は
一発で完璧なものが作れると思ってる奴がたくさんいたとかいないとか
0563デフォルトの名無しさん2009/03/18(水) 02:46:26
>>562
完璧な文書だとは、思わないけど
十分な文書だと思うよ
0564デフォルトの名無しさん2009/03/18(水) 12:35:17
common lispの情報探そうとするとhatenaなどのblogにいきあたること多い
schemeは2chの過去スレが検索にかかることが多い

この違いは何?
0565デフォルトの名無しさん2009/03/18(水) 12:46:13
Googleの中の人に聞いて下さい。
0566デフォルトの名無しさん2009/03/18(水) 12:48:47
schemeしか知らないけど、lispでぐぐればいいんじゃない?
lisp --> common lisp
scheme --> scheme
という理解だけど
0567デフォルトの名無しさん2009/03/18(水) 12:48:51
&hl=en付けたら2chにもhatenaにもいきあたらないな
0568デフォルトの名無しさん2009/03/18(水) 13:00:54
>564
実用性があるか無いか、実アプリ開発に使ってるか否かの差だとオモ。
言い方を変えればSchemeは教育的効果は高いが…
0569デフォルトの名無しさん2009/03/18(水) 13:30:55
おっとBASICの悪口はそこまでだ
0570デフォルトの名無しさん2009/03/18(水) 15:54:36
schemeで、(car '())や(cdr '())の結果はどうなるんしょうか?
昔読んだLISPの本か何かでnilのcarやcdrはnilになるという
説明を見た気がするのですが、schemeにも当てはまるんでしょうか。
0571デフォルトの名無しさん2009/03/18(水) 16:04:13
r5rsでは空のリストにcar,cdrはエラーって定義されてるな
0572デフォルトの名無しさん2009/03/18(水) 16:05:36
R5RS 6.3.2
0573デフォルトの名無しさん2009/03/18(水) 16:06:31
r5rs-ja.pdfにありました。ありがとうございました。
0574デフォルトの名無しさん2009/03/18(水) 21:02:29
>>497
オレ、とある図書館でその本の順番待ちなんだが、
まさかオマエが止めてるのか?w
0575デフォルトの名無しさん2009/03/18(水) 22:54:43
なんだこいつ
0576デフォルトの名無しさん2009/03/18(水) 23:33:46
これをLIFOと言います
0577デフォルトの名無しさん2009/03/18(水) 23:59:26
後入れ中出しだっけ
0578デフォルトの名無しさん2009/03/19(木) 00:29:47
アッー!
0579デフォルトの名無しさん2009/03/19(木) 01:54:40
guile, gaucheよりelispのほうがデバッガが整備されているの?

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

C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか?
個人的にデバッガを使って、「ソースをよく読み、ときどき書き」というのをしたいんですが
0580デフォルトの名無しさん2009/03/19(木) 05:47:16
>>579
そのすぐ下に書いてある通りでは。
デバッガを使わずとも、replで個々の手続きを呼べるので、色々な入力を与えて出力を
見るかな。入力と出力の関係がすぐに把握できない(手続き内でステップ実行したいと思う)
ようであればたぶん手続きが(あなたにとって)大きすぎる。
0581デフォルトの名無しさん2009/03/19(木) 07:32:34
で、何のソースを読みたいの?
抽象論はもう飽きたよ
0582デフォルトの名無しさん2009/03/19(木) 08:30:31
>C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか?
そういえばあんまり追ったことないかも・・・スタックトレースが1000行と出ちゃうから。面倒なんでデバッガ使わなくなった。"Type (debug) to enter the debugger."とか出されても、もう無視(w
0583デフォルトの名無しさん2009/03/19(木) 08:34:34
>>580
処理系への絶対的な信頼性ってこと?
効率的なデバッグ術の個人の差ってかなり開きがありそうだね
>>581
日本語サイトのサンプルとか、とりあえず、デバッグツールで読みたいなあと思って

バグでハマって、解決はしたけど、ものすごく時間がかかった場合は
バグの見つけ方のポイントを教えてくださいね
0584デフォルトの名無しさん2009/03/19(木) 10:56:39
初心者ですけど

(define (f x)
(let ((a (hoge1 x))
(b (hoge2 a))
(c (hoge3 b))
(d (hoge4 c)))
d))

;; (f "なんちゃら")

みたいな書き方をしています。

Emacsで、最後のコメントアウト行でC-c C-eで評価。
思ったような主力がでないときは、最後のdをcとかbとかに書き換えて、その段階での出力をみます。

手続き型に毒されたやり方でしょうか?
0585デフォルトの名無しさん2009/03/19(木) 14:10:57
それをやるならlet*じゃないかね
0586デフォルトの名無しさん2009/03/19(木) 14:33:22
>>579
自分はC++でプログラム書く時も、
デバッガ使うのはcore dump(assert含む)した時くらい。
基本的にユニットテストやってる。
自分のことを全然信用してないから、
全自動で網羅的なチェックした方がよい。

もちろんテストコードの方が圧倒的に多いし、
assertも馬鹿みたいに書いてる。
コードを書いたらすぐにユニットテストも書いてるから、
何かテストしたい時には、デバッガ立ち上げて操作するより、
既存のユニットテストコードを基に新たに書く方が速いw

テスト、assertコードを書くのは設計の検討にもなってる。
設計をあらゆる角度から観察する必要があるから。
もちろんdtrace, profilerなんかも使いますが。
0587デフォルトの名無しさん2009/03/19(木) 14:36:15
>自分のことを全然信用してないから、
分かるわ〜
自分もいっつもデイジー・デイジー歌っちゃう
0588デフォルトの名無しさん2009/03/19(木) 15:46:53
そんなんじゃボーマンさんにスイッチ切られちゃうぞ。
0589デフォルトの名無しさん2009/03/19(木) 19:56:25
>>585
ご指摘のとおり、let* でした。
0590デフォルトの名無しさん2009/03/20(金) 21:57:53
そのテストツールの作り方の方針というか
みたいなものをまとめている本ってないでしょうか
0591デフォルトの名無しさん2009/03/20(金) 23:28:14
そのってどの?
0592デフォルトの名無しさん2009/03/20(金) 23:32:39
まずデバッガに依存するのをやめて徹底的に構造化プログラミングを意識するようにした方がいいんじゃね?
0593デフォルトの名無しさん2009/03/21(土) 00:24:13
具体的に何のコードをテストしたいのかを意識するべき。
そうでないと、ツールとか方針とかが正しいのか、そもそも必要なのかを検証できない。
0594デフォルトの名無しさん2009/03/21(土) 01:36:26
>>592
デバッガ使ってうまくいっている人は使えばいいと思うよ。
0595デフォルトの名無しさん2009/03/21(土) 01:53:44
デバッグのしやすさをよく考えて作ったほうがいいよ。つまり
手続っぽく作るのも可能だけど、なるべく関数のスタイルを身につけたほうが
効率的だよ。関数のスタイルをとるなら、デバッグはassertやtraceさえ出来れ
ば、大体なんとかなるし。いわゆるデバッガが必要なのは、関数がでかくって、
その中で手続的に処理が乱雑になっちゃうからなのでは?
0596デフォルトの名無しさん2009/03/21(土) 02:13:43
そもそもの話はコードの読み方じゃなかったっけ。
まあ、それはreplで関数叩いて入出力確かめろ、ですでに結論出てるな。
とは言え、じゃあひどいコードはどうやったら効率よく読めますか、
とか訊かれると、どうしたもんかね、となるが。
0597デフォルトの名無しさん2009/03/21(土) 21:43:54
本屋でO'reilly Gaucheをみかけて、軽く立ち読みしたけど
良さそうな感じだね
0598デフォルトの名無しさん2009/03/22(日) 08:10:07
>>590
処理系のソースに付いてくるテストコード読みなよ。
0599デフォルトの名無しさん2009/03/22(日) 20:33:23
>>597
新しいGauche本が出たのかと喜んでオライリーを覗きに行ったら
ふぬああ本のことだったのか…
0600デフォルトの名無しさん2009/03/22(日) 20:45:12
2133?
0601デフォルトの名無しさん2009/03/22(日) 20:57:45
フ ムフム
ヌ クヌク
ア プ
ア ア
0602デフォルトの名無しさん2009/03/22(日) 22:20:27
フムフムヌクヌクアプアア ♪

http://www.youtube.com/watch?v=ir38tIOQdT0
0603デフォルトの名無しさん2009/03/22(日) 22:27:25
すまんがカッコ付きで話してくれんか
0604デフォルトの名無しさん2009/03/23(月) 01:13:46
(+ (* フム 2) (* ヌク 2) アプアア)
0605デフォルトの名無しさん2009/03/23(月) 01:34:35
Syntax Error
0606デフォルトの名無しさん2009/03/23(月) 01:36:23
>>605
お前が閉じろよ。
0607デフォルトの名無しさん2009/03/23(月) 12:27:25
私のカギカッコは渚でしか見つけられませんでした。
0608デフォルトの名無しさん2009/03/23(月) 13:08:06
))) ←波
0609デフォルトの名無しさん2009/03/23(月) 21:44:13
))) ←こんなん見て人生おかしくならないか?
0610デフォルトの名無しさん2009/03/23(月) 22:04:11
>>609
おれのヘッドホンは
beyerdynamics))))
だよ。
0611デフォルトの名無しさん2009/03/23(月) 22:16:03
(((((((((((パナウェーブ)))))))))))
0612デフォルトの名無しさん2009/03/24(火) 03:00:39
Lisp使い初めてから人生おかしくなったとか損したなんて人は
今まで一人も見たことがないな。



その前に周りにLisp使える人が一人も居ないお(´;ω;`)
0613デフォルトの名無しさん2009/03/24(火) 03:03:56
損はしていないが、Lisp使えるだけでアレゲな現場に投入された経験はある。
周りが変態ばかりで困った記憶がある。
かくいう俺もド変態だ。どうだまいったか。
0614デフォルトの名無しさん2009/03/24(火) 05:11:32
アレゲってエロゲでAI作るとか?
0615デフォルトの名無しさん2009/03/24(火) 06:16:04
ぬるぽ
0616デフォルトの名無しさん2009/03/24(火) 09:07:38
LISPにNullPointerExceptionあるの?
0617デフォルトの名無しさん2009/03/24(火) 09:10:41
規格上はない。
補足してトップレベルに復帰する処理系はある。
0618デフォルトの名無しさん2009/03/24(火) 09:26:42
おお、安心しました。
0619デフォルトの名無しさん2009/03/24(火) 09:29:47
値が束縛されてないシンボルを参照したりすると出るエラーがぬるぽに相当するんでは?
0620デフォルトの名無しさん2009/03/24(火) 10:03:13
それはUNBOUND-VARIABLEだよね。
NILのCDR取るとか規格の範囲内で起きるものじゃなくて、
MEMREFなどの低レベルAPIや処理系バグで起きる、
*((char *)0)な話かと思ったが。
0621デフォルトの名無しさん2009/03/24(火) 19:13:24
>>574
謝ってるのにオマエとか言う奴には貸したくないな。
0622デフォルトの名無しさん2009/03/24(火) 19:58:32
いやいや、アナタの本じゃないし
読んでなくても一度返すのがスジですよ。
そして列の最後尾に並び直すのです。
(セドラーから5000円だか7000円だかで新古本を買った者より)
0623デフォルトの名無しさん2009/03/24(火) 20:32:59
筋というか、普通はそういう規則じゃないの。
予約を入れた人がいなくても
貸し出し期間内に図書館にいって延長手続き(借り直し)するものだと思うんだけど。
0624デフォルトの名無しさん2009/03/24(火) 22:53:18
>>622
へー新古品なんてあるところにはあるんだなあ。
ところで訳書を出してたとこってたしかオンデマンド印刷とかで
幾つか出してるし、これもそれで復刊してくれないかなあ。
0625デフォルトの名無しさん2009/03/24(火) 23:07:18
某大手書店の最後のディヴィグ本をゲットして喜んでたのに
いつの間にか増刷されてamazonでさえ普通に新本が手に入るようになってて涙目w
手習いとかものまねも復刊されるかもね
0626デフォルトの名無しさん2009/03/24(火) 23:15:26
>>625
ま、そんなこともあるさ。 どんまいどんまい。
0627デフォルトの名無しさん2009/03/24(火) 23:23:31
筋ってw
ヤクザやさんがこんなところに居るとはw
規則なんだから返すに決まってるでしょ。
あればね…

ていうか本なくしちゃったw
0628デフォルトの名無しさん2009/03/24(火) 23:30:41
>> 627
細かいこと気にするなって。買って返せば無問題♪
0629デフォルトの名無しさん2009/03/25(水) 01:11:21
>>621とか>>627とか、こういう奴がいるから、
図書館の中の人が苦労するんだろうな、と思った。
釣りならいいけど、素でその態度なら頭おかしいだろ。
0630デフォルトの名無しさん2009/03/25(水) 01:22:12
わざわざ言うことかw
0631デフォルトの名無しさん2009/03/25(水) 02:27:05
絶版Lisp本ではものまね鳥と竹内先生の本が読みたいな。
あとLisp以外ではPrologの技芸。ヤフオクみたら29500円とかwwwwww
オンデマンドで売ってくれくれ。
0632デフォルトの名無しさん2009/03/25(水) 02:44:01
Prologの技芸ってたまに名前を聞くんだが、そんなに偉大な本だったのか・・・・・
0633デフォルトの名無しさん2009/03/25(水) 02:49:05
Prologの技芸持ってるけど読んでないぜ
そんなプレミア付きとは知らなんだ
0634 ◆7y/z31W.Wg 2009/03/25(水) 02:55:24
>>633
よかったら読んだら売ってよ。1万なら買うよ。
0635デフォルトの名無しさん2009/03/25(水) 02:56:26
「Prologの技芸」はProlog版SICP。
SICPはアーキテクチャよりだけど、こっちは応用より。
内容グーで印刷ショボ。
0636 ◆7y/z31W.Wg 2009/03/25(水) 03:01:49
間違ったヤフオクじゃなくてアマゾンだった。> 29500円
0637デフォルトの名無しさん2009/03/25(水) 06:41:10
これって業者がつり上げてんの?ひどい値段だなぁ。
0638デフォルトの名無しさん2009/03/25(水) 09:28:43
>Prolog版SICP
なるほど
0639デフォルトの名無しさん2009/03/25(水) 11:06:13
the art of prologの和訳本だよね
0640デフォルトの名無しさん2009/03/25(水) 13:22:05
MITの教科書か。既に新しい版が出てるみたいだね。
0641デフォルトの名無しさん2009/03/25(水) 14:53:33
話ぶった切ってすまないけど、SchemeでProcessingみたいに
Arduinoを制御することができる処理系ってあるのかな?
GaucheとかPLTってどうなんだろ?
できればやりかた書いてあるリンク教えてください。
0642デフォルトの名無しさん2009/03/25(水) 15:20:28
>>641
chicken scheme + avr-gcc + avrdude
http://1010.co.uk/arduino.html#2
0643デフォルトの名無しさん2009/03/25(水) 15:55:03
一方ポールグレアムはクラウドを制御した
0644デフォルトの名無しさん2009/03/25(水) 16:08:31
crowdコンピューター?
0645デフォルトの名無しさん2009/03/25(水) 22:24:21
生きのこる術は大衆言語。
0646デフォルトの名無しさん2009/03/25(水) 23:02:14
だが気を付けたまえ。
0647デフォルトの名無しさん2009/03/26(木) 17:47:48
>>641
"Getting Started with Arduino"の6章"Talking to the Cloud"で
Proce55ingを使ってクラウド上のPhysical computingを制御してます。
実はRubyやPerlやPythonでも出来るので、
もしかしたらGaucheとかPLTでもできるかも・・・Arduinoはavrdude経由で操作するかと思いますが・・・
スクリプトでなければ>>642のようにavr-gccでArduino上のプログラムを
作成するのが良いでしょう。
そんな感じでクラウド側もPhysical computing側もSchemeは使えます。
といってもArduino上のというかAVR上のSchemeはまだないですね。
最近はメモリサイズが大分大きくなったようですが・・・
0648デフォルトの名無しさん2009/03/26(木) 18:55:27
>>647
>Arduino上のというかAVR上のSchemeはまだないですね。
つーかそもそもmegaの内蔵SRAM程度では厳しい。
外部コンパイルしてAVR上でVMを走らせる
みたいな使い方ならできるだろうけど。
マイコンでscheme動かすならアドレス空間大きめの
ものを選んだ方がいい。
0649デフォルトの名無しさん2009/03/27(金) 03:23:50
>>648
PICでSchemeが動いているw
0650デフォルトの名無しさん2009/03/27(金) 08:03:22
atmegaでも無理なのか
ならschemeからマシン語のコードを吐くコンパイラというのならどうかな
0651デフォルトの名無しさん2009/03/27(金) 22:10:45
ハーバードアーキテクチャだからフラッシュとSRAMの扱いが違うんだよね
フラッシュにオンタイムで書き込むにはブートローダもどきがいる
0652デフォルトの名無しさん2009/03/28(土) 15:07:29
Schemeじゃないけどこんなのはあるよ。
簡単なλ計算のインタプリタをArduinoで動かしてる。

Project LambdaCan: Lambda Calculus in a Can
http://alum.wpi.edu/~tfraser/Software/Arduino/lambdacan.html
0653デフォルトの名無しさん2009/03/28(土) 23:38:51
>>652
有り難う御座います。このスレでもλ計算の話は久しぶりですね。
とっても気に入りました。でも、素のλ計算はメモリを喰うので
この計算ぐらいが限界って例が書いてありますね。
簡約戦略がまずいとメモリオーバーしそうですねw
0654デフォルトの名無しさん2009/03/29(日) 23:38:06
関数型スレでスルーされてしまったのでコチラで聞いてみますが
lazy-kやunlambdaの式をλ式にしてくれる変換器ってないでしょうか
(もしあればCombinator Birdsのような式が直接計算出来るのが理想ですが)
というのも、W=C(BMR)=λab.bbb≠λab.abbな気がするので
検算してみたいんです。
後Combinator Birdsのページ、
W=SS(KI)がおそらく一番シンプルな答えですね
0655デフォルトの名無しさん2009/03/31(火) 19:23:24
なんか流れを止めてしまったみたいなので、654は撤回します
ごめんなさい
0656デフォルトの名無しさん2009/03/31(火) 21:39:56
過疎板の過疎スレで気にするような事じゃない
0657デフォルトの名無しさん2009/03/31(火) 22:13:21
>>655
いや、関係ないだろ

W=C(BMR)=λab.bbb≠λab.abbとW=SS(KI)ってどういう意味なの?
暗号にしかみえないw
0658デフォルトの名無しさん2009/03/31(火) 22:25:41
撤回するな!CLかSchemeで実装してみろ!
と焚きつけてみる
0659デフォルトの名無しさん2009/03/31(火) 22:53:00
良かった。それじゃせっかくなので解説してみます
λをlと表記すると
lab.abbってのは(lambda (a) (lambda (b) ((a b) b))と同じ意味(abbの部分は左結合)で、
これはWコンビネータのλ式の表現でもあります。
W=SS(KI)、つまり((S S) (KI))ってのは以下のS,Kを用いてWが表せますよ、という意味

;lxyz.xz(yz)
(define S (lambda (x) (lambda (y) (lambda (z) ((x z) (y z))))))
;lxy.x
(define K (lambda (x) (lambda (y) x)))
;lx.x
(define I (lambda (x) x))
(define turing-type-quine
(lambda (x)
(lambda (y)
(list y (list x
(list 'quote x)
(list 'quote y))))))
(define w (lambda (x) (lambda (y) ((x y) y))))
((((S S) (K I)) turing-type-quine) 2)
((w turing-type-quine) 2)

最後の2行は同じ結果になりますよね

Combinator Birdsでググるとトップに出てくるページには
この他にW=C(BMR)っていう定義が載っていて
これを簡約するとlab.bbbになるのではないか、というのが自分の疑問です。
というか、上のようなコードを書いて気づいたけど、
Scheme殿に計算してもらえば良かったわけだ
今から試してきます。気づかせてくれてさんきゅ
0660デフォルトの名無しさん2009/03/31(火) 23:03:17
(define C (lambda (x) (lambda (y) (lambda (z) ((x z) y)))))
(define B (lambda (x) (lambda (y) (lambda (z) (x (y z))))))
(define M (lambda (x) (x x)))
(define R (lambda (x) (lambda (y) (lambda (z) ((y z) x)))))
(define W (C ((B M) R)))
((W turing-type-quine) 2)

普通に出来た。
自分の計算ミスかー、ショック

ちなみにW=SS(KI)はこんな感じで計算できます。
lab.abb
=lab.(ab)b
=la.S(lb.ab)(lb.b)
=la.SaI
=la.(Sa)(KIa)
=S(la.Sa)(la.KIa)
=SS(KI)
0661デフォルトの名無しさん2009/04/01(水) 00:49:42
>>660
2割ぐらい理解したw
あとで再挑戦・再理解してみる
lambdaを3つ使うのを初めてみた
おれはlambdaを3つ使うコードを書くことがあるのだろうか

このロジック(表記法?)は、どういう用途で使えそうなの?
0662デフォルトの名無しさん2009/04/01(水) 07:02:04
意味はさっぱり分からんがラムダだらけで楽しそうだ
0663デフォルトの名無しさん2009/04/01(水) 09:24:12
>>661
オレ、660じゃないけど、べつに実用性とかじゃなくて最小の関数型言語の形のひとつ:
http://e.tir.jp/wiliki?%CB%DD%CC%F5%3A%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECLazy_K

0664デフォルトの名無しさん2009/04/01(水) 16:00:20
>>663
Thank you
知らない概念や処理系が、いっぱいあったけど
2割ぐらい理解した

感想は、うまく言葉にできない
0665デフォルトの名無しさん2009/04/01(水) 19:15:59
660ですが、ML系(たぶんHaskellも)の言語ではカリー化という機能があって
Schemeでいう以下の2つは同じ物として扱われる
 (lambda (x) (lambda (y) (lambda (z) ...
 (lambda (x y z) ...
3引数の関数なら書いたことあるでしょ?
そう考えたらそんなに複雑でもなく見えてくるかもね
0666デフォルトの名無しさん2009/04/01(水) 19:45:19
>>665
素朴な疑問なんですが
普段は、なんの言語を使っているんですか?
ちなみに自分はbash 5%, C/C++ 30%, gauche 10%, Python 30%, その他 25%
エディタはemacs?
差し支えなければ、教えてください
0667デフォルトの名無しさん2009/04/01(水) 20:23:21
聞かれていない自分も晒すと
gauche95%、sh3%、sed1%、C1%くらいだな。
1年半くらい前はsh70%、sed20%、C8%、(Scheme48+guile)2%くらいだったけど。

カリー化と可変長引数は両立がむずかしげでML系はカリー化を、Lisp系は可変長引数を取ったんだとおもう。
あとカリー化とthunkも相性が悪くて
正格評価のMLは、評価を遅延させる式を
():unitを受け取るなんちゃってthunkで実現してた気がする。
0668デフォルトの名無しさん2009/04/01(水) 20:42:54
>>667
gaucheを使っていて、不都合はないの?
他の言語を選ばずに、gaucheを選んだいくつかの理由ってなに?
lisp系じゃなくて、gaucheの理由も知りたいかも
06696602009/04/01(水) 20:57:38
Gauche使ってる時間が50%ぐらいで、
OCaml&F# 30% C++ 15% Perl 5%ぐらい
エディタはVC付属エディタとemacs/viです

ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
0670デフォルトの名無しさん2009/04/01(水) 21:04:07


500 :Classical名無しさん :09/04/01 20:55 ID:qtulE/8k
よろしくお願いします。

【URL】 http://pc12.2ch.net/test/read.cgi/tech/1231856193/
【名前欄】 660
【メール欄】 sage
【本文】↓
Gauche使ってる時間が50%ぐらいで、
OCaml&F# 30% C++ 15% Perl 5%ぐらい
エディタはVC付属エディタとemacs/viです

ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
06716672009/04/01(水) 21:20:19
>>668
自分のScheme処理系の変遷は
1.scm。多倍長整数が使いたくなる。
2.Gambit-C。SRFI周りがオレ様過ぎる。
3.MzScheme。非メジャーCPU、非メジャーOSへのポートに挫折。
4.Scheme48。本格的にSchemeを使い始めるが非保健的マクロが独自、SLIBのサポートがビミョー。
5.Guile。機能的にはほぼ文句はないが、遅い。そして重い。
6.Chicken。非メジャーCPUで最適化バグがあったような気がする。
7.Gauche。現状フリーR5RS処理系でベスト。非メジャーCPU、非メジャーOSへのポートも楽。
という感じです。
ドキュメントも豊富、高機能で軽くて高速、とくに正規表現周りはcl-ppcreよりも使いやすいのも◎。
いままでC+sed+shでやってたことをgaucheだけで置き換えられるようになったのがいいですね。
速度重視とかマルチスレッドバリバリなことをしなくなったということもありますが。
0672デフォルトの名無しさん2009/04/01(水) 22:52:45
SGIが倒産したらしい
0673デフォルトの名無しさん2009/04/01(水) 22:58:17
そうか、そうか
0674デフォルトの名無しさん2009/04/01(水) 23:00:18
lisp系は自作に限るよ
0675デフォルトの名無しさん2009/04/02(木) 03:41:44
LispスレでSGIといったら創価じゃなくて
シリコン・グラフィックの方だろJK
0676デフォルトの名無しさん2009/04/02(木) 03:47:31
2度目の倒産なんだって?
なんかLispに関して大きいことやってたっけ?
OpenGLぐらいしかシランわ。
0677デフォルトの名無しさん2009/04/02(木) 07:44:57
ずっと自作のSchemeモドキを使っています。モドキというのは、あまり
使わない機能を削って代わりに部分継続やソフトタイピングを入れたり
してるためです。それなりに高速でデバッグ機能も充実していると思って
いますが、RnRSやSRFIの類は全く考慮せず作っているので公開していま
せん。ドキュメント書くのもめんどくさいし(論文は書いたけど)。
0678デフォルトの名無しさん2009/04/02(木) 09:10:38
>>672
エイプリルフールだと思ってた…
0679デフォルトの名無しさん2009/04/02(木) 14:18:51
勘違いしたかも。
SGI(非創価)ってLisperが作った会社だと思ってました。
0680デフォルトの名無しさん2009/04/02(木) 14:20:30
lispでモナディウスなみの速度は出せるのだろうか
0681デフォルトの名無しさん2009/04/02(木) 16:33:15
>>679
ジムクラーク? Lisper ではないね。専門は CG らしい。
ワークステーション屋で Lisper が作った会社ってあったっけ?
Sun のビルジョイはハッカーだけど Lisper じゃないし。
0682デフォルトの名無しさん2009/04/02(木) 16:58:18
昔、N-Worldって、SGI (Indy?)向けの3D CG作成アプリなかった?
Lispマシンから移植されたものだったと思う。Lispで動いていたはず。
プロトタイピング強いから、いろいろな分野の初期大型アプリで使われてるね。
数式処理、ウィンドウシステム、プログラミング可能エディタなど。
CG関係も昔はもっと多かった。
0683デフォルトの名無しさん2009/04/02(木) 18:25:17
sgiといえば、インディゴだな。doomでネット対戦に使わせてもらったよ。
0684デフォルトの名無しさん2009/04/02(木) 19:27:02
sigは破産申請したらしいね
0685デフォルトの名無しさん2009/04/02(木) 20:34:16
CGはもうからないのか
0686デフォルトの名無しさん2009/04/02(木) 23:50:42
>>682
ニチメンなんとか、ってやつのことかな。Shiroさんが詳しそう
0687デフォルトの名無しさん2009/04/03(金) 00:37:30
前回の破産でCG方面からサーバー屋に商売変えしてたんじゃなかったっけ?
0688デフォルトの名無しさん2009/04/03(金) 00:39:09
なんかMIPSの灯がどんどん消えてく気がするなぁ…
0689デフォルトの名無しさん2009/04/03(金) 01:43:52
/.Jによると、どこだかに買収されるんで、それに必要な手続きなんだと。
0690デフォルトの名無しさん2009/04/03(金) 01:57:27
>>681
そうゆう名前で呼ばれてかかどうかはおいといて、MIT 由来の
LISP マシンってワークステーション以外のなのものでもないが…
0691デフォルトの名無しさん2009/04/03(金) 02:28:13
>>685
技術の発展とともに、作業端末は高価なUNIXワークステーションではなく
安価なWindowsマシンが優位になり、未開の領域に強く柔軟なLispから
高速で大規模なプログラムに強い? C++に置き換わったとかじゃないの。
06926812009/04/03(金) 09:54:17
>>690
あーそうね。シンボリクスとかがそうか。
Unixワークステーション屋で、と言うべきだったかな。
0693デフォルトの名無しさん2009/04/03(金) 11:16:16
carやcdrがちゃんと理解できん・・・
アセンブラの方が簡単かも。
0694デフォルトの名無しさん2009/04/03(金) 12:14:13
そんなに難しいかな?

単方向リンクリストの、先頭を取り出すか、それ以外を取り出すか、
だけなんだが。
0695デフォルトの名無しさん2009/04/03(金) 12:16:17
括弧とドットの表記法でつまづくか、ポインタでつまづくかのどっちかですよねー
0696デフォルトの名無しさん2009/04/03(金) 12:42:44
carは左って覚えれば良いと思うよ
0697デフォルトの名無しさん2009/04/03(金) 12:48:44
>>693
コンスは単なる2つのポインタの対
Lispよりも低レベルではcarとcdrは可換で線形リストとは何の関係もない
線形リストに利用しているのはLispより高レベルだけの話
アセンブラ的に考えればこう
0698デフォルトの名無しさん2009/04/03(金) 13:05:28
まずボックス表記を手で書いて
それからいろんな構造をconsだけで組み立てる
ドット対→線形単リスト→2分木みたいに徐々に複雑にしていくといい
0699デフォルトの名無しさん2009/04/03(金) 13:14:01
Common Lisp: A Gentle Introduction to Symbolic Computation 付録の sdraw 使うと図示してくれる

CL-USER> (sdraw '(1 2 3 (4 5)))

[*|*]--->[*|*]--->[*|*]--->[*|*]--->NIL
|      |      |      |
v     v     v     v
1     2     3     [*|*]--->[*|*]--->NIL
                  |     |
                  v     v
                  4     5

http://www.cs.cmu.edu/~dst/Lisp/sdraw/
0700デフォルトの名無しさん2009/04/03(金) 13:17:57
ちゃんと理解できないったって(と)の対応はわかりますよね?
Lispのリスト記法はドット記法の構文糖
任意のリスト記法はドット記法で表せる(逆は偽)
ドット記法の基本は( A . B )でホワイトスペース+ドット+ホワイトスペースがcarとcdrの間の仕切り
(開き/閉じ括弧の周りはホワイトスペースの省略可)
そしてドット記法を(A B C)みたいなに直すのは
ドット+開き括弧を見つけたら、それと、それに対応する閉じ括弧を消しゴムで消すだけ
0701デフォルトの名無しさん2009/04/03(金) 13:22:22
( A . B ) ≡ [ A | B ]
0702デフォルトの名無しさん2009/04/03(金) 14:15:16
(cons 'a 'b) => (a . b)
(cons 'a (cons 'b '())) => (a b)
'(a . (b . (c . ()))) => (a b c)
0703デフォルトの名無しさん2009/04/03(金) 14:22:09
'とかquoteが絡んでくると解りづらくなるから
任意のアルファベット1文字のシンボルと空リストは自己評価的という設定にしよう
(cons A B) => (A . B) ;; [ A | B ]
(cons A ()) => (A . ()) ≡ (A) ;; [ A | NIL ]
(cons (cons A B) ()) => ((A . B) . ()) ≡ ((A . B)) ;; [ [ A | B ] | NIL ]
(cons () (cons A ())) => (() . (A . ())) ≡ (() A) ;; [ NIL | [ A | NIL ] ]
(cons A (cons B C)) => (A . (B . C)) ≡ (A B . C) ;; [ A | [ B | C ] ]
0704デフォルトの名無しさん2009/04/03(金) 14:24:40
lispのリストはヘテロジニアスリストでさらにペアにもなるから難しいよな
ML系みたいにリストは空か値とリストを持つコンスって定義だとまだわかりやすいのに
0705デフォルトの名無しさん2009/04/03(金) 15:27:28
分かりにくくないだろw
0706デフォルトの名無しさん2009/04/03(金) 15:48:41
ふと思ったんですけど
効率の為にlistではなくvectorを使っているアルゴリズムって
静的にコンパイル+破壊的代入なしって条件なら
プログラマにはlistとして見せつつ
内部的にはvectorとして処理できませんかね?
たとえば(list 1 2 3 4 5)は
表面的にはコンスによる線形リストなんだけど内部的には#(1 2 3 4 5)であるオブジェクトを返すとか。
書き換えられない事が解っているn要素の線形リストは2ワードのセルをn個アロケートするより
nワード+αのベクタで記憶するほうがよさそう。
Haskellが文字列をリストとして実装してるのはそんな理由だったりするのでしょうか?
0707デフォルトの名無しさん2009/04/03(金) 15:50:16
それは「cdr coding」と呼ばれるもので散々実験済み。
0708デフォルトの名無しさん2009/04/03(金) 15:52:55
書き込んでから気づいたけど、
部分リストを複数オブジェクトで共有している場合
先頭部分の参照がはずれてもGCで回収できなくて逆に効率が悪くなりますね。
ベクタの最初の方だけGCできる方法を取れば別ですけど
そうするとベクタの情報が増えて結局コンスと大差なくなるかも
0709デフォルトの名無しさん2009/04/03(金) 16:14:39
>>707
おや、そうでしたか。不勉強でした。
見た所、線形リストを少しでも効率よく処理する為の物の様で
ベクタを置き換えるには至らなかったようですね。
0710デフォルトの名無しさん2009/04/03(金) 16:35:18
vector的利用がはっきりしているところでは、
vectorを使えばいいしね。
listで構造体を模倣してprototypingしても、
accessor使っておけば簡単に移行できるし。
0711デフォルトの名無しさん2009/04/03(金) 17:59:01
evalと大域変数でhashを模倣する初心者を見てニヤニヤするんですよねー
0712デフォルトの名無しさん2009/04/03(金) 18:02:44
それは君だけ。
0713デフォルトの名無しさん2009/04/03(金) 22:15:13
やべえ、サボってたらSeasoned Schemerわかんねえw
また後戻りか…英語もやってないし… λ.......
0714デフォルトの名無しさん2009/04/04(土) 10:17:19
関数型言語を勉強してる人が増えるのは喜ばしいことだけど
初心者が初心者に教えてる姿は危なっかしくて思わず突っ込みたくなる。
話を聞いてると、初心者にはカリー化が珍しいのか興味を示していた。
ただ、もうそろそろこのうざい雰囲気がなくなればいいのにと切に願う。さっさと成長しろ。
0715デフォルトの名無しさん2009/04/04(土) 10:22:12
初心者は永遠に居なくならない時点でずっとそのままうざい雰囲気のままだと思うが?
0716デフォルトの名無しさん2009/04/04(土) 10:54:12
先達はあらまほしきことなり

なぜそう邪険に扱う。教え導くのも初学者を脱した人の使命でしょ。
0717デフォルトの名無しさん2009/04/04(土) 11:06:50
雰囲気の濃度を薄めればいいのだが、溶媒がどんどん蒸発してる。

ドライクリーニングは危ないから誰もやらない。
0718デフォルトの名無しさん2009/04/04(土) 11:54:04
>>714
成長しろってどのくらいのレベルになればいいんだ?
下のサイトで言うどのレベルよ

Scheme:Schemeプログラマのレベル10
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
0719デフォルトの名無しさん2009/04/04(土) 12:28:21
>>716
その通り。邪険にすれば衰退しかありえない。
0720デフォルトの名無しさん2009/04/04(土) 13:09:49
>>714のように背伸びしたい初心者もかわいらしいじゃないか
0721デフォルトの名無しさん2009/04/04(土) 13:26:52
自覚している初心者と自覚していない初心者しかいないじゃないか
0722デフォルトの名無しさん2009/04/04(土) 14:33:24
せっかく勉強になる流れになりつつあったのに元に戻ってしまったかwww
0723デフォルトの名無しさん2009/04/04(土) 14:39:42
いや、正直うざかった
0724デフォルトの名無しさん2009/04/04(土) 14:47:51
で何の話がしたかったの?
0725デフォルトの名無しさん2009/04/04(土) 15:01:47
他人の事をうざいと言いたいだけだろ。そういう奴居るよね。
0726デフォルトの名無しさん2009/04/04(土) 15:36:31
じゃあ漏れが話ふる。
SICPスレでLispからPythonへの移行の話が出てる。
どうして私は信仰を捨てたか、という文章が興味深かった。
こんな話。
↓
自分はApple II時代からのLisperで
Lispで開発してきてほかの言語を使う人に実質負けたことがなかった。
Lispは圧倒的に効率がよいから。
でもなぜかLispユーザーが少ないのはどうしてなんだぜ?
Lisp求人無いのは何故なんだよな?
Googleに入ってみたら特にLispが開発効率良いってものでもなかった。
だからそれまで持っていたLisp信仰を捨てた。
Novicも今はPython使ってる。
0727デフォルトの名無しさん2009/04/04(土) 15:54:33
捨てた過程はわかったが、直接の原因がさっぱりわからん。
0728デフォルトの名無しさん2009/04/04(土) 16:02:32
Lisp「だけ」、ってのにそれほど拘る必要性も感じないが。
0729デフォルトの名無しさん2009/04/04(土) 16:11:09
How I lost my faith - ウヰキエリア
http://web.archive.org/web/20060621010832/www.gembook.jp/tsum/page.pys?wiki=How+I+lost+my+faith
0730デフォルトの名無しさん2009/04/04(土) 16:58:47
> Lispで財をなしたのはPaul Grahamだけ
0731デフォルトの名無しさん2009/04/04(土) 17:11:31
Lispを捨てたのは仕方ないとして
PerlにもC#にもなりきれないPythonでは、問題を先送りにしただけじゃないか
0732デフォルトの名無しさん2009/04/04(土) 17:26:23
lispを知ってると知らないではプログラミングの発想は全然違ってくるよ。
捨てようが捨てまいがそれはどうでもいいけど、その心の影響は消えないからね。
簡単に言えば、手続型ばかりやってると関数ポインタみたいなことに到達するのは
時間がかかるけど、lispはそんなもの最初にやるからね。
map的発想ってのもそうだな。最初に付き合うかどうかって違いが実は大きい。
0733デフォルトの名無しさん2009/04/04(土) 17:29:08
プログラミングに必要な抽象化の道具が最初からそろってるものと、目先のことを解くだけの
道具だけが最初にないかの違いでもある。
pythonやrubyもlisp的な観点で教えたほうが幅が広いとおもうが、どうもjava屋とかC/C++屋的
な発想でやっちゃうよな。あれははっきりいうけど愚かだと思ってるね。
0734デフォルトの名無しさん2009/04/04(土) 17:32:24
Cやってないからよくわからないんですが
よく初心者にポインタが難しいって聞きます。
Lispやっていれば将来Cのポインタもすんなり理解できるということですか?
0735デフォルトの名無しさん2009/04/04(土) 17:33:53
また古いのをもってきたな。その文章書いたErann Gat(今はRon Garretに名前かわってる)は信仰を捨てたんであって、
Lispを捨てたわけじゃないぞ。Pythonも生産的だと認めて使うようになった、というのが正しい。
0736デフォルトの名無しさん2009/04/04(土) 17:43:41
mapやfoldならhaskellの方が簡単だし
関数型プログラミングとしてしか使わないならlispなんて要らない
0737デフォルトの名無しさん2009/04/04(土) 17:45:03
Cのポインタが難しいと言われるのは、
「これは難しいよ〜」と言われて紹介されるのが被害を助長させてると思う。

理解して無くてもなんとかなる。
0738デフォルトの名無しさん2009/04/04(土) 17:45:35
少なくともあわてて複数の人が言い訳しなくてはならないような程度ってことね、Lispって。
0739デフォルトの名無しさん2009/04/04(土) 18:00:08
Haskellのモナドが難しいと言われるのは、
「これは難しいよ〜」と言われて紹介されるのが被害を助長させてると思う。

理解して無くてもなんとかなる。
0740デフォルトの名無しさん2009/04/04(土) 18:04:58
emacsが使いたくて、schemeを勉強しているだけだな
昔からある言語なんだし、後発言語はlispの影響を受けているわけで
優位差というものは、ほとんどないでしょ
0741デフォルトの名無しさん2009/04/04(土) 18:11:01
emacs使いたいならschemeよりもclispだし、clispよりもelispを学ぶべきだろw
0742デフォルトの名無しさん2009/04/04(土) 18:13:24
お前ら変なフラグを立てるなよ
「Pythonで財をなしたのはGoogleだけ」なんてことになったら目も当てられない
0743デフォルトの名無しさん2009/04/04(土) 18:30:44
いっぽうSunはJavaを開発した
0744デフォルトの名無しさん2009/04/04(土) 18:38:13
SunがCommon Lispに力を入れないのはどうしてなんだろう。
0745デフォルトの名無しさん2009/04/04(土) 18:49:03
>>744
力を入れても収益になる見込みが低いからじゃね?
企業なんてそんなもんだ。
0746デフォルトの名無しさん2009/04/04(土) 19:06:13
Sunは昔、Symbolic Programming Environmentってのを出していた。
LispView(OpenViewのCLOSバインディング)は面白かった。
まあ儲からないものを続けるわけにはいかない。
0747デフォルトの名無しさん2009/04/04(土) 19:06:15
JavaをもってしてもSunは身売りしなくてはならないわけだし。
0748デフォルトの名無しさん2009/04/04(土) 19:27:32
lispのコードが出てこなくなると話が弾むな。
0749デフォルトの名無しさん2009/04/04(土) 19:34:11
お前はそんなレスばっかりだなw
0750デフォルトの名無しさん2009/04/04(土) 20:56:09
初心者スレに何期待してんだ
0751デフォルトの名無しさん2009/04/05(日) 01:54:44
(gc) ; ゴミレスをガーベージコレクション
0752デフォルトの名無しさん2009/04/05(日) 02:00:09
>>751
未実装です。次期バージョンにご期待ください。
0753デフォルトの名無しさん2009/04/05(日) 03:15:08
pythonの方が便利
マクロを使いこなせれば違うのだろうか
0754デフォルトの名無しさん2009/04/05(日) 03:25:57
そういうどっちが便利みたいな話はよそでやれよ。
0755デフォルトの名無しさん2009/04/05(日) 03:48:18
その手の話用っぽいスレもあるしね。
0756デフォルトの名無しさん2009/04/05(日) 06:16:50
いや ホントに便利なんだって
0757デフォルトの名無しさん2009/04/05(日) 06:18:33
そうだね、でもここはLispのスレだからPythonはスレ違いなの、ばいばい
0758デフォルトの名無しさん2009/04/05(日) 09:12:20
宝石の名前の言語だけは使うな
ってばっちゃが言ってた
0759デフォルトの名無しさん2009/04/05(日) 11:09:48
ほんとどうでもいい話だが花とか植物の名前つけたlisp方言ってないもんかね。
0760デフォルトの名無しさん2009/04/05(日) 12:08:02
関数型言語学びたいんだけどHaskellとSchemeどっちがいいかな?
0761デフォルトの名無しさん2009/04/05(日) 12:11:33
>>760
それをこのスレで聞くの?
純粋な関数型言語をやりたいなら、Haskellでもやっとけばいいじゃない。
0762デフォルトの名無しさん2009/04/05(日) 12:21:57
>>760
無理せず、両方やればよいと思う。
まぁ、>>761のいうように、「これぞ関数型言語」というのがやりたいのならHaskellじゃね?
0763デフォルトの名無しさん2009/04/05(日) 12:44:59
まずSchemeで型無しλ計算のイメージをつかむのが先決。
0764デフォルトの名無しさん2009/04/05(日) 12:49:16
>>761-763
お答えありがとうございます。
純粋関数型言語にこだわりはないのでとりあえずScheme触ってみます。
0765デフォルトの名無しさん2009/04/05(日) 13:59:43
>>763というフリがあったので、質問です
lambdaで下のプログラミングってどうやって書くの?
再帰的には使えないんだよね?

;1からnまでの和を計算する
;とりあえず、n = 50とする
(define (foo x)
(if (= x 1)
1
(+ x (foo (- x 1)))))
; これはなしで
(define (foo x)
(/ (* x (+ x 1)) 2))
(foo 50)
0766デフォルトの名無しさん2009/04/05(日) 14:07:40
((lambda (f) (f f 50)) (lambda (f x) (if (= x 1) 1 (+ x (f f (- x 1))))))
0767デフォルトの名無しさん2009/04/05(日) 14:41:30
これをMLやhaskellで定義するとどういう形になる?
0768デフォルトの名無しさん2009/04/05(日) 14:46:22
あ、多分そのままだと型推論失敗するんだと思うけど
書くとしたらどうなるのかなと
0769デフォルトの名無しさん2009/04/05(日) 15:12:04
>>766
fが重複していて、なんなのか、よくわからなかったけど
((lambda (like-func-a)
(like-func-a like-func-a 50))
(lambda (like-func-b x)
(if (= x 1)
1
(+ x (like-func-b like-func-b (- x 1))))))
こうすると多少、みやすくなるのかな?
このコードをdefineに置き換えて、できるだけで忠実に書くとどうなるの?
0770デフォルトの名無しさん2009/04/05(日) 18:07:09
数式処理と数値計算の混合をしたいです
haskellとlispのどっちがお勧めでしょうか
0771デフォルトの名無しさん2009/04/05(日) 19:56:40
>>770
maximaが何で作られているか調べてみ。 そしたら結論でるよ。
haskellに数式処理の簡単に扱えるライブラリがあればそっちのほうが
数式に馴染みやすい扱いができる。
lispで数値計算をするときは、最適化するために、型宣言のことやプロファイラを
あつかってボトルネックを潰して行っくって作業なしでは難しいかも。型宣言や
最適化の工夫はグレアムおじちゃんのANSI common lispをお勧めしとく。on lisp
じゃないよ。
maximaからlispは直接操作も可能だしあなたがやりたいことは実力さえつければ
可能です。
0772デフォルトの名無しさん2009/04/05(日) 20:00:41
いちおうね。maximaには数値計算が出来るライブラリは幾つかあるから、
速さは保証しないけどね。lispでかかれたかなり癖のあるコードだがlapack
まで一応ついてる
0773デフォルトの名無しさん2009/04/05(日) 20:06:00
両方覚えて用途毎に使い分けるのがオススメだ
0774デフォルトの名無しさん2009/04/05(日) 20:22:22
誰か判りませんか>>766-768
0775デフォルトの名無しさん2009/04/05(日) 20:59:57
>>774
なんでそんなこと知りたいのか知らんけど、
Haskell にベタ移植するとこんな感じじゃね

(\f -> f f 50)(\f x -> if x==1 then 1 else (x+f f (x-1)))

もちろん型推論には失敗する。

cannot construct the infinite type: a = a -> t -> b
0776デフォルトの名無しさん2009/04/05(日) 21:37:25
ぐぐったらMLとかだと型推論通すにはこれ相当になるみたいです
(letrec ((y (lambda (f) (lambda(x) ((f (y f)) x)))))
((y (lambda (f) (lambda (x) (if (= x 1) 1 (+ x (f (- x 1))))))) 50))
=>1275
0777デフォルトの名無しさん2009/04/05(日) 21:40:00
ところで、↑letrecのyは「lambdaで定義する」という問題からしたら
反則な気がしますが、letrecをlambdaだけで定義できるでしょうか?
0778デフォルトの名無しさん2009/04/05(日) 21:51:03
当然set!を使わず、かつ型推論が通るような形で。
前者はともかく、後者を満たすのは無理っぽいと考えてます
0779デフォルトの名無しさん2009/04/05(日) 21:52:43
>>777
> letrecをlambdaだけで定義できるでしょうか?

無理。 set! とかも必要。
0780デフォルトの名無しさん2009/04/05(日) 21:57:47
R5RSで提案されているletrecの実装方法がset!を使っているだけであって
多変数相互再帰はlambdaだけで書けるからletrecもlambdaだけでできる
過去スレにあったと思う。
もっともMLの型推論を通せるかどうかはしりません。
自分が読んだ本には、型付きラムダ計算ではfixという演算子を導入すると書いてあった。
0781デフォルトの名無しさん2009/04/05(日) 22:04:51
>>776 で定義している y はまさに fix の一種だよ
0782デフォルトの名無しさん2009/04/05(日) 22:08:41
ですよね・・
昔そのfix云々を見てMLの限界を感じたので
この程度ならLISPに後付けで型推論つけても同じなんだと
引数が面倒ですが
07837652009/04/05(日) 22:17:09
lambdaの使い方の勉強したいだけなんだけど
レベル高い話になり過ぎてますよ
(like-func-a like-func-a 50)と(like-func-b like-func-b (- x 1))がわからないんですけど
(lambda (like-func-a)
(like-func-a like-func-a 50))って何よ?
765の問題をlambdaで再帰的に書くには、こう書くみたいに覚えるしかないの?
0784デフォルトの名無しさん2009/04/05(日) 22:17:48
再帰する時って再帰したい関数に名前をつけなきゃならない。

f 1 = 1
f x = x+f (x-1)
main = print $ f 50

fix (ここではyオペレータ) があれば define や let 類が無くても再帰できるぜー

y f x = f (y f) x
main = print $ y (\f x -> if x==1 then 1 else x+f (x-1)) 50

というのが fix 。
0785デフォルトの名無しさん2009/04/05(日) 22:27:45
>>783
λ計算でオブジェクトに名前をつける唯一の方法は、引数にすること。
なので、自分自身を引数にするのです。
0786デフォルトの名無しさん2009/04/05(日) 22:49:44
>>783
>>766を分解すると
(1) (lambda (f) (f f 50))
(2) (lambda (f x) (if (= x 1) 1 (+ x (f f (- x 1)))))

(1)は引数を1つとる関数で、その引数を「引数を2つ取る関数」
と見なし呼び出す。呼び出す際、引数にそれ自身も渡す。
(1)は一度読んだら役割を終えるので、
(1)の呼び出しは(2)のための初期化に相当する。
(2)は渡された自身を使って再帰ができる。
0787デフォルトの名無しさん2009/04/05(日) 23:35:13
>>774が失敗する原因は推論順序に関係するらしいので
((lambda (f) (f ((lambda (x) x) f) 50))
(lambda (f x) (if (= x 1) 1 (+ x (f ((lambda (x) x) f) (- x 1))))))
のような形にすれば通るっぽい
0788デフォルトの名無しさん2009/04/06(月) 00:38:35
>>786
役割を終えるというのと初期化に相当するというのがよくわからない
>>787
> ((lambda (f) (f ((lambda (x) x) f) 50))
> (lambda (f x) (if (= x 1) 1 (+ x (f ((lambda (x) x) f) (- x 1))))))
ちょっとわかりやすくなったかも
複雑になったとも言えるけど

((lambda (x) (+ x x)) 5) => 10 ;理解できる
((lambda (x) x) "ab") => "ab" ;理解できる
(string? ((lambda (x) x) "ab")) => #t ;理解できる
((lambda (x) x) 5) => 5 ;理解できる
(integer? ((lambda (x) x) 5)) => #t ;理解できる
((lambda x x) 5) => (5)
(list? ((lambda x x) 5)) => #t ;理解できる
((lambda x x x x) 5) => (5)
((lambda (x) x x) 5) => 5
((lambda x 2) 5) => 2 ;理解できる
((lambda) 5) => error

みたいにチマチマlambdaについて理解しようとしているんだけど
理解できるようになるのかなw
0789デフォルトの名無しさん2009/04/06(月) 00:44:27
>>785
((lambda (f) (f f)) (lambda (g) (display "called!\n")(g g)))

無限末尾再帰だから評価するには注意が必要だけど、これなら少し分かりやすいかな。

(f f)は、fを引数にしてfを呼び出している。
一番目のfは関数呼び出し、二番目のfはその呼び出しへの引数。

(g g)は、gを引数にしてgを呼び出している。
一番目のgは関数呼び出し、二番目のgはその呼び出しへの引数。


評価してみて、なぜそういう動作をするのか、考えてみて。
(lambda (g) (display "called!\n")(g g)) を無限末尾再帰にするためには、gに何を渡せばよい?


答えは、「(lambda (g) (display "called!\n")(g g)) に、それと同じ (lambda (g) (display "called!\n")(g g)) を渡す」。
単純な答えすぎて騙されているみたいだけど、そうとしか考えられない。

で、その答え「(lambda (g) (display "called!\n")(g g)) に、それと同じ (lambda (g) (display "called!\n")(g g)) を渡す」をやっているのが、(f f)の部分。
07907892009/04/06(月) 00:45:24
>>785じゃねーや、>>783。
0791デフォルトの名無しさん2009/04/06(月) 06:36:11
>推論順序に関係するらしい

>騙されているみたいだけど、そうとしか考えられない
0792デフォルトの名無しさん2009/04/06(月) 07:14:22
>>787 がどうしてもちゃんと通るHaskellのコードが見たいってんなら
let fix f = f (fix f)
let arithProgSum n = fix (\f -> \x -> \y -> \z -> if x == y then z else f x (1 + y) (1 + y + z)) n 0 0
と書けば
arithProgSum 3 == 6, arithProgSum 4 == 10, ...

もうスレチはこれで終わりにしようぜ。ヤレヤレ。
07937922009/04/06(月) 07:39:50
よく考えたら
let arithProgSum n = fix (\f -> \x -> \y -> if x == 0 then y else f (x - 1) (x + y)) n 0
でいいね。スマソ
0794デフォルトの名無しさん2009/04/06(月) 17:17:51
SchemeかCommon Lispか勉強してみたいんですが、どちらから入るのがおすすめでしょうか?
とりあえずC/C++で書いたGUIプログラムの下請けとして呼び出すリスト処理部分に使いたいと考えていますが、将来的にはGUI部分もSchemeあるいはCommon Lispで書いてみたいです。

自分で考えてみた限りでは、
・多言語との相性もある程度よいが、必要なものは全部自分で作らないといけないScheme
・最初から最後まで自己完結するCommon Lisp。他の言語の下請けにはなりにくい。
という印象です。

関数型言語を勉強するのにはSchemeがいいけれど、Common Lispじゃないと色々とめんどくさいのかな、という気がします。
そこで本題なんですが、Schemeをあるていど勉強したあとにCommon Lispへ移行(もしくはその逆)するのは、どの程度のハードルがあるのでしょうか。
(defineをdefunに直せば同じソースコードが通るほどに似ているのか、まったく別物だと思って勉強した方がいいのか、というようなことなのですが・・・)

長文失礼しました。
0795デフォルトの名無しさん2009/04/06(月) 17:28:39
便乗質問として、schme, lispをやるなら、統合環境は、やっぱりemacsなの?
非emcas使いは、どうするのがいいの?
それでも(最終的には)emacs?
0796デフォルトの名無しさん2009/04/06(月) 17:47:06
lushというlispでshを書く方法があるみたいなのですが
使ってる人はけっこういるのでしょうか
0797デフォルトの名無しさん2009/04/06(月) 18:11:12
>>795
理由もわからずに道具を使いだすと信者化するんで
メモ帳で十分とか、まがりなりにも自分の信念を持ってるほうがいいと思う
0798デフォルトの名無しさん2009/04/06(月) 18:19:54
>>795
「非emacs使い」なのならなぜ最初にvi(m)のlispモードを考えない?
0799デフォルトの名無しさん2009/04/06(月) 19:03:02
非emacsならviとか
頭おかしい考え方だと思った
0800デフォルトの名無しさん2009/04/06(月) 19:55:41
>>799
windowsな人ならそう思うかもな。でも、lispをwindowsでするのは
無駄な労力がかかるから、それもあって798はviが浮んだんだろう。
unix系ならばあながちおかしくはない発想なのです。いちおう
vimならばlispの環境はあるからなぁ。
08017952009/04/06(月) 20:27:07
ちなみに非emacs使いという言葉の意味は、反emacs派というわけでもありません
なんら宗教上の理由は、ありませんよw
vimを薦めている方は、なにか宗教上の理由を感じるんですが、違いますか?
Linux上ならemacs一択でいいんでしょうかね?
またWindows上(のcygwinなど)でschme(, lisp)を使うのは、適していないんでしょうか?
>>800
いちおう、存在する程度では、困るんですけど
0802デフォルトの名無しさん2009/04/06(月) 20:53:48
どっちでも良いよ。早く始めちゃえ。
0803デフォルトの名無しさん2009/04/06(月) 21:14:47
schmeが気になってしょうがない
0804デフォルトの名無しさん2009/04/06(月) 21:15:12
eclipseでも出来るよ。
0805デフォルトの名無しさん2009/04/06(月) 21:20:14
eclipseみたいなロートルPC殺しなんて使う気になれないよ
0806デフォルトの名無しさん2009/04/06(月) 21:29:09
eclispの間違いでしょ?
0807デフォルトの名無しさん2009/04/06(月) 21:32:48
>>800, 801
胸をはって「使っている」といえるほどではありませんが、Windows + Meadow + mzschemeで、とくに支障ないです(.emacsをちょっと書く必要があるけど)。
Linux + emacs + mzschemeと同じ環境、同じコードで書けるし。
0808デフォルトの名無しさん2009/04/06(月) 21:38:45
改めて読み返してみると799のほうが過剰反応しているように見えてしまった
いつの間にやら俺も毒されて
0809デフォルトの名無しさん2009/04/06(月) 21:52:59
>>801
よくしらんけど、vimって宗教がらみ?clispみたいなの?
0810デフォルトの名無しさん2009/04/06(月) 22:02:00
>>801
schemeだったら、807もかいているように、mzschemeとかあるからなんとかなる。
windows上のemacsはpath表現ではまることがあるから注意が必要。IDEまであるからね。
Dr.schemeさんは。
common lispでもwindowsで動くものはでてはきてるけど、外部のライブラリを使うとき
に困ることがあるかもしれない。
emacsのほうがあとあと楽だと思うけど、グレアムみたいにviつかいで有名なのもいるから
CUIのみでやる場合は選択としておかしくはないかな。screen+zsh+vimという組み合せは
CUIではかなり強力になるから。windowsならばどうだろうね。cygwinでは同じことはでき
そうだが。ほかはeclisp(笑)というlisperのためのIDE(4/1ではないか。をい!)でも
common lispならばcupsというのがありますね。
0811デフォルトの名無しさん2009/04/06(月) 22:04:25
801
まで読んだ
08127952009/04/06(月) 22:17:27
>>794さんの質問に(部分的にもでも)答えてあげてください

>>801
有名な方でvi使いの方がいらっしゃるんですね
vimとか、ネタかと思っていました

みなさま、レス、ありがとうございます
勉強の方向性として参考にさせていただきます
とりあえず、パッケージにguileがあったので、試しにこれを触ってみます
0813デフォルトの名無しさん2009/04/06(月) 22:29:26
>>794
common lispで現状の選択ならばclispやsbcl+ltkを使えば良いよ。一番気楽。
schemeほどの美しさはないけど、気に入ったなら良い選択だ。
lisp方言は似てるから、微妙な違いはあっても片方を学んでおけばなんとかなりますよ。:p
0814デフォルトの名無しさん2009/04/06(月) 22:36:06
俺も vim で書いてるけど、話を何段も飛ばして一足飛びに宗教認定されててワラタ。
vi は宗教と言うより made with secret alian technology なだけだと思うけどな。
Lispnik なら理解出来なくとも価値観を共有出来ると思ってたが、まぁ良いよ。
0815デフォルトの名無しさん2009/04/06(月) 23:37:14
俺はemacsとvi(vim)を使ってる。
けどそういうのに慣れてない人には、
jEditとか他の選択肢でもいいんじゃね?
シンタックス支援があれば何でもいい。
0816デフォルトの名無しさん2009/04/07(火) 00:09:10
言語を学ぶのに、いきなり統合環境を聞くのも時代なのかな。
javaでいうEclipseみたいなものは便利だけど、勉強しないと補完されないと完成しないコードを書く癖が付くよ。
0817デフォルトの名無しさん2009/04/07(火) 00:13:39
まあ使いたい人は使えばいいんじゃないの。
0818デフォルトの名無しさん2009/04/07(火) 00:23:06
>>816
俺も同じ考えだな
初心者はIDEやデバッガは使わない方がいいと思う
0819デフォルトの名無しさん2009/04/07(火) 00:51:33
>>794
プラットフォームにもよるんだけどさ
unix系(mac含む)ならemacs+common lisp+slime環境はマジでおすすめ(+HyperSpec)
windowsでならeclipse+CUPSがおすすめ(meadow+commonlispでもいいかもしれんがasdf環境の設置が面倒くさいんだ)


schemeはわからん、slime並に統合された環境ってschemeとペアになってる開発環境に依存しすぎてるら(emacsライクなエディタがscheme自身でかかれてたりする)
0820デフォルトの名無しさん2009/04/07(火) 00:53:44
最初はviでしこしこかいていたなぁ。年寄ですね。。。
0821デフォルトの名無しさん2009/04/07(火) 00:59:19
>>819
うんうん。そうおもう。どういですよ。おにぃちゃん。
windowsでというと如何してもcygwinに頼ることもあるかもしれんけど、
あれをやるなら、仮想環境でubuntuでも入れてそこで、emacs + cl +slimeを
やったほうが手間がかからないかな。学習のみじゃなくて、本気でやりたいなら
脱winをおすすめするよ。macならunix系だからwinほど障害がないから問題はない。
どうしてもwinラヴなら、まだ、eclipseにたよったほうがいい。
0822デフォルトの名無しさん2009/04/07(火) 01:01:16
Macはマイナー言語天国だよね
0823デフォルトの名無しさん2009/04/07(火) 01:11:08
>>822
いろんな言語が触れるのはunix系の強みだと思う。
まだ、CUIの扱いがunix準拠なら救われるけど、そうじゃない上に弱点だから
windowsではどうしても多様なものがでにくい。その特殊性ゆえに移植が難しい
のが影響してるんだと思うよ。lispだけじゃなくて動的言語の強みが消えやすいし。
0824デフォルトの名無しさん2009/04/07(火) 07:07:21
>>818
Unixという名の統合環境がないと動かないLisp処理系が結構多いから・・・
0825デフォルトの名無しさん2009/04/07(火) 10:09:18
practical common lispで説明してるのはslime
08267942009/04/07(火) 10:23:07
>>813,819,821
ありがとうございます!
Mac OS X上でemacs使っているので、slime+sbclでCommon Lispから入ってみようと思います。

それはそうと、Common Lispにも、SchemeのSICPのような「聖典」的なものはあるのでしょうか?
HyperSpecが相当するのでしょうか?
0827デフォルトの名無しさん2009/04/07(火) 10:39:46
CLtL2とかも
0828デフォルトの名無しさん2009/04/07(火) 10:58:30
Practical Common LispのサイトでLisp Box落としてくるのが一番手っとり早い。
0829デフォルトの名無しさん2009/04/07(火) 11:46:34
設定済みmeadowは?
0830デフォルトの名無しさん2009/04/07(火) 12:43:39
>>826
うん。ちょっとまえの記憶でもうしわけないけど、銭谷版はslimeも付いてるけど、
古いバージョンで、今のsbclやcmucl、clojure clと組みあわせて使ったときに動作が
ちがうかもしれないので、なるべく、本家で配布しているslimeを使ってやってください

>>829
Lispboxも設定済みmeadow学習用なら問題なしよ。asdfを本格的に使う段階になっ
てくる時から試行錯誤の連続になるかもしれない。
0831デフォルトの名無しさん2009/04/07(火) 14:26:26
Scheme初心者です。このスレで歓迎される模範的初心者になるには
どういう点に注意すればいいのかご教示くだされば幸いです。
よろしくお願いします。
0832デフォルトの名無しさん2009/04/07(火) 14:34:41
>>826
> Common Lispにも、SchemeのSICPのような「聖典」的なものはあるのでしょうか?
CLtL2とかPAIPあたりがそういう位置づけかな。
0833デフォルトの名無しさん2009/04/07(火) 14:57:20
>>831

>Individuals and interactions over processes and tools

>Working software over comprehensive documentation
0834デフォルトの名無しさん2009/04/07(火) 16:13:39
>>826,832
SICP が Scheme にとっての聖典ってのは誤解だよ。
Scheme を使ってプログラミングの考え方を解説してるけど、
言語自体の説明はほとんど無いし、
Scheme の最低限の機能しか使ってない。
Scheme のバイブルはTSPLだと思うなぁ。
0835デフォルトの名無しさん2009/04/07(火) 17:52:43
cltl2はどこかpdfで配布されていたけど、わすれちゃった。
知ってるひとおらんか?
0836デフォルトの名無しさん2009/04/07(火) 21:29:51
>>835
.psをttp://www.ps2pdf.com/convert.htmで.pdfにするのはどうですか?
ついでに、ttp://www.daansystems.com/lispide/のzipの中にはCLtL2とHyperSpec
の.chmが入っています。
0837デフォルトの名無しさん2009/04/07(火) 23:00:29
>>834
Jargon filesに"One of the bibles of the LISP/Scheme world."って書いてあるから、
それをうけてるんじゃないのか。別に「誤解」というほどのものでもないだろう。
0838デフォルトの名無しさん2009/04/07(火) 23:22:55
>>836
ありがと。 やってみたら作れた。
0839デフォルトの名無しさん2009/04/07(火) 23:35:42
検索キーワードを思いだしたら見つかった。他にもおもしろいpdfがあるから
お礼にのせておくね。

http://www.lispmachine.net/
0840デフォルトの名無しさん2009/04/07(火) 23:47:46
The final public draft of the ANSI X3.226-1994の一本にまとまったpdfもあるので一応ご紹介。
http://lispm.dyndns.org/news?ID=NEWS-2009-02-22-1

Erik Naggumのサイトでもps形式のものが公開されてるけど、章ごとにばらばらのファイルなので
いまいち使いにくい。
0841デフォルトの名無しさん2009/04/07(火) 23:54:04
>>831
割と親切な人も多いから、謙虚に、かつエスパーを要求しなければ、
結構色々教えてくれると思う。

ただ、最終的には、自分で動かないとやってられない言語でもあるので、
そういう覚悟は必要のはず。手厚いサポートとか期待するだけ無駄。
0842デフォルトの名無しさん2009/04/08(水) 08:34:21
http://uxul.wordpress.com/2009/04/07/a-detailed-preview-of-my-jnr-game-written-in-common-lisp/
0843デフォルトの名無しさん2009/04/08(水) 13:49:19
>>842
すごい。リアルタイムでうごくゲームだ。
0844デフォルトの名無しさん2009/04/08(水) 14:32:28
>>744
結局アレグロの独占なんですね
0845794=8262009/04/08(水) 15:02:14
皆さんご教示ありがとうございます。
人工知能関係はまったく勉強したことがないのでPAIPにはちょっと身構えてしまいますが、
839さんや840さんに紹介していただいたサイトには初心者向けの文書もいくつか載っていたので、
複数見比べながら勉強していくことにします。
0846デフォルトの名無しさん2009/04/08(水) 16:13:37
ガイ・スティールにもサスマンにも見放されたってこと。かな…?
0847デフォルトの名無しさん2009/04/08(水) 19:49:02
http://elhumidor.blogspot.com/2009/04/clojure-on-google-appengine.html
0848デフォルトの名無しさん2009/04/08(水) 20:08:48
ヒントをたくさんもらって、いろいろといじくり回して、lambdaについて理解が進んだかもしれない
とりあえず、簡単なものをlambda再帰してみた
;; fibonacii lambda version
((lambda (f) (f f 1 1))
(lambda (g x y)
(if (> x 2147483648)
'()
(cons x (g g y (+ x y))))))
;; fizzbuzz lambda version
(reverse
((lambda (f) (f f 100))
(lambda (g x)
(cond ((= x 0) '())
((= (modulo x 15) 0) (cons "FizzBuzz" (g g (- x 1))))
((= (modulo x 5) 0) (cons "Buzz" (g g (- x 1))))
((= (modulo x 3) 0) (cons "Fizz" (g g (- x 1))))
(else (cons x (g g (- x 1))))))))
でも、>>776の(lambda(x) ((f (y f)) x))は未だに理解できていないが
(lambda (x) x)はxを返すのは、わかるんだけど
(lambda (x) (x))は、何を返すの?
0849デフォルトの名無しさん2009/04/08(水) 21:00:04
引数のない関数を渡せばそれを引数なしで呼び出した結果を返す
(define f (lambda () (lambda (x) (+ x 1))))
(((lambda (x) (x)) f) 2)

λ式の関数適用ってλx.M Nの形だから
(lambda(x) (x))は、理論的にはラムダ式ではないな
間違ってたらつっこみ希望
0850デフォルトの名無しさん2009/04/08(水) 21:53:50
>>849
頭が回りませんでした
こう書けばよかったんですね
(define f (lambda () ((lambda (x) (+ x 1)) 2)))
((lambda (x) (x)) f)
; (lambda (x) ((x)))だと、こうして渡すとちゃんと受け取ってくれるのか
(define f (lambda () (lambda () ((lambda (x) (+ x 1)) 2))))
((lambda (x) ((x))) f)

> λ式の関数適用ってλx.M Nの形だから
> (lambda(x) (x))は、理論的にはラムダ式ではないな
抽象度が高くて、わからないっす
λ式の関数適用ってλx.M NのN形のの意味がわかりません
x,M,Nは、何の意味は、なんですか?
xは変数(関数も含む?),M,Nは自然数ですか?w

(lambda (x) (x))の扱い方が理解できたので、満足しました
解説、ありがとうございました
0851デフォルトの名無しさん2009/04/08(水) 22:08:49
>>849
む、いわれてみれば、不思議だ。
そもそも、(f)という無引数の関数評価自体、ラムダ計算的にはどういうことなんだろう?

たぶん、lisp内の関数適用用一般関数applyを入れて(f)は(λx.apply x)fと考える、よって、(lambda(x) (x))は(λx.(λy.apply y)x)⇒(λy.apply y)みたいに考えるべきなのかな。
教えて、エロイ人。
0852デフォルトの名無しさん2009/04/08(水) 22:30:19
5という値と5を返す無引数の関数は遅延評価ベースの関数型言語的には同値。
だからthunkとthunkの返す値を同一視する。
正格評価のLispやOCamlだとそうはいかないから
Lispではthunkという概念を導入し、OCamlでは無引数の関数がない。たぶん
あんまり詳しくないんで間違っていたらツッコミ希望。
0853デフォルトの名無しさん2009/04/08(水) 22:54:54
なんとなく乱暴なような気がするけど具体的に突っ込めない駄目な僕
0854デフォルトの名無しさん2009/04/08(水) 22:59:23
MIT以外のSick Peeの講義が!
0855デフォルトの名無しさん2009/04/08(水) 23:00:05
Lispのapplyは
(apply 関数 リスト)
引数が0個なら、空リストに関数を適用する。
(apply 関数 '())
つまり長さが0だろうが何だろうがリストが1個必要なことには変わりない。

一方、λ計算の関数適用にも引数が1個必要だがそれはリストでなくても良い。
0856デフォルトの名無しさん2009/04/08(水) 23:00:25
無引数の関数なんてものはありません。
0857デフォルトの名無しさん2009/04/08(水) 23:06:30
関数的には
・デフォルトでは簡約されない
・しかし一度簡約すると決めたら簡約できなくなるまで簡約するぞ
なんで
無引数の関数みたいに「一段階だけ簡約します」みたいなものがないってことかな
というか「簡約の段階」ってのは実装上の問題であって
言語内に持ち合わせていないってほうが近いのかな
0858デフォルトの名無しさん2009/04/08(水) 23:32:12
ああ、そうか。849は撤回
(f)という表記を
λx.M Nに当てはめるとλx.f ()と考えれば良いわけだ
car/cdr/cons自体はλ式で表現出来るから
()に当たるλ式を適当に一つ決めれば
(lambda (x) (x))は
(lambda (x) (x '()のλ式表現'))とすればよいね

>>850
M,Nもλ式。自然数もλ式で表現する
ラムダ計算でググったらwikiに3行で定義がかいてある
0859デフォルトの名無しさん2009/04/08(水) 23:33:27
訂正 λx.f () -> λf.f ()
0860デフォルトの名無しさん2009/04/09(木) 00:19:12
ラクダ計算かぁ。
0861デフォルトの名無しさん2009/04/09(木) 00:45:47
やばい、おもしろくなってきた
0862デフォルトの名無しさん2009/04/09(木) 13:49:35
関数適用って(M N)じゃないのかなぁ ;; M N
(λx. M N)は(M N)のλ抽象でしょう
それとカリー化λ計算は全ての関数は一つの引数を受け取るという前提だから
(x) ≡ xであって(x ())では無いと思う
0863デフォルトの名無しさん2009/04/09(木) 13:56:28
lispは言語の仕様上たまたま0引数の関数定義も許すというだけだからね
副作用も扱うから1以上に強制する意味もないだろうし
何の基盤もないのに無理矢理当てはめようとしてもうまくいかない
0864デフォルトの名無しさん2009/04/09(木) 14:30:00
(equal? (list) list)
#f
(equal? (+) +)
#f
0865デフォルトの名無しさん2009/04/09(木) 15:03:19
結局、理論的なものを触るのにlispは向いてないってことですね
0866デフォルトの名無しさん2009/04/09(木) 15:11:04
Lisp式は拡張されたλ計算とでもいうものであって
Lisp式で直接純粋λ計算を扱うのには向いてないだけ
リストを扱うのは得意だからλ式の簡約の実装には向いているはず
(S式でλ式を表現するのは容易だし)
0867デフォルトの名無しさん2009/04/09(木) 15:23:37
>>862
(x) ≡ (apply x '())

零の発見みたいだな
nilもそうだが、applyの発見もおもしろい
0868デフォルトの名無しさん2009/04/09(木) 15:26:59
逆だった
純粋λ計算がLispの式を表現するのに向いてない、かな
0869デフォルトの名無しさん2009/04/09(木) 17:50:26
かっこを省略したりしなかったりするあれのことを言ってるのか?
確かにあれは構文木というものを教えるのに向いてない気がする
0870デフォルトの名無しさん2009/04/09(木) 18:08:59
単純に無引数の関数と言う概念がλ計算やHaskell(とたぶんML)にはないから
構文木そのものをλ項として表現しないといけない。
構文木を受け取り、一段階だけ簡約した構文木を返す関数の連鎖みたいなメンドイことになりそう。
そこまでいくとForthを
「全てのワードは1つのスタックを受け取り1つのスタックを返す関数である参照透明な言語」とみなすくらいの労力がいるんじゃなかろうか。
0871デフォルトの名無しさん2009/04/09(木) 18:24:38
λ式の評価器はLisp系でも関数型系でも、
単純なものは簡単に書けるけど、
(もちろんProlog系や、Perl系のスクリプト言語でも)
プリティプリントの実装と、
使う評価方式の仕様策定が意外と面倒だし、
場合によっては複数の評価方式を実装しないと、
簡約具合をいろいろ試すのに実用的にならない。

0872デフォルトの名無しさん2009/04/09(木) 20:01:38
過度に一般化されたλ計算を学ぶ前に、
Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
そうすれば、Haskellにはうんぬんとか余計なことを考えなくて済む。
0873デフォルトの名無しさん2009/04/09(木) 20:05:40
>>872
> Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
具体的になんのことを指しているの?
0874デフォルトの名無しさん2009/04/09(木) 20:59:06
>>873
defineやletrecやset!を封印したScheme
0875デフォルトの名無しさん2009/04/09(木) 23:26:28
、、Little Schemer?
0876デフォルトの名無しさん2009/04/09(木) 23:31:40
♪見知らぬ国のtripper
0877デフォルトの名無しさん2009/04/10(金) 03:27:58
>>873
Yコンビネータなくても再帰定義できるλ式もどきじゃないのかな。
Call by valueの評価器作るのはわりと簡単なんだけど、
それじゃYコンビネータは扱えないし。
0878デフォルトの名無しさん2009/04/10(金) 07:14:41
λf.(λx.f(λz.xxz))(λx.f(λz.xxz))
0879デフォルトの名無しさん2009/04/10(金) 08:35:26
>>877
おいおい、一段階だけ簡約、、の話はもう終わりか
0880デフォルトの名無しさん2009/04/10(金) 09:18:53
お、チューリングさんのほうのやつだね
0881デフォルトの名無しさん2009/04/10(金) 19:16:10
λ計算は少しかじった程度なのですが、
Yコンビネータなしの再帰ってどんな表現になるのですか?
0882デフォルトの名無しさん2009/04/10(金) 19:35:27
Y のかわりに λf.(λx.f (x x)) (λx.f (x x)) を使えばおk
0883デフォルトの名無しさん2009/04/10(金) 19:38:38
それってYそのものじゃない?
0884デフォルトの名無しさん2009/04/10(金) 19:41:05
Y コンビネータは Y f = f (Y f) というコンビネータ
0885デフォルトの名無しさん2009/04/10(金) 19:44:54
>>884は>>882にYという名前をつければいい、というわけにはいかないの?
0886デフォルトの名無しさん2009/04/10(金) 19:51:52
>>881
自分を参照するには自分を引数にする
という簡単なロジックですよ
Yはその応用例のひとつにすぎない
0887デフォルトの名無しさん2009/04/10(金) 20:01:06
猥コンビネータ
0888デフォルトの名無しさん2009/04/10(金) 20:11:32
ロジック トリック
0889デフォルトの名無しさん2009/04/11(土) 00:53:42
試行錯誤で弄ってたら
(define theta
(let ((x (lambda (x) (lambda (y) (y (lambda (arg) (((x x) y) arg))))) ))
(x x)))
こうなったんだけど

なーんかλを使った表記と綺麗に対応が取れてないように思える
(lambda (arg) ...て部分は一体どこから来るの?
0890デフォルトの名無しさん2009/04/11(土) 01:06:02
>>889
λ算法は lazy なので、eager な lisp では 評価を遅延するために thunk を作る必要がある。
(lambda (arg) ...) がそれ。
0891デフォルトの名無しさん2009/04/11(土) 02:10:10
cparen.el
lispの達人にはほど遠いけど、括弧だけは見えなくなりました!・∀・ステキ!
0892デフォルトの名無しさん2009/04/11(土) 09:00:45
>>889
(lambda (arg) ...) で囲むことで、これは procedure ですよという型付けをしていると
解釈することもできるぜ。
0893デフォルトの名無しさん2009/04/11(土) 12:09:16
、、Schemeで無限ループする問題と、Haskellで型推論失敗する問題は、なんつーか、
同じ問題を違う言葉で言いかえただけなんじゃね?
0894デフォルトの名無しさん2009/04/11(土) 13:11:31
>>893 もっと!もっと考察して!
0895デフォルトの名無しさん2009/04/11(土) 18:35:53
>>890
eager な型推論では infinite type を遅延するゴニョゴニョ・・・
0896デフォルトの名無しさん2009/04/11(土) 20:56:50
無限ループっていうか強く型付けされたλ計算は強停止性を持つんじゃなかったっけ?
0897デフォルトの名無しさん2009/04/11(土) 21:49:26
>>890
なるほどSICP3章あたりであった気がします
要復習ですね

>>892
しかしxやyの型を考えるとさらにわけがわからなくなる気がします
エラーを参考に考えれば簡約していったらyの引数はprocedureじゃないと駄目だから適当に辻褄併せすりゃ
件のprocedureの形になるとかそういう具合の予想はできますが


Hindley-Milner type inference algorithmはsimply typed lambda calculus用のもので、
simply typed lambda calculusはstrongly normalisingで、
strongly normalisingであるのは無限に簡約できる式を含まないから??

適当にwikipediaでType_inferenceで調べた結果の単語を並べたけどよくわからない

>>893の言う関連性というのはschemeで無限に簡約され続けて無限ループになるものが、
haskellでは型推論の時に検出されてエラーになってるということかな?
0898デフォルトの名無しさん2009/04/11(土) 22:17:54
>>897
ラムダ式のコンストラクタで遅延、applyで発火とするのは、
処理系の実装上の問題に過ぎない。
たまたまS式を使っているから、Lisp上で同じ型になっているに過ぎない。
元のラムダ算法ではまったく別のもの。
thunkはラムダ算法上のファーストクラスのオブジェクトではない。
0899デフォルトの名無しさん2009/04/11(土) 23:02:42
結局、型付きλ計算だと強停止性がある→ループが書けない→チューリング完全でないってこと?
型付きλ計算ではfixが型付けできないからファーストクラスの演算子として用意していると解釈していたんだけど
0900デフォルトの名無しさん2009/04/11(土) 23:20:25
fix は
http://en.wikipedia.org/wiki/System_F
という型付きλ計算の体系でなら
forall a. (a -> a) -> a
という型を持っていると解釈され、>>792のようにふつうの関数として定義できる。
0901デフォルトの名無しさん2009/04/11(土) 23:21:31
そうです。
その再帰用演算付加の定式化で有名なのが、ゲーテルの体系TとPCFです。
ちなみに情報学板にλ計算スレありますよ。
大学の講義用資料にいいのがたくさん転がってますしね。

0902デフォルトの名無しさん2009/04/12(日) 00:02:21
>ゲーテルの体系
ゲーテルの不完全性定理?
0903デフォルトの名無しさん2009/04/12(日) 00:10:24
λ-calculus.λ計算.(lambda calculus)
http://science6.2ch.net/test/read.cgi/informatics/1165506353/
0904デフォルトの名無しさん2009/04/12(日) 00:11:05
>>902
ゲーデルの体系Tというのはこれ↓のことだお

http://math.stanford.edu/~feferman/papers/dialectica.pdf
0905デフォルトの名無しさん2009/04/12(日) 15:18:09
Feferman!!!
0906デフォルトの名無しさん2009/04/12(日) 19:30:51
scheme の仕様についての質問ですが(R5RS)
例えば (+ 1 2) を構文解析した場合 + は構文木上どのような項に
ぶら下がることになるのでしょうか?
BNFを見てる限り

<program>
 <command or definition>
  <command>
   <expression>
    <procedure call>
     <operator>
      <expression>
       <literal>
        <self-evaluating>
         <string> <- この下?

になるのか? とも思うのですが普通に考えると扱いが特別な予約語
にしか見えないですし、どうなるのが正しいのかと・・
ごく単純な考え違いっぽいですが、教えて頂けましたら幸いです
0907デフォルトの名無しさん2009/04/12(日) 20:49:11
CLと違ってSchemeはリストを評価する時に
たとえば、(A B C)とあった場合
まず式A、式B、式Cをある順番(A, B, CとかC, A, Bとか任意の順番)で評価する。
それからリストの先頭の評価結果(この場合は式Aの結果)を手続き、残りの式の結果を引数とみなして適用する。
(+ 1 2)はまず+と1と2をそれぞれ「ある順番で」評価する。
+は識別子なので、その環境での値が結果となる。
R5RSではトップレベルの+は評価されると足し算手続きになる。
もし
(let ((+ cons))
 (+ 1 2))
のように+がローカルに束縛されていたら、その値に評価される。
(R5RSの場合は、正確には識別子は値ではなく記憶領域に束縛される)
1と2はself-evaluatingだからそのまま1と2に評価される。
0908デフォルトの名無しさん2009/04/12(日) 20:50:59
つまり+とか-などの識別子も
fooとかxとかyなどの識別子と一緒
0909デフォルトの名無しさん2009/04/12(日) 21:50:20
>>907
Aがまず評価される
その後Aが手続きであればBとCが任意の順番で評価される

0910デフォルトの名無しさん2009/04/12(日) 21:59:36
>>907
お返事をありがとうございました。単独の(+ 1 2) の+は
結局、一般の識別子扱いで上の書き方でいくなら

<program>
 <command or definition>
  <command>
   <expression>
    <procedure call>
     <operator>
      <expression>
       <variable>
        <any <identifier> that is'nt..>
         <peculiar identifier> <- この下

1,2は
    <procedure call>   上と同じノード
     <operand>
      <expression>
       <literal>
        <self-evaluating>
         <num> <- この下

になりそうですが、実装としては
「トップレベルの+は評価されると足し算手続きになる」
という内容を、露骨にリストの先頭に識別子を見つけた場合の
処理の一部に明示的に書き込まない限り、単にsyntax 上の判別だけ
では構文木は作れない・・ことを意味しているようにも見えますが・・
もう少しまじめに仕様を見てみます
0911デフォルトの名無しさん2009/04/12(日) 22:57:37
>>909
書き方がまずかったけど、Aが一番に評価されるとは限らない
Aが構文キーワードか否かの判定がまずされるだけで
もし構文キーワードでなければAとBとCはどの順番で評価されても規格上構わない
0912デフォルトの名無しさん2009/04/12(日) 23:09:41
識別子は
・構文キーワードに束縛されている(ifとかquoteとか)
・記憶領域に束縛されている(場所の名前ともいう、普通の変数のこと)
・未束縛
に分類される。
リストの先頭が
・識別子かどうか
・識別子なら構文キーワードに束縛されているか
という判定が各式の評価に先行して行われる。
0913デフォルトの名無しさん2009/04/13(月) 00:22:21
重箱の隅だが、
R5RSのformal syntax/semanticsによれば、
ifやquoteは「束縛されて」いるわけでなく、
アプリオリに構文キーワードであり、
直ちに<conditional>や<quotation>を成す事になっている。
具体的には、環境に対してifをlookupする意味関数になってない。
多くの処理系では環境をlookupしているが。

0914デフォルトの名無しさん2009/04/13(月) 02:21:19
gaucheではオペレータを先に評価してるように見える
マクロ環境を扱うならこの順番が自然なのかね
0915デフォルトの名無しさん2009/04/13(月) 16:19:57
gaucheとかguileみたいに
> if
#<syntax if>
と返すものはオペレータが先
scheme48みたいに
> if
Error: undefined variable
となるものはオペランドが先の傾向にあるかも
0916デフォルトの名無しさん2009/04/14(火) 03:40:58
guile> if
#<primitive-builtin-macro! if>
のインタプリタみたいに評価する関数ってなんですか?
guile, gauche とも知りたいです
できれば、clisp, cmucl, sbcl もw
0917デフォルトの名無しさん2009/04/14(火) 10:59:59
>>916
evalのこと言ってんの?それとももっと哲学的な問いか?
0918デフォルトの名無しさん2009/04/14(火) 17:46:55
>それとももっと哲学的な問いか?
0919デフォルトの名無しさん2009/04/14(火) 20:36:31
>>917
哲学的意味ではないです
evalでいけますね
なんか勘違いしていました

関数型言語を使うと、「哲学的に考えると・・」とか、「メタ的にとらえると・・・」とか、
考えることが多くなるんでしょうかね
手続き型言語を使っていたときは、そこまでつっこんで考えていたいなかったようなあ

人生の中でそういう時期なだけなのかな
0920デフォルトの名無しさん2009/04/14(火) 21:12:11
皮肉を言われていることに気が付いてないだけ
0921デフォルトの名無しさん2009/04/15(水) 00:01:29
それらしい言葉を使うと響きがかっこいいだけで、実体のない虚飾だよ。
0922デフォルトの名無しさん2009/04/15(水) 00:03:06
形而上学的な思考の事かとオモタ
0923デフォルトの名無しさん2009/04/16(木) 19:54:20
どうでもいいことだが
厨の俺にとって、響きがかっこいい、というのは重要w
Befungeとか名前がカコイイ
IConとかCatはカワイイ
そして、Lolliは潔い
0924デフォルトの名無しさん2009/04/16(木) 20:14:09
Gaucheもこのスレでおk?
0925デフォルトの名無しさん2009/04/16(木) 21:01:50

こんなことできるんだね
数式処理には確かに向いてる

(setq a 'b)
(setq b 'c)
(setq c 5.2)
(print (eval c));5.2
(print (eval b));5.2
(print (eval ( eval a)));5.2
0926デフォルトの名無しさん2009/04/17(金) 11:39:02
lispな人はgitかdarcsでhg使ってるの見たことないのだけど
何か理由があるの?
0927デフォルトの名無しさん2009/04/17(金) 12:35:29
lisp な人は、比較的年齢層高めだから、
hg って入力する時、
H爺を連想して嫌なんだ。
0928デフォルトの名無しさん2009/04/17(金) 12:40:13
<<927評価中>>
0929デフォルトの名無しさん2009/04/17(金) 14:53:22
ハードゲイですね
わかります
0930デフォルトの名無しさん2009/04/17(金) 23:52:46
>>926
git は判らんが darcs に関しては common-lisp.net で使えるというのはあるんじゃないか。
0931デフォルトの名無しさん2009/04/18(土) 00:16:48
shiroさんのλっちゃにワラタw
0932デフォルトの名無しさん2009/04/18(土) 03:31:49
なんか新スレ立ってるよ

【GNU】スクリプト言語 Guile【scheme】
http://pc12.2ch.net/test/read.cgi/tech/1239985829/
0933デフォルトの名無しさん2009/04/18(土) 03:42:30
guile 単独スレとはまた大胆な話だ。
0934デフォルトの名無しさん2009/04/18(土) 04:51:31
>>925
なんかわかるなぁ
最初のころは??だっが、解ってしまえば、すごく単純なことだった。
0935デフォルトの名無しさん2009/04/18(土) 05:12:39
>>933
guileを中心に勉強している身としては、うれしいがw
本当に大胆だな

Guileスレを立てた1は、週1で簡単なスクリプトでいいから、投稿してくれ
0936デフォルトの名無しさん2009/04/18(土) 08:10:04
>>1を見てニヤリとしてしまった。がんばってほしい
0937デフォルトの名無しさん2009/04/18(土) 20:41:50
R6RSで使えるslibってありませんか?
0938デフォルトの名無しさん2009/04/18(土) 21:22:57
>>937
お前が作ればある。
0939デフォルトの名無しさん2009/04/19(日) 17:52:55
作ればあるとかがんばればできるとか
そういうのはもううんざりなんだよ
0940デフォルトの名無しさん2009/04/19(日) 18:46:47
「ない」と親切に教えてくれてるのにおまい
0941デフォルトの名無しさん2009/04/19(日) 21:09:04
今日の俺の悟り
「この文は偽である」の真偽値を返す述語はYコンビネータだ
0942デフォルトの名無しさん2009/04/20(月) 01:03:14
そういうのが気になる人はゲーデルの不完全性定理を読みましょう。
集合論を用いて集合論の定義することは不可能です。
0943デフォルトの名無しさん2009/04/20(月) 01:36:36
ttp://www.cs.auckland.ac.nz/CDMTCS/chaitin/unknowable/index.html

このスレ的には、この本ですか?
0944デフォルトの名無しさん2009/04/20(月) 02:34:33
>>943
UNKNOWABLEがウンコはbleに見えた
0945デフォルトの名無しさん2009/04/20(月) 07:10:53
ラッセルのパラドックス
0946デフォルトの名無しさん2009/04/20(月) 09:07:40
>>942
> 集合論を用いて集合論の定義することは不可能です。
0947デフォルトの名無しさん2009/04/20(月) 11:17:55
くだらない揚げ足取りしてる暇があるなら
ドンブリ5杯問題について考えようぜ
0948デフォルトの名無しさん2009/04/20(月) 20:41:34
1杯のかけそばをみんなで食す。
0949デフォルトの名無しさん2009/04/20(月) 21:41:50
> ドンブリ5杯問題
それなあに?(・∀・)
0950デフォルトの名無しさん2009/04/20(月) 22:22:36
多体問題の一種で、飲食店における5つのドンブリの挙動を計算する問題
与えられた店舗レイアウト、店員、客、設備、コストなどの条件からドンブリの挙動を計算する
チェーン店の人員計画に利用される手法
0951デフォルトの名無しさん2009/04/20(月) 22:25:04
>>950
ドンブリの挙動ってなによ?
0952デフォルトの名無しさん2009/04/20(月) 22:30:26
腕が生えてロボットになったり、中身を勝手に食べはじめたりとかそういうことだろ
0953デフォルトの名無しさん2009/04/20(月) 22:33:17
ドンブリは客に出すだけではなく、まかないとかにも利用されるからね
まかないとして多量にごはんを転用した店員には訴訟で対応するといったルールが実在する
ドンブリ5杯が目安とされることから俗に>>949のように呼ばれる
0954デフォルトの名無しさん2009/04/20(月) 22:36:28
暇で死にそうな哲学者が椅子取りゲームのようなものを考案して
プレイヤーを戦わせている・・・と聞いたことがある
0955デフォルトの名無しさん2009/04/20(月) 22:37:34
意味が分かりません。
0956デフォルトの名無しさん2009/04/20(月) 23:17:17
つまり哲学者が食事をすると
0957デフォルトの名無しさん2009/04/20(月) 23:22:37
頭悪い奴がスレに住みつくみたいです
0958デフォルトの名無しさん2009/04/20(月) 23:31:28
わかった!これの>>50のことだね?
http://cpch.jp/archives/1880
0959デフォルトの名無しさん2009/04/20(月) 23:32:54
>>958から印尿
入店・退店のオペレーションをひとつのプロジェクトと仮定して簡単に図式化して説明しておく。
http://jibun.atmarkit.co.jp/lskill01/special/pmbok3rd/pmbok_02.gif

立ち上げプロセス群: いわゆる『並び』および『食券の購入』プロセス。
ここでしくじると、他のロティストから入店を拒否されても文句は言えない。
計画プロセス群: 『着席』『硬軟コール』『トッピングコール』プロセス。
この辺は説明しなくても解るだろうと思われるので割愛。

実行プロセス群: 『食す』プロセス群。もちろん『食す』といっても実はそのプロセスはさらに細分化されるのだが、
初心者はとにかく早く食べる事を心がける事。(『撮影』『デュエル』などは上級者がすることです。)

※計画・実行プロセス群がサイクリックになっている理由はあえて説明するまでもないだろうが、
これこそがロットリズムそのものであり、オペレーションの中核である。店と客が一体になってこその「二郎」である。

監視・コントロールプロセス群: 店主、助手、他のロッターによる『マナー監視』『リズム監視』などのプロセス。
規律あるオペレーションに協力しよう。

終結プロセス群: これは簡単。どんぶりをカウンターに上げ、テーブルを拭き、大きな声でご馳走様を言い店を出よう。
ただし・・・万が一残してしまった場合は、ここには書けないような恐ろしい事になるので覚悟しよう。

以上、誰でもわかるようにおおまかにロットプロセスを説明してみた。
もちろん、このサイクルは「入店・退店」のみならず、さまざまなロット概念階層に適用される。
野菜山ひとつ口に運ぶのにもこの図式は適用されるし、
二郎と出会い、そしていつか体を壊すまでもひとつの大きなロットサイクルと捉えることができる。
デュエルやバトルにも、全く異なるプロセスで構成されるロットサイクルが存在する。
最低でも以上の説明を頭に叩き込み、理解し、イメージトレーニングを重ねた上で実戦に臨んでいただきたい。
0960デフォルトの名無しさん2009/04/21(火) 00:03:11
>>956
http://up2.viploader.net/pic/src/viploader987233.jpg
0961デフォルトの名無しさん2009/04/21(火) 02:12:31
で、誰がどこで誰のスイッチを押したんだ?
0962デフォルトの名無しさん2009/04/21(火) 03:48:42
(asdf:oos 'asdf:load-op 'kmrcl)
(print (kmrcl:command-output "pwd"))

sbclだとちゃんとディレクトリの文字列が返値になる
clispだとなにもかえってこない

kmrcl:command-output使うと実装依存の外部コマンド実行の違いを吸収してくれるんじゃなかったのか
0963デフォルトの名無しさん2009/04/21(火) 21:44:16
ttp://cadr.g.hatena.ne.jp/mokehehe/20090420
懐かしいなぁ
0964デフォルトの名無しさん2009/04/23(木) 09:09:27
Armed Bear Common Lisp以外のABCLっていう言語があるんだね
東大の先生が作ったみたい
0965デフォルトの名無しさん2009/04/23(木) 12:30:42
岩波の「モデルと表現」で使ってたと思う
0966デフォルトの名無しさん2009/04/23(木) 13:35:47
あることを行うlibraryを探してて2つみつけた

1つめはいろいろ多機能なんだけどdotimesを多様してcとあんまり変わらない書き方
基本になってるクラスもあんまりよくない作りにみえる。しかし最近まで更新されてるし機能も沢山


2つめは、だいぶ前に更新止まってるけど、基本のクラスがよく考えて作ってある感じ。
しかしやる気のなさみたいのも感じられて,それぞれの機能の作りこみが中途半端
自分で書き換えながら使うにはいいと思う


この2つのどっちを使うのがいいのだろう
0967デフォルトの名無しさん2009/04/23(木) 19:09:04
>>966
用途による。
0968デフォルトの名無しさん2009/04/23(木) 19:13:16
>>966
実際に晒して、議論すればいいだろ
伏せている意味がよくわからん
0969デフォルトの名無しさん2009/04/23(木) 19:31:04
>>968
1.
http://cyrusharmon.org/static/projects/ch-image/doc/ch-image.xhtml

2.
http://matthieu.villeneuve.free.fr/dev/imago/examples.html
0970デフォルトの名無しさん2009/04/23(木) 20:05:49
lispとか、わからん
エロい人の降臨を待とう

こういう場合は、どのくらい真面目に使いたいのかにも関係してくるのかな
0971デフォルトの名無しさん2009/04/23(木) 20:10:30
俺なら1と2を使って速い方を使うだけだな。画像処理は速度が命と思うから。
0972デフォルトの名無しさん2009/04/23(木) 21:33:03
画像のことは気にしないで
改造しやすいコードとしてはどっちが好きですか?
0973デフォルトの名無しさん2009/04/23(木) 22:41:17
すでに自分の中で結論が出てるのでは・・・
0974デフォルトの名無しさん2009/04/23(木) 23:18:46
保守性の高い物を選ぶ。
0975デフォルトの名無しさん2009/04/24(金) 20:02:32
次スレです。

Lisp Scheme Part26
http://pc12.2ch.net/test/read.cgi/tech/1240567959/

それにしても連投規制がきつすぎて、テンプレ全部貼るのに40分以上かかります。
まとめサイトを作ってそこに誘導するなりした方がいいかもしれません。
0976デフォルトの名無しさん2009/04/24(金) 20:05:33
つttp://wiki.fdiary.net/lisp/

1で
ttp://wiki.fdiary.net/lisp/
ここ見れ、以上。

だけでいい気がします
0977デフォルトの名無しさん2009/04/24(金) 20:13:37
>>975
おつ
規制というよりレス数とリンクが多すぎだね
>>976
半分同意かな
でも、ちょっと乱暴過ぎな気がする

1-3,4レスぐらい(1レス32行の範囲で)使って、うまく誘導してもいいかも
布教したい派はテンプレ案を提案するといいかも
布教したい派がいないんであれば、976さん案でいいと思う
0978デフォルトの名無しさん2009/04/24(金) 22:32:37
>>975
乙です
0979デフォルトの名無しさん2009/04/25(土) 01:08:02
>>975
乙。このスレ、マジでテンプレ貼るの辛いよな。

>>976
同意。テンプレが長すぎるから埋もれるんであって、
シンプルに示してあれば、自然と目も行くと思う。
0980デフォルトの名無しさん2009/04/25(土) 02:01:09
>>979
みてみたけど、Wikiの編集カテゴリがないね

Wikiもそうだし、スレもそうだけど、LispとSchemeと分けたほうが良くない?
Schemeを中心に勉強している身としてはWikiは見づらいね
せっかくだし、新規の人が多少入りやすいように整えたほうがいいかも

とか、言っちゃうと>>976さんの案自体が流れちゃうかな
とりあえず、>>976さんの案に賛成か、反対か、意見を聞きたいね
反対意見がないようなら、Part27から>>976さんの案採用で
0981デフォルトの名無しさん2009/04/25(土) 02:48:24
俺はLispとSchemeいっしょでいいと思うけどな
0982デフォルトの名無しさん2009/04/25(土) 05:52:03
本スレを今更分けてもちかたない
テンプレwiki化には賛成。保守する気があるなら
話題に出やすいGaucheみたいな処理系のスレなら分けてもいい
0983デフォルトの名無しさん2009/04/25(土) 07:55:44
>>982
なんでそこでGaucheだけなの?w
Gaucheも含めてSchemeスレじゃ駄目なの?

今まではLL言語だからってRubyとPythonを同じスレにしているようなもんだよね

「Lispと言ったら、Common Lispのことを指して、Schemeのことは指さない」うんぬんとか、言わないんだね?
そのくらい寛容な人の集まりなら、このままでもいいと思うが

まあ、なんだかんだ言ってスレ内でうまく共存しているんだがなあw
0984デフォルトの名無しさん2009/04/25(土) 09:49:28
ユーザ少ないくせに、いやむしろ少ないからか、内ゲバに走って分裂すんだよなあ
フェミ団体みたい
0985デフォルトの名無しさん2009/04/25(土) 10:06:46
浅間山荘だけは襲撃しないで下さい
0986デフォルトの名無しさん2009/04/25(土) 10:34:57
Guileもそろそろ戻ってこいよ。また楽しくやらないか?
0987デフォルトの名無しさん2009/04/25(土) 11:02:57
Common Lisp と Scheme で分けるに一票
その上で処理系ごとのスレ建てるのは好きにやってくれって事で。
0988デフォルトの名無しさん2009/04/25(土) 11:06:47
Common Lispは既に分かれている。
現状のままでいいと思う。
0989デフォルトの名無しさん2009/04/25(土) 11:43:37
>>984
フェミ団体って分裂したの?
kwsk
>>985
連合赤軍が人質をとって、立てこもったのは知っているけど
襲撃って痺れを切らした警察側の話?
0990デフォルトの名無しさん2009/04/25(土) 12:03:42
浅間山荘に籠城しないで下さい
と言うべきだったかな。

単なる冗談です。
0991デフォルトの名無しさん2009/04/25(土) 22:46:58
※スレタイの「Lisp Scheme」の「Lisp」はCommon Lispを除く
と注釈すればいい
0992デフォルトの名無しさん2009/04/25(土) 23:50:37
新参ですがこのスレにCommon Lispを含まないなんて今はじめて知りました
0993デフォルトの名無しさん2009/04/25(土) 23:53:16
ああ、実はそうだったんだよ
詳しくは過去ログに
0994デフォルトの名無しさん2009/04/26(日) 00:02:51
次のスレタイは [Lisp族のScheme Part26] でいかがかね?
0995デフォルトの名無しさん2009/04/26(日) 00:03:58
馬鹿っぽいから却下
0996デフォルトの名無しさん2009/04/26(日) 00:07:25
LisSche Part26
0997デフォルトの名無しさん2009/04/26(日) 00:07:50
>>993
LISPはたくさんあるのに、
LISP=CommonLISPの略だとするのはおかしい
って意見があって、だったらCommonLISPは専用スレ立てましょう、
みたいな感じでまとまったんだっけ??
それでなぜか「入門」スレが立ってて俺はあるぇ〜?って感じで読んでた。
正直、
0998デフォルトの名無しさん2009/04/26(日) 00:20:06
S式スレ、もしくはsexpスレってのは?
0999デフォルトの名無しさん2009/04/26(日) 00:31:26
きっとS式は範囲をどこまでにするかで揉める

【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
http://pc12.2ch.net/test/read.cgi/tech/1140006937/
1000 ◆3.JjF77I26 2009/04/26(日) 00:34:47
1000get
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。