Lisp Scheme Part25

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
※ ここは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
2デフォルトの名無しさん: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の話題が中心。
3デフォルトの名無しさん:2009/01/13(火) 23:18:30
面倒くせえ
後は誰か頼むw
4デフォルトの名無しさん: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
5デフォルトの名無しさん:2009/01/14(水) 00:08:56
6デフォルトの名無しさん: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入門書。全文がオンラインで読めます。
7デフォルトの名無しさん: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の力の源泉であるマクロプログラミングを解説。
8デフォルトの名無しさん:2009/01/14(水) 00:10:14
9デフォルトの名無しさん: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
10デフォルトの名無しさん: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
11デフォルトの名無しさん:2009/01/14(水) 00:14:18
□その他(3)□

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

Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/
コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。
12デフォルトの名無しさん: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
13デフォルトの名無しさん: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/
14デフォルトの名無しさん: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
15デフォルトの名無しさん:2009/01/14(水) 00:17:40
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
16デフォルトの名無しさん: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/
17デフォルトの名無しさん: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/
18デフォルトの名無しさん: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/
19デフォルトの名無しさん:2009/01/14(水) 00:22:31
テンプレ長いよ! 連投規制に二回も引っ掛かったよ!

>>3
諦めんなよ!

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

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

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

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

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

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

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

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


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

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


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

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

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






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

むしろ、そういう引用元の概念を、あの歳できっちり理解してるのが末恐ろしいよ。
45デフォルトの名無しさん:2009/01/17(土) 04:16:34
5つの自然言語ならよかったのになあ
46デフォルトの名無しさん:2009/01/17(土) 15:28:41
高速で使えるライブラリのそろったCyan実装が登場したら
Ruby以上に世界中のハッカーにインパクトを与えそう。
47デフォルトの名無しさん:2009/01/17(土) 16:11:52
>>40
ニュータイプって感じだね。
48デフォルトの名無しさん:2009/01/17(土) 20:20:32
私は信じんよ、ニュータイプの存在など
49デフォルトの名無しさん:2009/01/17(土) 21:30:31
既存のpythonのlibraryが使えてマクロありなら便利かもね
50デフォルトの名無しさん:2009/01/17(土) 23:55:38
現状だと荒削りだし、そりゃ言い杉なんじゃないかな。将来は楽しみだけど。
素直に理論面とかハードウェアの知識を学んでいったら楽しみだね。
まだだ、まだ終わらんよ!とか言わされちゃうのかなー
51デフォルトの名無しさん:2009/01/18(日) 00:14:09
本人乙www
52デフォルトの名無しさん:2009/01/18(日) 01:22:19
クワトロ・バジーナ降臨ときいてすっ飛んできました。
アクシズ落とさないでね。
53デフォルトの名無しさん:2009/01/18(日) 09:45:33
wikipediaのclikiのリンクが古いままだ
54デフォルトの名無しさん:2009/01/18(日) 12:38:12
>>53
なんのための「Wiki」pediaだよ
55デフォルトの名無しさん:2009/01/18(日) 12:59:52
>>53,54
直しておきますた ノシ
56デフォルトの名無しさん:2009/01/18(日) 18:08:54
>>37
goshだとexactな数値のlogがとれなかった
57デフォルトの名無しさん:2009/01/18(日) 22:18:02
>>56
他の処理系みた?
Gaucheで数値計算するから・・・
58デフォルトの名無しさん: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
59デフォルトの名無しさん:2009/01/18(日) 23:13:57
gosh> (* 0.4342944819032518 (log 3628800))
6.559763032876794
gosh> (* 0.4342944819032518 (log 93326215443944152681699238856266700490715968264
38162146859296389521759999322991560894146397615651828625369792082722375825118521
0916864000000000000000000000000))
157.97000365471578
60デフォルトの名無しさん:2009/01/18(日) 23:17:51
gosh> (log 402387260077093773543702433923003985719374864210714632543799910429938
51239862902059204420848696940480047998861019719605863166687299480855890132382966
99445909974245040870737599188236277271887325197795059509952761208749754624970436
01418278094646496291056393887437886487337119181045825783647849977012476632889835
95573543251318532395846307555740911426241747434934755342864657661166779739666882
02912073791438537195882498081268678383745597317461360853795345242215865932019280
90878297308431392844403281231558611036976801357304216168747609675871348312025478
58932076716913244842623613141250878020800026168315102734182797770478463586817016
43650241536913982812648102130927612448963599287051149649754199093422215668325720
80821333186116811553615836546984046708975602900950537616475847728421889679646244
94516076535340819890138544248798495995331910172335555660213945039973628075013783
76153071277619268490343526252000158885351473316117021039681759215109077880193931
78114194545257223865541461062892187960223838971476088506276862967146674697562911
23408243920816015378088989396451826324367161676217916890977991190375403127462228
99880051954444142820121873617459926429565817466283029555702990243241531816172104
65832036786906117260158783520751516284225540265170483304226143974286933061690897
61デフォルトの名無しさん: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
62デフォルトの名無しさん:2009/01/18(日) 23:21:43
63デフォルトの名無しさん:2009/01/18(日) 23:25:55
64デフォルトの名無しさん:2009/01/18(日) 23:34:44
一般的なlog10の計算の注意点
http://codepad.org/MjooyHH4
65デフォルトの名無しさん:2009/01/19(月) 11:15:03
on lispの原著が34000円もするなんて・・・
最後のいくつかの章で図がみえないから欲しかったのに
66デフォルトの名無しさん:2009/01/19(月) 17:18:17
何千ページの本なの?
67デフォルトの名無しさん:2009/01/19(月) 20:55:42
http://www.paulgraham.com/onlisp.html
>> 65 ここから落とせない? 著者公開してるけど.
68デフォルトの名無しさん:2009/01/19(月) 21:32:16
>>67
そこのは、例えばFigure 24.1
が見えないよ。他にも見えない図がいくつかあった
69デフォルトの名無しさん:2009/01/19(月) 21:38:09
on lisp $13 しかし日本への送料が4000円
http://www.lulu.com/content/3060872

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

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

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

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

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

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

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


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

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

>LispやHaskelやForthで教養を身につけさせるかすればいいのに
お前は俺かw
123デフォルトの名無しさん:2009/01/30(金) 00:06:09
BFで難易度をってところにワロタ
124デフォルトの名無しさん:2009/01/30(金) 06:22:02
125デフォルトの名無しさん:2009/01/31(土) 00:58:37
Lisperだけで会社作ったら、経営していけるかな。
126デフォルトの名無しさん:2009/01/31(土) 01:03:15
127デフォルトの名無しさん:2009/01/31(土) 05:02:34
漢詩って何かいいね。
128デフォルトの名無しさん:2009/01/31(土) 05:15:40
情景が目に浮かぶようだね。霜ってのがまた良いな。

……ところで、ここ何のスレだっけ?
129デフォルトの名無しさん:2009/01/31(土) 15:23:31
comp.lang.lispに何度か書き込みしてるはずなのに反映されない
なんでだろ
130デフォルトの名無しさん:2009/01/31(土) 16:48:38
ネットニュースだから配送の問題とか?
131デフォルトの名無しさん: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>


何が問題なのでしょうか
132デフォルトの名無しさん:2009/02/01(日) 13:44:27
だからここはサポート掲示板じゃねえっつーの
またどうせバージョン違うんだろ
133デフォルトの名無しさん:2009/02/01(日) 14:06:25
>>131
glibcにOpenBSD由来のstrlcpy(3)はありません。
http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/string/
から持ってきてリンクしてください。
デストリによってはパッケージで提供されているかも知れませんが。
134デフォルトの名無しさん:2009/02/01(日) 14:12:09
やっぱlinuxってきもいなー
135デフォルトの名無しさん: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と同じ動作にするにはどう書けば良いでしょうか?
136デフォルトの名無しさん:2009/02/03(火) 06:59:00
>>135
「'」(クォート)をつかわず、 (list foo bar) としたら良いのでは。
あるいは `(,foo ,bar) (先頭はバッククォートね)かな。
137デフォルトの名無しさん:2009/02/03(火) 09:54:45
letやmapcarが出てくるのにquoteが判らないとは
えらい偏った学び方したんだな
quoteはLISPの基礎
138デフォルトの名無しさん:2009/02/03(火) 13:39:03
>>137
偏ってない。変数とシンボルを混同するのはLISPの名物。
変数とimmutableな文字列なら、混同することはあまりないのだが。

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

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


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

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

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

>>148
mapcar の使い方を確認しようと
Revised5 Report on the Algorithmic Language Scheme
を見てみたところ mapcar は乗っていなかったので
map を使うことにしました。
150デフォルトの名無しさん:2009/02/03(火) 21:12:28
>>135は展開すると
'(foo bar)
== (list 'foo 'bar)
となる。
これと>>143を比べると違うことは明白。
(list 'foo 'bar)ではlistの要素はシンボルになっている。>>135
(list foo bar)ではlistの要素は変数になっている。>>136,>>143
151デフォルトの名無しさん:2009/02/03(火) 21:34:33
初心者ならそこまで気を回さなくてもいいかもしれないけど
(equal? '(foo bar) (list 'foo 'bar)) => #t
だけど
(eq? '(foo bar) (list 'foo 'bar)) => #f ; ほとんどの場合
quoteはquoteでlistとは別物(返り値も含めて、書き換え可能かどうか等も)
返ってくる値がequalなだけ
152デフォルトの名無しさん: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では関数の引数の評価順さえ未規定
153デフォルトの名無しさん:2009/02/03(火) 23:52:11
>>152
>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定

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

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

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

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

165デフォルトの名無しさん:2009/02/05(木) 10:11:52
'の逆はevalだと思ってた
166デフォルトの名無しさん:2009/02/05(木) 10:29:33
>>163
Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし
167デフォルトの名無しさん:2009/02/05(木) 10:39:22
全然問題ない。
168デフォルトの名無しさん:2009/02/05(木) 10:57:09
あっそ
ならLisp-85作った人が入れ忘れたんだね
169デフォルトの名無しさん:2009/02/05(木) 11:05:52
quasi-quoteを効率を保ってきちんと実装するのは意外と難しい。
80年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。
170デフォルトの名無しさん:2009/02/05(木) 11:51:35
Gauche WiLiLiのあんまり目立たないとこに自分の作ったパッケージ書き足す方法はないものだろうか
171デフォルトの名無しさん:2009/02/05(木) 16:28:07
>>156
その関数の引数f,gにシンボルxを引数として渡すと死ねる。
172デフォルトの名無しさん:2009/02/05(木) 18:05:14
やっぱり gensym が必要なんだね。
173デフォルトの名無しさん: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
174デフォルトの名無しさん:2009/02/05(木) 20:23:37
再帰関数だったら?
175デフォルトの名無しさん:2009/02/05(木) 21:49:55
そこまで行くとR5RSでも解決できてるかどうか怪しい
R6RSは再定義禁止だっけ
176デフォルトの名無しさん:2009/02/05(木) 21:59:07
R5RSの件は
(define f (letrec ((f ...)) f))
と書けば安全かも
177デフォルトの名無しさん:2009/02/06(金) 08:10:38
仕様に自由があるから面白い。
178デフォルトの名無しさん:2009/02/06(金) 16:01:07
>>173
で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?
179デフォルトの名無しさん:2009/02/06(金) 17:53:52
>>178
SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね
180デフォルトの名無しさん:2009/02/06(金) 18:39:03
俺はOnLispをお勧めする。
181デフォルトの名無しさん:2009/02/06(金) 19:54:30
ふつうにあのお魚の本でよくないか?
182デフォルトの名無しさん:2009/02/06(金) 20:48:41
処理系のソースで十分
183デフォルトの名無しさん:2009/02/06(金) 21:37:03
184デフォルトの名無しさん:2009/02/06(金) 23:02:05
うわーっ!びっくりした
と避ける
185デフォルトの名無しさん:2009/02/07(土) 08:31:34
>>169
ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは

`(foo ,bar)

とはかけなくて、

(` (foo (, bar)))

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

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

196デフォルトの名無しさん:2009/02/07(土) 22:56:48
Haskellとlispを戦わせたくてしょうがないらしい
197デフォルトの名無しさん:2009/02/07(土) 23:04:03
ムシキングか何かでやってください
198デフォルトの名無しさん: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
199デフォルトの名無しさん:2009/02/07(土) 23:41:50
いちいち貼らなくていいよ
200デフォルトの名無しさん:2009/02/07(土) 23:49:28
>>193
Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?
201デフォルトの名無しさん:2009/02/08(日) 00:02:40
外に出なくても済む方がいいです
202デフォルトの名無しさん:2009/02/08(日) 07:17:52
λ
203デフォルトの名無しさん: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
204デフォルトの名無しさん:2009/02/08(日) 12:37:31
>>203
えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)
205デフォルトの名無しさん:2009/02/08(日) 13:23:49
>>204
間違えました
(eval (for-eval-then-quote x))
->'1
206デフォルトの名無しさん:2009/02/09(月) 01:08:08
loopマクロ勉強したのにiterateの方が使われてたり
言語の発展はゆるやかだ
とか言ってたのどこのどいつだ
207デフォルトの名無しさん:2009/02/09(月) 01:52:43
>>206
それ言語じゃなくてライブラリの発展だと思うんだが……。
208デフォルトの名無しさん:2009/02/09(月) 02:14:28
209デフォルトの名無しさん: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
210デフォルトの名無しさん:2009/02/10(火) 13:48:31
kill
211デフォルトの名無しさん:2009/02/10(火) 15:30:33
連邦のモビルスーツは化け物か!?
212デフォルトの名無しさん:2009/02/11(水) 05:14:36
array->list 変換関数がみつからない
自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))
213デフォルトの名無しさん:2009/02/11(水) 23:55:21
>>自分で書くものなの?
R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?
214デフォルトの名無しさん:2009/02/12(木) 00:02:23
#2A(..)ってのはCommon Lispの二次元配列かな。
ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。
215デフォルトの名無しさん:2009/02/12(木) 03:21:33
lispに興味があるんですが、
いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー
216デフォルトの名無しさん: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
あたりを読んでから買えばいいんじゃないでしょうか。
217デフォルトの名無しさん:2009/02/12(木) 05:46:35
>>215
SICP読んでみて、自分に合いそうなら買うのがいいとおも。
http://mitpress.mit.edu/sicp/
218デフォルトの名無しさん:2009/02/12(木) 10:05:25
SICP日本語版はちょっと高い
219デフォルトの名無しさん:2009/02/12(木) 10:48:56
なんでいきなりSICPなんじゃーー
220デフォルトの名無しさん:2009/02/12(木) 11:11:47
「良い本だ」ってよくScheme関連のWEBに載ってるから。
221デフォルトの名無しさん:2009/02/12(木) 11:20:35
良い本には違いないけど、
SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。
222デフォルトの名無しさん:2009/02/12(木) 12:06:25
maximaが使いたいだけだったので
on lispはじっくり読んだが
SICPは問題もやらずに流し読み
223デフォルトの名無しさん:2009/02/12(木) 20:13:48
SICP は Scheme の本というわけではない。
Scheme を使って解説してる本。
224デフォルトの名無しさん:2009/02/12(木) 20:19:01
>>223
え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。

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

っ人生
228デフォルトの名無しさん:2009/02/12(木) 20:36:31
>>226
本のタイトル
229デフォルトの名無しさん:2009/02/12(木) 20:44:04
>>226
降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識
230デフォルトの名無しさん:2009/02/13(金) 01:35:07
SICP読んだら魔法使いになれますか?
231デフォルトの名無しさん:2009/02/13(金) 07:26:27
>>230
なれません。
232デフォルトの名無しさん:2009/02/13(金) 07:45:20
>>230
なれます。
就活に有利です。
233デフォルトの名無しさん:2009/02/13(金) 11:01:41
>>230
さあ、30歳になるまで貞操を守る作業に戻るんだ
234デフォルトの名無しさん:2009/02/13(金) 14:39:58
30歳を越えてるのですがSICPは読めますか?
235デフォルトの名無しさん:2009/02/13(金) 14:51:53
読めなかったら困ると思いますよ
236デフォルトの名無しさん:2009/02/13(金) 15:01:35
60歳とかでも読めるらしいですよ
読めなかったら数学勉強してから再挑戦しましょう
237デフォルトの名無しさん:2009/02/13(金) 19:19:40
30歳過ぎてもSICP読むと童貞になりますか?
238デフォルトの名無しさん:2009/02/13(金) 19:34:56
俺はSICPを読んで、背が10cm伸びたよ
239デフォルトの名無しさん:2009/02/13(金) 19:49:08
SICP読んで宝くじ当たったよ。
240デフォルトの名無しさん:2009/02/13(金) 19:50:51
もしかして訳者の和田さんってスーフリの和田さん?
241デフォルトの名無しさん:2009/02/13(金) 19:52:39
プログラマ50人に1人ぐらいはSICP読んでるよね。
242デフォルトの名無しさん:2009/02/13(金) 19:54:25
>>250
和田って俺のことだけど。
243デフォルトの名無しさん:2009/02/13(金) 20:28:13
SICP未読で許されるのは小学生までだよね!
244デフォルトの名無しさん:2009/02/13(金) 22:31:02
ちょっと待ってくれ。「人生に必要な知恵はぜんぶ幼稚園の砂場で学んだ」とあるように、幼稚園のうちに読んでおくべきものではないだろうか?
245デフォルトの名無しさん:2009/02/13(金) 22:34:17
なんてこったい/(^o^)\
246デフォルトの名無しさん:2009/02/13(金) 22:52:02
人生に必要な知恵はぜんぶサンドボックで学んだ。
247デフォルトの名無しさん:2009/02/13(金) 22:55:25
俺、人生に必要な知恵はぜんぶ死後の世界で学ぶんだ…
248デフォルトの名無しさん:2009/02/13(金) 23:02:42
次はアメンボに生まれてきたりして
249デフォルトの名無しさん:2009/02/13(金) 23:07:08
おれも人生に必要なことは幼稚園で一通り学んだ覚えがあるな
250デフォルトの名無しさん:2009/02/13(金) 23:14:11
>>249
ってことは、幼稚園で、チュー済ませたタイプか。
251デフォルトの名無しさん:2009/02/13(金) 23:45:23
登り棒オナニーなら幼稚園の時に覚えました
252デフォルトの名無しさん:2009/02/14(土) 00:48:59
SICP以外誇れるものはないのか
253デフォルトの名無しさん:2009/02/14(土) 00:54:55
essential of なんたらとかreasoned schemerとかもいいかも
254デフォルトの名無しさん:2009/02/14(土) 01:00:19
時代は宝石の名前の言語じゃね?
255デフォルトの名無しさん:2009/02/14(土) 01:05:57
党員の友人とMercuryを学んでいます。
256デフォルトの名無しさん:2009/02/14(土) 01:13:10
Perlのことですね、わかります
257デフォルトの名無しさん:2009/02/14(土) 01:27:06
あのバージョン6がすべった言語のことか
258デフォルトの名無しさん:2009/02/14(土) 01:28:03
>>255
それは金属であって宝石ではない(゚д゚)!
259デフォルトの名無しさん:2009/02/14(土) 01:28:14
真珠の綴りはPerlじゃないぞ・・・
260デフォルトの名無しさん:2009/02/14(土) 01:32:50
まぁなんにせよ変な宗教言語は使いたくないわなw
261デフォルトの名無しさん:2009/02/14(土) 05:43:57
()とか幼稚園じゃ習わなかった
262デフォルトの名無しさん:2009/02/14(土) 09:40:03
幼稚園の時、世の中はすべてnilだと習った。
263デフォルトの名無しさん:2009/02/14(土) 09:44:22
うちの幼稚園ではnil派と()派が闘争を繰り返していた。
264デフォルトの名無しさん:2009/02/14(土) 10:01:49
little schemerって幼稚園児でも理解できるように書かれたんだっけ
265デフォルトの名無しさん:2009/02/14(土) 11:41:33
誰が象のラムダ君役をするかで喧嘩になってみっちゃんが泣いた。
266デフォルトの名無しさん:2009/02/14(土) 11:43:25
ここは幼稚園で人生のすべてが再帰的だと悟ったみなさんが集まるスレですかね。
267デフォルトの名無しさん:2009/02/14(土) 11:45:16
継続渡しスタイルで幼稚園ドロップアウトした。
268デフォルトの名無しさん:2009/02/14(土) 12:36:37
ところで、
チョコはいくつもらえましたか
269デフォルトの名無しさん:2009/02/14(土) 12:38:38
カーチャンから一個、姉さんから一個
270デフォルトの名無しさん:2009/02/14(土) 12:44:26
(´;ω;`)
271デフォルトの名無しさん:2009/02/14(土) 12:46:02
ええい、FOR文でもらえた奴はいないのか!
272デフォルトの名無しさん:2009/02/14(土) 12:50:04
「末尾再帰!」と叫んで保母さんのスカートをめくったのはいい思い出
273デフォルトの名無しさん: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.

これおもしろそうね。

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

http://www.turbozen.com/sourceCode/TinyLisp/
http://programming.nu/
294デフォルトの名無しさん: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))
295デフォルトの名無しさん:2009/02/18(水) 04:25:47
(apply map (cons + list))
296デフォルトの名無しさん:2009/02/18(水) 04:36:47
>>295
ありがとうございます!
297デフォルトの名無しさん:2009/02/19(木) 10:24:17
>>293
wikiのテンプレに書き加えておいて。
298デフォルトの名無しさん:2009/02/20(金) 00:27:38
(setq list1 '((message "X") (message "Y")))
があったとして、list1 の各要素を順番に実行していく方法を教えてください。
299デフォルトの名無しさん:2009/02/20(金) 00:38:32
(eval (cons 'progn list1))
こういう話?
それともこんなのをお望み?
(mapcar #'(lambda (x) (apply (car x) (cdr x))) list1)
300デフォルトの名無しさん:2009/02/20(金) 00:44:13
(mapcar #'eval '((message "X") (message "Y")))
とかでもいいのか。
301デフォルトの名無しさん: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")
302298:2009/02/20(金) 03:13:07
>>299
>(eval (cons 'progn list1))

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

(let ((list1 '((display "X") (display "Y"))))
 (map eval list1))
⇒XY(#<void> #<void>)
304デフォルトの名無しさん: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)) に比べて冗長だと感じます
もっと良い書き方はありますか?
305デフォルトの名無しさん:2009/02/21(土) 01:51:17
書き方というか、片方向リストの仕様だから
306デフォルトの名無しさん:2009/02/21(土) 03:11:26
(define (wahacons a b) (append a (list b)))
(wahacons '(1 2) 3)
307デフォルトの名無しさん:2009/02/21(土) 05:12:06
>>305
仕様ですか…。
>>306
関数を書いてしまえば良かったんですね
ありがとうございます
308デフォルトの名無しさん:2009/02/21(土) 06:25:59
>>307
quasiquoteは?

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

> `(,@x 3)
(1 2 3)
310デフォルトの名無しさん:2009/02/21(土) 23:02:45
Luaスレがschemeネタで盛り上がってるw
311デフォルトの名無しさん:2009/02/22(日) 00:35:49
ちょっと見てくルア
312デフォルトの名無しさん:2009/02/22(日) 01:21:09
見てきたけど、あんまり面白い流れでも無かった。
速いなら実装を参考にしよう、とか建設的な意見が出る訳でもなく、
単にSchemeイラネ、だし。
313デフォルトの名無しさん:2009/02/22(日) 04:20:15
括弧うぜえとか。
314デフォルトの名無しさん:2009/02/22(日) 09:18:44
Schemeは作るの簡単とか。
315デフォルトの名無しさん:2009/02/22(日) 09:36:45
>>312
Luaってのはどういう言語かもよく知らないんだが、
処理系は結構よくできているみたいで遅くはないよ。
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&box=1
316デフォルトの名無しさん:2009/02/22(日) 14:35:16
ypsilon軍団とgauche軍団どっちが多い?
317デフォルトの名無しさん: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


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

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

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

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

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

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

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

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

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

俺は盛り上がった派だけどw
最適化の解説の論文は勉強になった
339デフォルトの名無しさん:2009/02/23(月) 21:26:10
schemeのマクロを使って 
見た目から括弧を無くしていくことって出来ますか? 
例えば括弧のない1 + 2を3と評価するとか 
for リスト do 処理 done 
みたいな構文がmapの意味で動くようにしてみたい 
340デフォルトの名無しさん:2009/02/23(月) 21:34:29
>>339
まえにどっかでみたことがある。srfiなんとか だったと思う。
341デフォルトの名無しさん:2009/02/24(火) 01:17:57
SRFI 49のI-expressionsは、インデントで構文木を表す表記法であって、
マクロは関係なかった気がするんだけど、違ったっけ?
342デフォルトの名無しさん: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
343デフォルトの名無しさん:2009/02/24(火) 12:45:19
つ Standard Lispの記号モード
344デフォルトの名無しさん:2009/02/24(火) 15:44:53
>>339
「schemeのマクロを使って」も
マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
ただしこの3つをなくするのはRnRSではできない。
処理系によってはリーダマクロをサポートしているのでそれを使うと可。
345デフォルトの名無しさん: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の拡張で優先順位を計算して括弧を省略ってページなら見つけましたが
そういった話でしょうか?
346デフォルトの名無しさん: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
347デフォルトの名無しさん:2009/02/24(火) 20:44:04
5かよ
348デフォルトの名無しさん:2009/02/24(火) 20:44:55
> Schemeには演算子の優先順位がないのが原因でしょうね
> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
> これ非常に興味あるんですが、どういうことでしょうか?
そうゆう reader を作ればいいじゃね?
作るだけだったら誰でも作れると思うし…
349デフォルトの名無しさん:2009/02/24(火) 20:45:29
>>345
俺は344じゃないけど、344の言ってることは違う。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

これがメリケンだ!?
417デフォルトの名無しさん:2009/03/03(火) 02:06:13
>>416
made with secret alien technologyのシャツが無いなんて信じられん
418デフォルトの名無しさん:2009/03/03(火) 03:44:57
schemer多いのはシンプルだからなんだろうか
419デフォルトの名無しさん:2009/03/03(火) 03:50:50
Qi ECLでは駄目なんだ・・・
高速化って書いてるから期待したのに
420デフォルトの名無しさん: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)
とか
421デフォルトの名無しさん:2009/03/03(火) 08:26:08
>>414
Planet LispってRSSあるよ。
422デフォルトの名無しさん:2009/03/03(火) 09:50:56
>>421
おおっ、有り難うございます!! さっそくGoogle Readerに追加しました。
423デフォルトの名無しさん:2009/03/03(火) 12:07:00
>>420 3行目 srfi-26使って(gaucheならuse不要)
(map (cut assoc <> request) '(hoge fuga))
424デフォルトの名無しさん:2009/03/03(火) 12:13:58
ハッシュテーブルに代入したら負けですねわかります
425デフォルトの名無しさん: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)

とくに簡潔ではないな。
426デフォルトの名無しさん: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))
427デフォルトの名無しさん: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))))))
428デフォルトの名無しさん: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))))))
429デフォルトの名無しさん: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];;
430デフォルトの名無しさん:2009/03/03(火) 23:23:52
>>420>>425
サンクス。今の自分じゃ全然理解できないけどorz
431デフォルトの名無しさん:2009/03/03(火) 23:25:52
前きたquote判ってない人かね
432デフォルトの名無しさん:2009/03/03(火) 23:28:26
>>429
`(,mujunritu ,haityuritu)または(list mujunritu haityuritu)
'(mujunritu haityuritu)との違いわかるかな
433前きたquote判ってない人:2009/03/03(火) 23:55:18
>>431
別人です。あれからROMしかしてないですよ。
434デフォルトの名無しさん: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^)/
しかし、関数はおいといて、この考えでたぶん、大丈夫ですよね?
435デフォルトの名無しさん:2009/03/05(木) 01:20:53
>>434
つ「eval」
436デフォルトの名無しさん:2009/03/05(木) 02:00:08
quoteとevalは静的スコープな言語にふさわしくないとつくづく思う
437デフォルトの名無しさん:2009/03/05(木) 02:12:51
スコープと評価が?
438デフォルトの名無しさん:2009/03/05(木) 02:50:43
schemeのシンボルは文字列に毛の生えた特殊オブジェクトと思えばよろし。
プログラム内でそのシンボルに何が束縛されているかとは基本的に全く関係ない。
439デフォルトの名無しさん:2009/03/05(木) 07:25:51
R5RS の eval だと、その時点の環境での評価ができないから symbol-function の代わりにはできないし。
440デフォルトの名無しさん:2009/03/05(木) 12:06:53
あくまでも、定義中の名前はシンボルではなくただの変数の入れ物の
名前として使われる。また、プログラムを実行するには変数の位置を
表現できれば名前のような冗長な情報は必要ない。
よって名前は実行前のある時点でアドレスに変換されていると考えるべき。

evalやCLのsymbol-functionみたいな実行時にシンボルからその位置情報へ
変換する仕組みを作るとなると、処理系のインタプリタやコンパイラ相当を
必要時に起動するのと全く事になり、非常に馬鹿げたコストが掛かる。
441デフォルトの名無しさん:2009/03/05(木) 12:13:45
>>436
evalはともかくquoteはこの件と関係ない
442デフォルトの名無しさん: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
443デフォルトの名無しさん:2009/03/07(土) 12:49:38
急に流れが止まったから釣りかと思ったが
やっと>>422の言っていることがわかった
symbol-functionってグローバルな関数定義しか参照しないんだな
444デフォルトの名無しさん:2009/03/07(土) 13:48:24
schemeにシンボルが無いってことが少し分かってきた
やっぱ Common Lisp 最強だな!
445デフォルトの名無しさん: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の結果を使う。
446デフォルトの名無しさん: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もそんなにコストかからんぜ、ってこと?
447デフォルトの名無しさん:2009/03/07(土) 17:43:08
>>446
442,445はCommon Lispのコードっていうのは分かってる?

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

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

evalは外側のローカル変数xの定義を参照できないから
>>457では、事前にxのところを値で置き換えたものをevalに渡している。
459デフォルトの名無しさん:2009/03/08(日) 19:58:27
つーかevalは他のローカル変数のことなんか知らんから。
関数の引数として渡されたコンテクストで評価するしかない。
それを知らせる手段として(current-environment)みたいなものが
処理系にあればやりたいことは実現できるんじゃないか。
460デフォルトの名無しさん: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で少し違う
461デフォルトの名無しさん:2009/03/08(日) 21:10:14
(let ((x 10))
(print (eval '(+ x x))))

*** - EVAL: variable X has no value

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

でいけると思ったのですが、エラーメッセージが帰ってきます。
どこがまずいのでしょうか?
464デフォルトの名無しさん:2009/03/09(月) 08:57:46
コンビネータパーサを作ったから
せっかくなのでR5RSかR6RS準拠のパーサを書いてみようと思ったんだが
全体のBNFのリストってどこかにまとまってる?
仕様書をざっと見した感じでは、
ばらばらにちょっとずつBNFが載っているように感じるんだが
仕様書ってのはこんな感じのもん?
465デフォルトの名無しさん:2009/03/09(月) 09:02:30
Schemeの仕様書はこんな感じのもん。
まぁLispでBNFもくそもないが。
466デフォルトの名無しさん: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はその木構造だけを見る。

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

>>449
そういえばEuLispにはevalがなかったな。
おもしろい試みだったけどあっさりと廃れたね。
YooTooはまだ更新されているみたいだけど。
R6RSのmoduleも一部影響受けてるね。
470デフォルトの名無しさん: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だと認識してくれないようです。
471デフォルトの名無しさん:2009/03/10(火) 23:41:18
>>465-469
ありがとう。こういうもんか
特に466の説明はとてもわかりやすい。
R5RSのほうはBNFついてそうだから
こっちやってみよかな

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

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

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

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

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

環境を書いていませんでした申し訳ありません。
R5RSで行うにはどうすれば良いでしょうか?
476デフォルトの名無しさん:2009/03/11(水) 07:39:05
R5RSにそんな高レベルな標準関数ないと思う
477デフォルトの名無しさん:2009/03/11(水) 08:52:04
R5RSで動く出来合いのライブラリが欲しいってことかね
478472:2009/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)))))
479デフォルトの名無しさん:2009/03/11(水) 11:47:54
>>472
SRFI 13 使えばいいんじゃね

(let ((i (string-index-right s #¥.)))
(if i
(substring s 0 i)
s))
480デフォルトの名無しさん: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という手続きが割り当てられている
481デフォルトの名無しさん: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
を可能にしたいのです。
482デフォルトの名無しさん:2009/03/11(水) 16:09:20
>>481
処理系は?
483デフォルトの名無しさん:2009/03/11(水) 16:16:34
>>482
gaucheです
484デフォルトの名無しさん: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使わないとだめかも。
485デフォルトの名無しさん:2009/03/11(水) 19:37:09
>>484
それだとクラス内に辞書を確保して、
setterとgetterをスロット操作のようにエミュレートするってことですね。
なるほど〜
ありがとうございます。

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

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

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

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

生産効率性については、まだよくわからないけど
501デフォルトの名無しさん: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))))))
502デフォルトの名無しさん: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))))))
503502:2009/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))))))
504デフォルトの名無しさん:2009/03/14(土) 08:58:47
>>502
突っ込もうと思っていました
最初のは、(remove 5 '(1 2 3 2))でもコケますね

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

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

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

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

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

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

オブジェト志向なら、
 a = stack.pop()
stack.push(b)
 …
とか書くわけジャン。
513デフォルトの名無しさん: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)))))
514デフォルトの名無しさん: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)
515デフォルトの名無しさん:2009/03/14(土) 22:43:02
>>513
(規制されてて書き込みのタイミングが悪かったのですが・・)
そういえば、Schemeのライブラリは、こういう形のほうが多いですね
参考にさせてもらいます
ありがとうございました
516デフォルトの名無しさん:2009/03/14(土) 23:03:47
最近のスタックインターフェースは、
top, pop, pushと三つに分けるのが主流だよ。
もはやイディオムになっているといっていい。
517デフォルトの名無しさん: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))))
518デフォルトの名無しさん:2009/03/15(日) 00:10:58
topってなんや?
519デフォルトの名無しさん:2009/03/15(日) 00:11:52
解決
あとemptyっていうのも重要っぽいね
520デフォルトの名無しさん: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
521デフォルトの名無しさん:2009/03/15(日) 03:12:22
どうせそんなのはppしたら消えてしまうでしょ。
意味がある試みとは思えない。
522デフォルトの名無しさん:2009/03/15(日) 03:32:55
つーかカッコが何種類も入り乱れるのは激しくウザい
523デフォルトの名無しさん:2009/03/15(日) 04:59:08
世間でC言語みたいなものが好まれるのは、
演算子を含む式と文とのバランスが良く、
メリハリが付くからだと思う。
LISPは書式が関数も式も文も全く同じ規則で
さらにそれを括る括弧に極端に縛られる。
C言語でも関数呼び出しだけで書いていけば
同じ印象になるが、C言語では関数のネストなんて
書こうと思わなければほとんどする必要がない。
要するに括弧の形を変えたところであまり効果はない。
S式ベースでうだうだ考えるよりは、括弧に縛られない
都合の良い構文フロントエンドを作った方がマシである。
524デフォルトの名無しさん:2009/03/15(日) 05:20:32
俺は好きでよく使っているけどなぁ。
処理系によっては()[]{}の3種類が使えるから、数学の式を書くときみたいな感覚で。
525デフォルトの名無しさん: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式というより、前置記法では解決できない問題と認識している。
526デフォルトの名無しさん:2009/03/15(日) 05:46:04
前置記法を排除すればS式でも(a -> b -> c)と書ける。
ここで、aをマクロ的に加工して実装してしまう事も考えられる。
が、それが現実的ではない事も判っている。
自分で演算子を作り、管理するのと同じ事になる。
527デフォルトの名無しさん:2009/03/15(日) 05:58:26
また>>526の(a -> b -> c)のように、
S式内で独自言語を構築する場合、
独自言語の構文としての括弧もあるので、
S式のくくりの括弧がどうしても邪魔に見える。
ここまでやるならもうS式である意味がない。
a->b->cと書きたいならそのまま書けばいい。
528デフォルトの名無しさん: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(); }
529デフォルトの名無しさん:2009/03/15(日) 06:54:38
入門者なんですが、shchemeでS式以外の書き方の標準構文ってあるんでしょうか?

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

採用する理由になった論文の疑似コードもみてみたいところだが
530デフォルトの名無しさん:2009/03/15(日) 07:12:55
>>525
refが関数なら、(define ref* (lambda x (fold ref (car x) (cdr x))) で
(ref* a 'b 'c) って書けるんじゃない。
つか一般に二項演算子があるならfoldしてやりゃ不定長でも扱えるでしょ。
マクロならマクロでくるんでやればいいだろうし。
まあquoteは必要だけど、それは別の話だよね。
531デフォルトの名無しさん: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
正規表現云々は知らないが、どっちもあまり流行ってない。
532デフォルトの名無しさん:2009/03/15(日) 10:10:46
そういえば、syntax が安定するまでは yacc を使って試行錯誤して
安定したら手書きの parser を使うという話を聞いたことがある。
lisper は逆に yacc より更に柔軟な方向に進もうとするのか。
533デフォルトの名無しさん:2009/03/15(日) 10:31:03
リードマクロがあるからね。
534デフォルトの名無しさん:2009/03/15(日) 11:54:13
>>528
マクロを忘れてるぜ。
コードがS式だからマクロ変換子は単なるリスト操作をすれば済むんだろう。
Scheme のマクロは単なるリスト操作じゃないけど、S式は大前提だ。
リーダーマクロにしたところで、内部的にはやっぱりS式だしな。
535デフォルトの名無しさん:2009/03/15(日) 12:13:45
リードマクロってキャラクタストリームベースじゃなかったっけ?
536デフォルトの名無しさん: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"
537デフォルトの名無しさん: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]
538デフォルトの名無しさん: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>
539デフォルトの名無しさん:2009/03/15(日) 22:58:47
(print (foo 21)) or (write (foo 21))
トップレベルプリンタが同一オブジェクトを複数回出力しないだけの問題では?
540デフォルトの名無しさん:2009/03/16(月) 02:04:38
>>539
どういう意味ですか?
自分なりに解釈して、やってみたけど、ダメでした
541デフォルトの名無しさん:2009/03/16(月) 04:02:54
>>540
>>539 の言っているのは gosh の出力についてだね。
guile のエラーについては式が guile にちゃんと渡されてない感じがする。
プロンプトが複数回表示されてるあたり、
式が複数に分割されて渡されている形になってそうなんだけど。
gosh だと C-x C-e でちゃんと動いてるのかな。
542デフォルトの名無しさん:2009/03/16(月) 06:02:16
アドバイスをきっかけに解決しました
タブによるインデント構造をつくるとこのエラーになるみたいです
スペースに置換してみたら、通りました
おとといまでは、普通に使えていた気がしたので、謎です
特別な設定をしたとしたら、メニューバーのschme欄をちょっと触ったときなのかな
触ったあとに特別不都合は、なかった気がしたけど
>>541
> >>539 の言っているのは gosh の出力についてだね。
把握しました

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

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

気に掛けてくださったみなさま、お世話になりました
543デフォルトの名無しさん:2009/03/16(月) 07:18:20
ああそっちの問題か
readlineが悪さをしてる予感
emacsで使うときはactivate-readlineを無効にしたらどうでしょう
544デフォルトの名無しさん: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を眺めてみることにします
545デフォルトの名無しさん: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に対する利点:速い。日本語のドキュメントが多い。マルチバイト文字がサポートされている。
546デフォルトの名無しさん: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")))
547デフォルトの名無しさん:2009/03/16(月) 22:43:57
activate-readlineはemacsからrun-schemeで使うときは不要。っていうか邪魔。
(or (string=? "dumb" (getenv "TERM")) (activate-readline))
とか書けばいいんじゃないかな
(run-schemeのときは環境変数TERMがdumbに設定されるから)
548デフォルトの名無しさん: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などを参考にするといいと思います
549デフォルトの名無しさん:2009/03/16(月) 23:11:27
>>543
なるほど、readline が \t を食っちゃうのか。
知らないと意外とはまりそうだな。覚えておこう。
550デフォルトの名無しさん:2009/03/16(月) 23:26:15
逆に言えばreadlineでシンボル補完が効きます
551デフォルトの名無しさん:2009/03/17(火) 00:01:45
ドキュメントとデバッグ環境でGuileを選ぶってのも珍しい気がする。
そういう場合はPLTとかに行きそうなもんだけど。
552デフォルトの名無しさん: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がいっぱいひっかかりますね
553デフォルトの名無しさん: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が最も充実してますが。
554デフォルトの名無しさん:2009/03/17(火) 04:34:29
>>552
gaucheにはhelp関数は無いけどinfo関数というのがある。
ただ、表示されるのが「その関数を含むinfoの1ページ」なのでちょっと面倒。
emacsから使ってるなら、カーソルのある関数のinfoエントリを一発で*info*バッファに
表示するelispが昔MLに流れたことがあった気がする。
555デフォルトの名無しさん:2009/03/17(火) 04:57:19
describeもaproposも使えるけど
なんだかんだでhyperspecとslimeが使いやすいやね
556552:2009/03/17(火) 05:23:33
自己解決しました
コピペまんまだと、activate-readlineきいていました
"dumb"のところを"emacs"に変えればいいわけですね
当たり前と言えば、当たり前なんだけど

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

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

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

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

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

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

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

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

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


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

この違いは何?
565デフォルトの名無しさん:2009/03/18(水) 12:46:13
Googleの中の人に聞いて下さい。
566デフォルトの名無しさん:2009/03/18(水) 12:48:47
schemeしか知らないけど、lispでぐぐればいいんじゃない?
lisp --> common lisp
scheme --> scheme
という理解だけど
567デフォルトの名無しさん:2009/03/18(水) 12:48:51
&hl=en付けたら2chにもhatenaにもいきあたらないな
568デフォルトの名無しさん:2009/03/18(水) 13:00:54
>564
実用性があるか無いか、実アプリ開発に使ってるか否かの差だとオモ。
言い方を変えればSchemeは教育的効果は高いが…
569デフォルトの名無しさん:2009/03/18(水) 13:30:55
おっとBASICの悪口はそこまでだ
570デフォルトの名無しさん:2009/03/18(水) 15:54:36
schemeで、(car '())や(cdr '())の結果はどうなるんしょうか?
昔読んだLISPの本か何かでnilのcarやcdrはnilになるという
説明を見た気がするのですが、schemeにも当てはまるんでしょうか。
571デフォルトの名無しさん:2009/03/18(水) 16:04:13
r5rsでは空のリストにcar,cdrはエラーって定義されてるな
572デフォルトの名無しさん:2009/03/18(水) 16:05:36
R5RS 6.3.2
573デフォルトの名無しさん:2009/03/18(水) 16:06:31
r5rs-ja.pdfにありました。ありがとうございました。
574デフォルトの名無しさん:2009/03/18(水) 21:02:29
>>497
オレ、とある図書館でその本の順番待ちなんだが、
まさかオマエが止めてるのか?w
575デフォルトの名無しさん:2009/03/18(水) 22:54:43
なんだこいつ
576デフォルトの名無しさん:2009/03/18(水) 23:33:46
これをLIFOと言います
577デフォルトの名無しさん:2009/03/18(水) 23:59:26
後入れ中出しだっけ
578デフォルトの名無しさん:2009/03/19(木) 00:29:47
アッー!
579デフォルトの名無しさん: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にとってソースの動きを追うってどんな感じなんですか?
個人的にデバッガを使って、「ソースをよく読み、ときどき書き」というのをしたいんですが
580デフォルトの名無しさん:2009/03/19(木) 05:47:16
>>579
そのすぐ下に書いてある通りでは。
デバッガを使わずとも、replで個々の手続きを呼べるので、色々な入力を与えて出力を
見るかな。入力と出力の関係がすぐに把握できない(手続き内でステップ実行したいと思う)
ようであればたぶん手続きが(あなたにとって)大きすぎる。
581デフォルトの名無しさん:2009/03/19(木) 07:32:34
で、何のソースを読みたいの?
抽象論はもう飽きたよ
582デフォルトの名無しさん:2009/03/19(木) 08:30:31
>C(手続き型言語)との対比でschemeにとってソースの動きを追うってどんな感じなんですか?
そういえばあんまり追ったことないかも・・・スタックトレースが1000行と出ちゃうから。面倒なんでデバッガ使わなくなった。"Type (debug) to enter the debugger."とか出されても、もう無視(w
583デフォルトの名無しさん:2009/03/19(木) 08:34:34
>>580
処理系への絶対的な信頼性ってこと?
効率的なデバッグ術の個人の差ってかなり開きがありそうだね
>>581
日本語サイトのサンプルとか、とりあえず、デバッグツールで読みたいなあと思って

バグでハマって、解決はしたけど、ものすごく時間がかかった場合は
バグの見つけ方のポイントを教えてくださいね
584デフォルトの名無しさん: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とかに書き換えて、その段階での出力をみます。

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

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

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

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



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

ていうか本なくしちゃったw
628デフォルトの名無しさん:2009/03/24(火) 23:30:41
>> 627
細かいこと気にするなって。買って返せば無問題♪
629デフォルトの名無しさん:2009/03/25(水) 01:11:21
>>621とか>>627とか、こういう奴がいるから、
図書館の中の人が苦労するんだろうな、と思った。
釣りならいいけど、素でその態度なら頭おかしいだろ。
630デフォルトの名無しさん:2009/03/25(水) 01:22:12
わざわざ言うことかw
631デフォルトの名無しさん:2009/03/25(水) 02:27:05
絶版Lisp本ではものまね鳥と竹内先生の本が読みたいな。
あとLisp以外ではPrologの技芸。ヤフオクみたら29500円とかwwwwww
オンデマンドで売ってくれくれ。
632デフォルトの名無しさん:2009/03/25(水) 02:44:01
Prologの技芸ってたまに名前を聞くんだが、そんなに偉大な本だったのか・・・・・
633デフォルトの名無しさん:2009/03/25(水) 02:49:05
Prologの技芸持ってるけど読んでないぜ
そんなプレミア付きとは知らなんだ
634 ◆7y/z31W.Wg :2009/03/25(水) 02:55:24
>>633
よかったら読んだら売ってよ。1万なら買うよ。
635デフォルトの名無しさん:2009/03/25(水) 02:56:26
「Prologの技芸」はProlog版SICP。
SICPはアーキテクチャよりだけど、こっちは応用より。
内容グーで印刷ショボ。
636 ◆7y/z31W.Wg :2009/03/25(水) 03:01:49
間違ったヤフオクじゃなくてアマゾンだった。> 29500円
637デフォルトの名無しさん:2009/03/25(水) 06:41:10
これって業者がつり上げてんの?ひどい値段だなぁ。
638デフォルトの名無しさん:2009/03/25(水) 09:28:43
>Prolog版SICP
なるほど
639デフォルトの名無しさん:2009/03/25(水) 11:06:13
the art of prologの和訳本だよね
640デフォルトの名無しさん:2009/03/25(水) 13:22:05
MITの教科書か。既に新しい版が出てるみたいだね。
641デフォルトの名無しさん:2009/03/25(水) 14:53:33
話ぶった切ってすまないけど、SchemeでProcessingみたいに
Arduinoを制御することができる処理系ってあるのかな?
GaucheとかPLTってどうなんだろ?
できればやりかた書いてあるリンク教えてください。
642デフォルトの名無しさん:2009/03/25(水) 15:20:28
>>641
chicken scheme + avr-gcc + avrdude
http://1010.co.uk/arduino.html#2
643デフォルトの名無しさん:2009/03/25(水) 15:55:03
一方ポールグレアムはクラウドを制御した
644デフォルトの名無しさん:2009/03/25(水) 16:08:31
crowdコンピューター?
645デフォルトの名無しさん:2009/03/25(水) 22:24:21
生きのこる術は大衆言語。
646デフォルトの名無しさん:2009/03/25(水) 23:02:14
だが気を付けたまえ。
647デフォルトの名無しさん: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はまだないですね。
最近はメモリサイズが大分大きくなったようですが・・・
648デフォルトの名無しさん:2009/03/26(木) 18:55:27
>>647
>Arduino上のというかAVR上のSchemeはまだないですね。
つーかそもそもmegaの内蔵SRAM程度では厳しい。
外部コンパイルしてAVR上でVMを走らせる
みたいな使い方ならできるだろうけど。
マイコンでscheme動かすならアドレス空間大きめの
ものを選んだ方がいい。
649デフォルトの名無しさん:2009/03/27(金) 03:23:50
>>648
PICでSchemeが動いているw
650デフォルトの名無しさん:2009/03/27(金) 08:03:22
atmegaでも無理なのか
ならschemeからマシン語のコードを吐くコンパイラというのならどうかな
651デフォルトの名無しさん:2009/03/27(金) 22:10:45
ハーバードアーキテクチャだからフラッシュとSRAMの扱いが違うんだよね
フラッシュにオンタイムで書き込むにはブートローダもどきがいる
652デフォルトの名無しさん:2009/03/28(土) 15:07:29
Schemeじゃないけどこんなのはあるよ。
簡単なλ計算のインタプリタをArduinoで動かしてる。

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

W=C(BMR)=λab.bbb≠λab.abbとW=SS(KI)ってどういう意味なの?
暗号にしかみえないw
658デフォルトの名無しさん:2009/03/31(火) 22:25:41
撤回するな!CLかSchemeで実装してみろ!
と焚きつけてみる
659デフォルトの名無しさん: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殿に計算してもらえば良かったわけだ
今から試してきます。気づかせてくれてさんきゅ
660デフォルトの名無しさん: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)
661デフォルトの名無しさん:2009/04/01(水) 00:49:42
>>660
2割ぐらい理解したw
あとで再挑戦・再理解してみる
lambdaを3つ使うのを初めてみた
おれはlambdaを3つ使うコードを書くことがあるのだろうか

このロジック(表記法?)は、どういう用途で使えそうなの?
662デフォルトの名無しさん:2009/04/01(水) 07:02:04
意味はさっぱり分からんがラムダだらけで楽しそうだ
663デフォルトの名無しさん: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

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

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

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

ところで、可変長引数がダメなのはカリー化というより
型付けが出来ないからではないでしょうか?
呼び出し時に引数の型を指定するprintfのような関数なら
I,T,Qコンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
670デフォルトの名無しさん: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コンビネータと関数合成とカリー化で一応実現できます
効率にハンデはあるかもしれませんが
671667:2009/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だけで置き換えられるようになったのがいいですね。
速度重視とかマルチスレッドバリバリなことをしなくなったということもありますが。
672デフォルトの名無しさん:2009/04/01(水) 22:52:45
SGIが倒産したらしい
673デフォルトの名無しさん:2009/04/01(水) 22:58:17
そうか、そうか
674デフォルトの名無しさん:2009/04/01(水) 23:00:18
lisp系は自作に限るよ
675デフォルトの名無しさん:2009/04/02(木) 03:41:44
LispスレでSGIといったら創価じゃなくて
シリコン・グラフィックの方だろJK
676デフォルトの名無しさん:2009/04/02(木) 03:47:31
2度目の倒産なんだって?
なんかLispに関して大きいことやってたっけ?
OpenGLぐらいしかシランわ。
677デフォルトの名無しさん:2009/04/02(木) 07:44:57
ずっと自作のSchemeモドキを使っています。モドキというのは、あまり
使わない機能を削って代わりに部分継続やソフトタイピングを入れたり
してるためです。それなりに高速でデバッグ機能も充実していると思って
いますが、RnRSやSRFIの類は全く考慮せず作っているので公開していま
せん。ドキュメント書くのもめんどくさいし(論文は書いたけど)。
678デフォルトの名無しさん:2009/04/02(木) 09:10:38
>>672
エイプリルフールだと思ってた…
679デフォルトの名無しさん:2009/04/02(木) 14:18:51
勘違いしたかも。
SGI(非創価)ってLisperが作った会社だと思ってました。
680デフォルトの名無しさん:2009/04/02(木) 14:20:30
lispでモナディウスなみの速度は出せるのだろうか
681デフォルトの名無しさん:2009/04/02(木) 16:33:15
>>679
ジムクラーク? Lisper ではないね。専門は CG らしい。
ワークステーション屋で Lisper が作った会社ってあったっけ?
Sun のビルジョイはハッカーだけど Lisper じゃないし。
682デフォルトの名無しさん:2009/04/02(木) 16:58:18
昔、N-Worldって、SGI (Indy?)向けの3D CG作成アプリなかった?
Lispマシンから移植されたものだったと思う。Lispで動いていたはず。
プロトタイピング強いから、いろいろな分野の初期大型アプリで使われてるね。
数式処理、ウィンドウシステム、プログラミング可能エディタなど。
CG関係も昔はもっと多かった。
683デフォルトの名無しさん:2009/04/02(木) 18:25:17
sgiといえば、インディゴだな。doomでネット対戦に使わせてもらったよ。
684デフォルトの名無しさん:2009/04/02(木) 19:27:02
sigは破産申請したらしいね
685デフォルトの名無しさん:2009/04/02(木) 20:34:16
CGはもうからないのか
686デフォルトの名無しさん:2009/04/02(木) 23:50:42
>>682
ニチメンなんとか、ってやつのことかな。Shiroさんが詳しそう
687デフォルトの名無しさん:2009/04/03(金) 00:37:30
前回の破産でCG方面からサーバー屋に商売変えしてたんじゃなかったっけ?
688デフォルトの名無しさん:2009/04/03(金) 00:39:09
なんかMIPSの灯がどんどん消えてく気がするなぁ…
689デフォルトの名無しさん:2009/04/03(金) 01:43:52
/.Jによると、どこだかに買収されるんで、それに必要な手続きなんだと。
690デフォルトの名無しさん:2009/04/03(金) 01:57:27
>>681
そうゆう名前で呼ばれてかかどうかはおいといて、MIT 由来の
LISP マシンってワークステーション以外のなのものでもないが…
691デフォルトの名無しさん:2009/04/03(金) 02:28:13
>>685
技術の発展とともに、作業端末は高価なUNIXワークステーションではなく
安価なWindowsマシンが優位になり、未開の領域に強く柔軟なLispから
高速で大規模なプログラムに強い? C++に置き換わったとかじゃないの。
692681:2009/04/03(金) 09:54:17
>>690
あーそうね。シンボリクスとかがそうか。
Unixワークステーション屋で、と言うべきだったかな。
693デフォルトの名無しさん:2009/04/03(金) 11:16:16
carやcdrがちゃんと理解できん・・・
アセンブラの方が簡単かも。
694デフォルトの名無しさん:2009/04/03(金) 12:14:13
そんなに難しいかな?

単方向リンクリストの、先頭を取り出すか、それ以外を取り出すか、
だけなんだが。
695デフォルトの名無しさん:2009/04/03(金) 12:16:17
括弧とドットの表記法でつまづくか、ポインタでつまづくかのどっちかですよねー
696デフォルトの名無しさん:2009/04/03(金) 12:42:44
carは左って覚えれば良いと思うよ
697デフォルトの名無しさん:2009/04/03(金) 12:48:44
>>693
コンスは単なる2つのポインタの対
Lispよりも低レベルではcarとcdrは可換で線形リストとは何の関係もない
線形リストに利用しているのはLispより高レベルだけの話
アセンブラ的に考えればこう
698デフォルトの名無しさん:2009/04/03(金) 13:05:28
まずボックス表記を手で書いて
それからいろんな構造をconsだけで組み立てる
ドット対→線形単リスト→2分木みたいに徐々に複雑にしていくといい
699デフォルトの名無しさん: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/
700デフォルトの名無しさん:2009/04/03(金) 13:17:57
ちゃんと理解できないったって(と)の対応はわかりますよね?
Lispのリスト記法はドット記法の構文糖
任意のリスト記法はドット記法で表せる(逆は偽)
ドット記法の基本は( A . B )でホワイトスペース+ドット+ホワイトスペースがcarとcdrの間の仕切り
(開き/閉じ括弧の周りはホワイトスペースの省略可)
そしてドット記法を(A B C)みたいなに直すのは
ドット+開き括弧を見つけたら、それと、それに対応する閉じ括弧を消しゴムで消すだけ
701デフォルトの名無しさん:2009/04/03(金) 13:22:22
( A . B ) ≡ [ A | B ]
702デフォルトの名無しさん:2009/04/03(金) 14:15:16
(cons 'a 'b) => (a . b)
(cons 'a (cons 'b '())) => (a b)
'(a . (b . (c . ()))) => (a b c)
703デフォルトの名無しさん: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 ] ]
704デフォルトの名無しさん:2009/04/03(金) 14:24:40
lispのリストはヘテロジニアスリストでさらにペアにもなるから難しいよな
ML系みたいにリストは空か値とリストを持つコンスって定義だとまだわかりやすいのに
705デフォルトの名無しさん:2009/04/03(金) 15:27:28
分かりにくくないだろw
706デフォルトの名無しさん: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が文字列をリストとして実装してるのはそんな理由だったりするのでしょうか?
707デフォルトの名無しさん:2009/04/03(金) 15:50:16
それは「cdr coding」と呼ばれるもので散々実験済み。
708デフォルトの名無しさん:2009/04/03(金) 15:52:55
書き込んでから気づいたけど、
部分リストを複数オブジェクトで共有している場合
先頭部分の参照がはずれてもGCで回収できなくて逆に効率が悪くなりますね。
ベクタの最初の方だけGCできる方法を取れば別ですけど
そうするとベクタの情報が増えて結局コンスと大差なくなるかも
709デフォルトの名無しさん:2009/04/03(金) 16:14:39
>>707
おや、そうでしたか。不勉強でした。
見た所、線形リストを少しでも効率よく処理する為の物の様で
ベクタを置き換えるには至らなかったようですね。
710デフォルトの名無しさん:2009/04/03(金) 16:35:18
vector的利用がはっきりしているところでは、
vectorを使えばいいしね。
listで構造体を模倣してprototypingしても、
accessor使っておけば簡単に移行できるし。
711デフォルトの名無しさん:2009/04/03(金) 17:59:01
evalと大域変数でhashを模倣する初心者を見てニヤニヤするんですよねー
712デフォルトの名無しさん:2009/04/03(金) 18:02:44
それは君だけ。
713デフォルトの名無しさん:2009/04/03(金) 22:15:13
やべえ、サボってたらSeasoned Schemerわかんねえw
また後戻りか…英語もやってないし… λ.......
714デフォルトの名無しさん:2009/04/04(土) 10:17:19
関数型言語を勉強してる人が増えるのは喜ばしいことだけど
初心者が初心者に教えてる姿は危なっかしくて思わず突っ込みたくなる。
話を聞いてると、初心者にはカリー化が珍しいのか興味を示していた。
ただ、もうそろそろこのうざい雰囲気がなくなればいいのにと切に願う。さっさと成長しろ。
715デフォルトの名無しさん:2009/04/04(土) 10:22:12
初心者は永遠に居なくならない時点でずっとそのままうざい雰囲気のままだと思うが?
716デフォルトの名無しさん:2009/04/04(土) 10:54:12
先達はあらまほしきことなり

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

ドライクリーニングは危ないから誰もやらない。
718デフォルトの名無しさん: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
719デフォルトの名無しさん:2009/04/04(土) 12:28:21
>>716
その通り。邪険にすれば衰退しかありえない。
720デフォルトの名無しさん:2009/04/04(土) 13:09:49
>>714のように背伸びしたい初心者もかわいらしいじゃないか
721デフォルトの名無しさん:2009/04/04(土) 13:26:52
自覚している初心者と自覚していない初心者しかいないじゃないか
722デフォルトの名無しさん:2009/04/04(土) 14:33:24
せっかく勉強になる流れになりつつあったのに元に戻ってしまったかwww
723デフォルトの名無しさん:2009/04/04(土) 14:39:42
いや、正直うざかった
724デフォルトの名無しさん:2009/04/04(土) 14:47:51
で何の話がしたかったの?
725デフォルトの名無しさん:2009/04/04(土) 15:01:47
他人の事をうざいと言いたいだけだろ。そういう奴居るよね。
726デフォルトの名無しさん:2009/04/04(土) 15:36:31
じゃあ漏れが話ふる。
SICPスレでLispからPythonへの移行の話が出てる。
どうして私は信仰を捨てたか、という文章が興味深かった。
こんな話。

自分はApple II時代からのLisperで
Lispで開発してきてほかの言語を使う人に実質負けたことがなかった。
Lispは圧倒的に効率がよいから。
でもなぜかLispユーザーが少ないのはどうしてなんだぜ?
Lisp求人無いのは何故なんだよな?
Googleに入ってみたら特にLispが開発効率良いってものでもなかった。
だからそれまで持っていたLisp信仰を捨てた。
Novicも今はPython使ってる。
727デフォルトの名無しさん:2009/04/04(土) 15:54:33
捨てた過程はわかったが、直接の原因がさっぱりわからん。
728デフォルトの名無しさん:2009/04/04(土) 16:02:32
Lisp「だけ」、ってのにそれほど拘る必要性も感じないが。
729デフォルトの名無しさん:2009/04/04(土) 16:11:09
730デフォルトの名無しさん:2009/04/04(土) 16:58:47
> Lispで財をなしたのはPaul Grahamだけ
731デフォルトの名無しさん:2009/04/04(土) 17:11:31
Lispを捨てたのは仕方ないとして
PerlにもC#にもなりきれないPythonでは、問題を先送りにしただけじゃないか
732デフォルトの名無しさん:2009/04/04(土) 17:26:23
lispを知ってると知らないではプログラミングの発想は全然違ってくるよ。
捨てようが捨てまいがそれはどうでもいいけど、その心の影響は消えないからね。
簡単に言えば、手続型ばかりやってると関数ポインタみたいなことに到達するのは
時間がかかるけど、lispはそんなもの最初にやるからね。
map的発想ってのもそうだな。最初に付き合うかどうかって違いが実は大きい。
733デフォルトの名無しさん:2009/04/04(土) 17:29:08
プログラミングに必要な抽象化の道具が最初からそろってるものと、目先のことを解くだけの
道具だけが最初にないかの違いでもある。
pythonやrubyもlisp的な観点で教えたほうが幅が広いとおもうが、どうもjava屋とかC/C++屋的
な発想でやっちゃうよな。あれははっきりいうけど愚かだと思ってるね。
734デフォルトの名無しさん:2009/04/04(土) 17:32:24
Cやってないからよくわからないんですが
よく初心者にポインタが難しいって聞きます。
Lispやっていれば将来Cのポインタもすんなり理解できるということですか?
735デフォルトの名無しさん:2009/04/04(土) 17:33:53
また古いのをもってきたな。その文章書いたErann Gat(今はRon Garretに名前かわってる)は信仰を捨てたんであって、
Lispを捨てたわけじゃないぞ。Pythonも生産的だと認めて使うようになった、というのが正しい。
736デフォルトの名無しさん:2009/04/04(土) 17:43:41
mapやfoldならhaskellの方が簡単だし
関数型プログラミングとしてしか使わないならlispなんて要らない
737デフォルトの名無しさん:2009/04/04(土) 17:45:03
Cのポインタが難しいと言われるのは、
「これは難しいよ〜」と言われて紹介されるのが被害を助長させてると思う。

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

理解して無くてもなんとかなる。
740デフォルトの名無しさん:2009/04/04(土) 18:04:58
emacsが使いたくて、schemeを勉強しているだけだな
昔からある言語なんだし、後発言語はlispの影響を受けているわけで
優位差というものは、ほとんどないでしょ
741デフォルトの名無しさん:2009/04/04(土) 18:11:01
emacs使いたいならschemeよりもclispだし、clispよりもelispを学ぶべきだろw
742デフォルトの名無しさん:2009/04/04(土) 18:13:24
お前ら変なフラグを立てるなよ
「Pythonで財をなしたのはGoogleだけ」なんてことになったら目も当てられない
743デフォルトの名無しさん:2009/04/04(土) 18:30:44
いっぽうSunはJavaを開発した
744デフォルトの名無しさん:2009/04/04(土) 18:38:13
SunがCommon Lispに力を入れないのはどうしてなんだろう。
745デフォルトの名無しさん:2009/04/04(土) 18:49:03
>>744
力を入れても収益になる見込みが低いからじゃね?
企業なんてそんなもんだ。
746デフォルトの名無しさん:2009/04/04(土) 19:06:13
Sunは昔、Symbolic Programming Environmentってのを出していた。
LispView(OpenViewのCLOSバインディング)は面白かった。
まあ儲からないものを続けるわけにはいかない。
747デフォルトの名無しさん:2009/04/04(土) 19:06:15
JavaをもってしてもSunは身売りしなくてはならないわけだし。
748デフォルトの名無しさん:2009/04/04(土) 19:27:32
lispのコードが出てこなくなると話が弾むな。
749デフォルトの名無しさん:2009/04/04(土) 19:34:11
お前はそんなレスばっかりだなw
750デフォルトの名無しさん:2009/04/04(土) 20:56:09
初心者スレに何期待してんだ
751デフォルトの名無しさん:2009/04/05(日) 01:54:44
(gc) ; ゴミレスをガーベージコレクション
752デフォルトの名無しさん:2009/04/05(日) 02:00:09
>>751
未実装です。次期バージョンにご期待ください。
753デフォルトの名無しさん:2009/04/05(日) 03:15:08
pythonの方が便利
マクロを使いこなせれば違うのだろうか
754デフォルトの名無しさん:2009/04/05(日) 03:25:57
そういうどっちが便利みたいな話はよそでやれよ。
755デフォルトの名無しさん:2009/04/05(日) 03:48:18
その手の話用っぽいスレもあるしね。
756デフォルトの名無しさん:2009/04/05(日) 06:16:50
いや ホントに便利なんだって
757デフォルトの名無しさん:2009/04/05(日) 06:18:33
そうだね、でもここはLispのスレだからPythonはスレ違いなの、ばいばい
758デフォルトの名無しさん:2009/04/05(日) 09:12:20
宝石の名前の言語だけは使うな
ってばっちゃが言ってた
759デフォルトの名無しさん:2009/04/05(日) 11:09:48
ほんとどうでもいい話だが花とか植物の名前つけたlisp方言ってないもんかね。
760デフォルトの名無しさん:2009/04/05(日) 12:08:02
関数型言語学びたいんだけどHaskellとSchemeどっちがいいかな?
761デフォルトの名無しさん:2009/04/05(日) 12:11:33
>>760
それをこのスレで聞くの?
純粋な関数型言語をやりたいなら、Haskellでもやっとけばいいじゃない。
762デフォルトの名無しさん:2009/04/05(日) 12:21:57
>>760
無理せず、両方やればよいと思う。
まぁ、>>761のいうように、「これぞ関数型言語」というのがやりたいのならHaskellじゃね?
763デフォルトの名無しさん:2009/04/05(日) 12:44:59
まずSchemeで型無しλ計算のイメージをつかむのが先決。
764デフォルトの名無しさん:2009/04/05(日) 12:49:16
>>761-763
お答えありがとうございます。
純粋関数型言語にこだわりはないのでとりあえずScheme触ってみます。
765デフォルトの名無しさん: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)
766デフォルトの名無しさん:2009/04/05(日) 14:07:40
((lambda (f) (f f 50)) (lambda (f x) (if (= x 1) 1 (+ x (f f (- x 1))))))
767デフォルトの名無しさん:2009/04/05(日) 14:41:30
これをMLやhaskellで定義するとどういう形になる?
768デフォルトの名無しさん:2009/04/05(日) 14:46:22
あ、多分そのままだと型推論失敗するんだと思うけど
書くとしたらどうなるのかなと
769デフォルトの名無しさん: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に置き換えて、できるだけで忠実に書くとどうなるの?
770デフォルトの名無しさん:2009/04/05(日) 18:07:09
数式処理と数値計算の混合をしたいです
haskellとlispのどっちがお勧めでしょうか
771デフォルトの名無しさん:2009/04/05(日) 19:56:40
>>770
maximaが何で作られているか調べてみ。 そしたら結論でるよ。
haskellに数式処理の簡単に扱えるライブラリがあればそっちのほうが
数式に馴染みやすい扱いができる。
lispで数値計算をするときは、最適化するために、型宣言のことやプロファイラを
あつかってボトルネックを潰して行っくって作業なしでは難しいかも。型宣言や
最適化の工夫はグレアムおじちゃんのANSI common lispをお勧めしとく。on lisp
じゃないよ。
maximaからlispは直接操作も可能だしあなたがやりたいことは実力さえつければ
可能です。
772デフォルトの名無しさん:2009/04/05(日) 20:00:41
いちおうね。maximaには数値計算が出来るライブラリは幾つかあるから、
速さは保証しないけどね。lispでかかれたかなり癖のあるコードだがlapack
まで一応ついてる
773デフォルトの名無しさん:2009/04/05(日) 20:06:00
両方覚えて用途毎に使い分けるのがオススメだ
774デフォルトの名無しさん:2009/04/05(日) 20:22:22
誰か判りませんか>>766-768
775デフォルトの名無しさん: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
776デフォルトの名無しさん: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
777デフォルトの名無しさん:2009/04/05(日) 21:40:00
ところで、↑letrecのyは「lambdaで定義する」という問題からしたら
反則な気がしますが、letrecをlambdaだけで定義できるでしょうか?
778デフォルトの名無しさん:2009/04/05(日) 21:51:03
当然set!を使わず、かつ型推論が通るような形で。
前者はともかく、後者を満たすのは無理っぽいと考えてます
779デフォルトの名無しさん:2009/04/05(日) 21:52:43
>>777
> letrecをlambdaだけで定義できるでしょうか?

無理。 set! とかも必要。
780デフォルトの名無しさん:2009/04/05(日) 21:57:47
R5RSで提案されているletrecの実装方法がset!を使っているだけであって
多変数相互再帰はlambdaだけで書けるからletrecもlambdaだけでできる
過去スレにあったと思う。
もっともMLの型推論を通せるかどうかはしりません。
自分が読んだ本には、型付きラムダ計算ではfixという演算子を導入すると書いてあった。
781デフォルトの名無しさん:2009/04/05(日) 22:04:51
>>776 で定義している y はまさに fix の一種だよ
782デフォルトの名無しさん:2009/04/05(日) 22:08:41
ですよね・・
昔そのfix云々を見てMLの限界を感じたので
この程度ならLISPに後付けで型推論つけても同じなんだと
引数が面倒ですが
783765:2009/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で再帰的に書くには、こう書くみたいに覚えるしかないの?
784デフォルトの名無しさん: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 。
785デフォルトの名無しさん:2009/04/05(日) 22:27:45
>>783
λ計算でオブジェクトに名前をつける唯一の方法は、引数にすること。
なので、自分自身を引数にするのです。
786デフォルトの名無しさん: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)は渡された自身を使って再帰ができる。
787デフォルトの名無しさん: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))))))
のような形にすれば通るっぽい
788デフォルトの名無しさん: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
789デフォルトの名無しさん: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)の部分。
790789:2009/04/06(月) 00:45:24
>>785じゃねーや、>>783
791デフォルトの名無しさん:2009/04/06(月) 06:36:11
>推論順序に関係するらしい

>騙されているみたいだけど、そうとしか考えられない
792デフォルトの名無しさん: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, ...

もうスレチはこれで終わりにしようぜ。ヤレヤレ。
793792:2009/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
でいいね。スマソ
794デフォルトの名無しさん: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に直せば同じソースコードが通るほどに似ているのか、まったく別物だと思って勉強した方がいいのか、というようなことなのですが・・・)

長文失礼しました。
795デフォルトの名無しさん:2009/04/06(月) 17:28:39
便乗質問として、schme, lispをやるなら、統合環境は、やっぱりemacsなの?
非emcas使いは、どうするのがいいの?
それでも(最終的には)emacs?
796デフォルトの名無しさん:2009/04/06(月) 17:47:06
lushというlispでshを書く方法があるみたいなのですが
使ってる人はけっこういるのでしょうか
797デフォルトの名無しさん:2009/04/06(月) 18:11:12
>>795
理由もわからずに道具を使いだすと信者化するんで
メモ帳で十分とか、まがりなりにも自分の信念を持ってるほうがいいと思う
798デフォルトの名無しさん:2009/04/06(月) 18:19:54
>>795
「非emacs使い」なのならなぜ最初にvi(m)のlispモードを考えない?
799デフォルトの名無しさん:2009/04/06(月) 19:03:02
非emacsならviとか
頭おかしい考え方だと思った
800デフォルトの名無しさん:2009/04/06(月) 19:55:41
>>799
windowsな人ならそう思うかもな。でも、lispをwindowsでするのは
無駄な労力がかかるから、それもあって798はviが浮んだんだろう。
unix系ならばあながちおかしくはない発想なのです。いちおう
vimならばlispの環境はあるからなぁ。
801795:2009/04/06(月) 20:27:07
ちなみに非emacs使いという言葉の意味は、反emacs派というわけでもありません
なんら宗教上の理由は、ありませんよw
vimを薦めている方は、なにか宗教上の理由を感じるんですが、違いますか?
Linux上ならemacs一択でいいんでしょうかね?
またWindows上(のcygwinなど)でschme(, lisp)を使うのは、適していないんでしょうか?
>>800
いちおう、存在する程度では、困るんですけど
802デフォルトの名無しさん:2009/04/06(月) 20:53:48
どっちでも良いよ。早く始めちゃえ。
803デフォルトの名無しさん:2009/04/06(月) 21:14:47
schmeが気になってしょうがない
804デフォルトの名無しさん:2009/04/06(月) 21:15:12
eclipseでも出来るよ。
805デフォルトの名無しさん:2009/04/06(月) 21:20:14
eclipseみたいなロートルPC殺しなんて使う気になれないよ
806デフォルトの名無しさん:2009/04/06(月) 21:29:09
eclispの間違いでしょ?
807デフォルトの名無しさん:2009/04/06(月) 21:32:48
>>800, 801
胸をはって「使っている」といえるほどではありませんが、Windows + Meadow + mzschemeで、とくに支障ないです(.emacsをちょっと書く必要があるけど)。
Linux + emacs + mzschemeと同じ環境、同じコードで書けるし。
808デフォルトの名無しさん:2009/04/06(月) 21:38:45
改めて読み返してみると799のほうが過剰反応しているように見えてしまった
いつの間にやら俺も毒されて
809デフォルトの名無しさん:2009/04/06(月) 21:52:59
>>801
よくしらんけど、vimって宗教がらみ?clispみたいなの?
810デフォルトの名無しさん: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というのがありますね。
811デフォルトの名無しさん:2009/04/06(月) 22:04:25
801
まで読んだ
812795:2009/04/06(月) 22:17:27
>>794さんの質問に(部分的にもでも)答えてあげてください

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

みなさま、レス、ありがとうございます
勉強の方向性として参考にさせていただきます
とりあえず、パッケージにguileがあったので、試しにこれを触ってみます
813デフォルトの名無しさん:2009/04/06(月) 22:29:26
>>794
common lispで現状の選択ならばclispやsbcl+ltkを使えば良いよ。一番気楽。
schemeほどの美しさはないけど、気に入ったなら良い選択だ。
lisp方言は似てるから、微妙な違いはあっても片方を学んでおけばなんとかなりますよ。:p
814デフォルトの名無しさん:2009/04/06(月) 22:36:06
俺も vim で書いてるけど、話を何段も飛ばして一足飛びに宗教認定されててワラタ。
vi は宗教と言うより made with secret alian technology なだけだと思うけどな。
Lispnik なら理解出来なくとも価値観を共有出来ると思ってたが、まぁ良いよ。
815デフォルトの名無しさん:2009/04/06(月) 23:37:14
俺はemacsとvi(vim)を使ってる。
けどそういうのに慣れてない人には、
jEditとか他の選択肢でもいいんじゃね?
シンタックス支援があれば何でもいい。
816デフォルトの名無しさん:2009/04/07(火) 00:09:10
言語を学ぶのに、いきなり統合環境を聞くのも時代なのかな。
javaでいうEclipseみたいなものは便利だけど、勉強しないと補完されないと完成しないコードを書く癖が付くよ。
817デフォルトの名無しさん:2009/04/07(火) 00:13:39
まあ使いたい人は使えばいいんじゃないの。
818デフォルトの名無しさん:2009/04/07(火) 00:23:06
>>816
俺も同じ考えだな
初心者はIDEやデバッガは使わない方がいいと思う
819デフォルトの名無しさん: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自身でかかれてたりする)
820デフォルトの名無しさん:2009/04/07(火) 00:53:44
最初はviでしこしこかいていたなぁ。年寄ですね。。。
821デフォルトの名無しさん:2009/04/07(火) 00:59:19
>>819
うんうん。そうおもう。どういですよ。おにぃちゃん。
windowsでというと如何してもcygwinに頼ることもあるかもしれんけど、
あれをやるなら、仮想環境でubuntuでも入れてそこで、emacs + cl +slimeを
やったほうが手間がかからないかな。学習のみじゃなくて、本気でやりたいなら
脱winをおすすめするよ。macならunix系だからwinほど障害がないから問題はない。
どうしてもwinラヴなら、まだ、eclipseにたよったほうがいい。
822デフォルトの名無しさん:2009/04/07(火) 01:01:16
Macはマイナー言語天国だよね
823デフォルトの名無しさん:2009/04/07(火) 01:11:08
>>822
いろんな言語が触れるのはunix系の強みだと思う。
まだ、CUIの扱いがunix準拠なら救われるけど、そうじゃない上に弱点だから
windowsではどうしても多様なものがでにくい。その特殊性ゆえに移植が難しい
のが影響してるんだと思うよ。lispだけじゃなくて動的言語の強みが消えやすいし。
824デフォルトの名無しさん:2009/04/07(火) 07:07:21
>>818
Unixという名の統合環境がないと動かないLisp処理系が結構多いから・・・
825デフォルトの名無しさん:2009/04/07(火) 10:09:18
practical common lispで説明してるのはslime
826794:2009/04/07(火) 10:23:07
>>813,819,821
ありがとうございます!
Mac OS X上でemacs使っているので、slime+sbclでCommon Lispから入ってみようと思います。

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

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

>Individuals and interactions over processes and tools

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

http://www.lispmachine.net/
840デフォルトの名無しさん: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形式のものが公開されてるけど、章ごとにばらばらのファイルなので
いまいち使いにくい。
841デフォルトの名無しさん:2009/04/07(火) 23:54:04
>>831
割と親切な人も多いから、謙虚に、かつエスパーを要求しなければ、
結構色々教えてくれると思う。

ただ、最終的には、自分で動かないとやってられない言語でもあるので、
そういう覚悟は必要のはず。手厚いサポートとか期待するだけ無駄。
842デフォルトの名無しさん:2009/04/08(水) 08:34:21
843デフォルトの名無しさん:2009/04/08(水) 13:49:19
>>842
すごい。リアルタイムでうごくゲームだ。
844デフォルトの名無しさん:2009/04/08(水) 14:32:28
>>744
結局アレグロの独占なんですね
845794=826:2009/04/08(水) 15:02:14
皆さんご教示ありがとうございます。
人工知能関係はまったく勉強したことがないのでPAIPにはちょっと身構えてしまいますが、
839さんや840さんに紹介していただいたサイトには初心者向けの文書もいくつか載っていたので、
複数見比べながら勉強していくことにします。
846デフォルトの名無しさん:2009/04/08(水) 16:13:37
ガイ・スティールにもサスマンにも見放されたってこと。かな…?
847デフォルトの名無しさん:2009/04/08(水) 19:49:02
848デフォルトの名無しさん: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))は、何を返すの?
849デフォルトの名無しさん:2009/04/08(水) 21:00:04
引数のない関数を渡せばそれを引数なしで呼び出した結果を返す
(define f (lambda () (lambda (x) (+ x 1))))
(((lambda (x) (x)) f) 2)

λ式の関数適用ってλx.M Nの形だから
(lambda(x) (x))は、理論的にはラムダ式ではないな
間違ってたらつっこみ希望
850デフォルトの名無しさん: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))の扱い方が理解できたので、満足しました
解説、ありがとうございました
851デフォルトの名無しさん: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)みたいに考えるべきなのかな。
教えて、エロイ人。
852デフォルトの名無しさん:2009/04/08(水) 22:30:19
5という値と5を返す無引数の関数は遅延評価ベースの関数型言語的には同値。
だからthunkとthunkの返す値を同一視する。
正格評価のLispやOCamlだとそうはいかないから
Lispではthunkという概念を導入し、OCamlでは無引数の関数がない。たぶん
あんまり詳しくないんで間違っていたらツッコミ希望。
853デフォルトの名無しさん:2009/04/08(水) 22:54:54
なんとなく乱暴なような気がするけど具体的に突っ込めない駄目な僕
854デフォルトの名無しさん:2009/04/08(水) 22:59:23
MIT以外のSick Peeの講義が!
855デフォルトの名無しさん:2009/04/08(水) 23:00:05
Lispのapplyは
(apply 関数 リスト)
引数が0個なら、空リストに関数を適用する。
(apply 関数 '())
つまり長さが0だろうが何だろうがリストが1個必要なことには変わりない。

一方、λ計算の関数適用にも引数が1個必要だがそれはリストでなくても良い。
856デフォルトの名無しさん:2009/04/08(水) 23:00:25
無引数の関数なんてものはありません。
857デフォルトの名無しさん:2009/04/08(水) 23:06:30
関数的には
・デフォルトでは簡約されない
・しかし一度簡約すると決めたら簡約できなくなるまで簡約するぞ
なんで
無引数の関数みたいに「一段階だけ簡約します」みたいなものがないってことかな
というか「簡約の段階」ってのは実装上の問題であって
言語内に持ち合わせていないってほうが近いのかな
858デフォルトの名無しさん: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行で定義がかいてある
859デフォルトの名無しさん:2009/04/08(水) 23:33:27
訂正 λx.f () -> λf.f ()
860デフォルトの名無しさん:2009/04/09(木) 00:19:12
ラクダ計算かぁ。
861デフォルトの名無しさん:2009/04/09(木) 00:45:47
やばい、おもしろくなってきた
862デフォルトの名無しさん:2009/04/09(木) 13:49:35
関数適用って(M N)じゃないのかなぁ ;; M N
(λx. M N)は(M N)のλ抽象でしょう
それとカリー化λ計算は全ての関数は一つの引数を受け取るという前提だから
(x) ≡ xであって(x ())では無いと思う
863デフォルトの名無しさん:2009/04/09(木) 13:56:28
lispは言語の仕様上たまたま0引数の関数定義も許すというだけだからね
副作用も扱うから1以上に強制する意味もないだろうし
何の基盤もないのに無理矢理当てはめようとしてもうまくいかない
864デフォルトの名無しさん:2009/04/09(木) 14:30:00
(equal? (list) list)
#f
(equal? (+) +)
#f
865デフォルトの名無しさん:2009/04/09(木) 15:03:19
結局、理論的なものを触るのにlispは向いてないってことですね
866デフォルトの名無しさん:2009/04/09(木) 15:11:04
Lisp式は拡張されたλ計算とでもいうものであって
Lisp式で直接純粋λ計算を扱うのには向いてないだけ
リストを扱うのは得意だからλ式の簡約の実装には向いているはず
(S式でλ式を表現するのは容易だし)
867デフォルトの名無しさん:2009/04/09(木) 15:23:37
>>862
(x) ≡ (apply x '())

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

872デフォルトの名無しさん:2009/04/09(木) 20:01:38
過度に一般化されたλ計算を学ぶ前に、
Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
そうすれば、Haskellにはうんぬんとか余計なことを考えなくて済む。
873デフォルトの名無しさん:2009/04/09(木) 20:05:40
>>872
> Schemeの最小のサブセット的なλ計算もどきをやるのがよさげだな。
具体的になんのことを指しているの?
874デフォルトの名無しさん:2009/04/09(木) 20:59:06
>>873
defineやletrecやset!を封印したScheme
875デフォルトの名無しさん:2009/04/09(木) 23:26:28
、、Little Schemer?
876デフォルトの名無しさん:2009/04/09(木) 23:31:40
♪見知らぬ国のtripper
877デフォルトの名無しさん:2009/04/10(金) 03:27:58
>>873
Yコンビネータなくても再帰定義できるλ式もどきじゃないのかな。
Call by valueの評価器作るのはわりと簡単なんだけど、
それじゃYコンビネータは扱えないし。
878デフォルトの名無しさん:2009/04/10(金) 07:14:41
λf.(λx.f(λz.xxz))(λx.f(λz.xxz))
879デフォルトの名無しさん:2009/04/10(金) 08:35:26
>>877
おいおい、一段階だけ簡約、、の話はもう終わりか
880デフォルトの名無しさん:2009/04/10(金) 09:18:53
お、チューリングさんのほうのやつだね
881デフォルトの名無しさん:2009/04/10(金) 19:16:10
λ計算は少しかじった程度なのですが、
Yコンビネータなしの再帰ってどんな表現になるのですか?
882デフォルトの名無しさん:2009/04/10(金) 19:35:27
Y のかわりに λf.(λx.f (x x)) (λx.f (x x)) を使えばおk
883デフォルトの名無しさん:2009/04/10(金) 19:38:38
それってYそのものじゃない?
884デフォルトの名無しさん:2009/04/10(金) 19:41:05
Y コンビネータは Y f = f (Y f) というコンビネータ
885デフォルトの名無しさん:2009/04/10(金) 19:44:54
>>884>>882にYという名前をつければいい、というわけにはいかないの?
886デフォルトの名無しさん:2009/04/10(金) 19:51:52
>>881
自分を参照するには自分を引数にする
という簡単なロジックですよ
Yはその応用例のひとつにすぎない
887デフォルトの名無しさん:2009/04/10(金) 20:01:06
猥コンビネータ
888デフォルトの名無しさん:2009/04/10(金) 20:11:32
ロジック トリック
889デフォルトの名無しさん: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) ...て部分は一体どこから来るの?
890デフォルトの名無しさん:2009/04/11(土) 01:06:02
>>889
λ算法は lazy なので、eager な lisp では 評価を遅延するために thunk を作る必要がある。
(lambda (arg) ...) がそれ。
891デフォルトの名無しさん:2009/04/11(土) 02:10:10
cparen.el
lispの達人にはほど遠いけど、括弧だけは見えなくなりました!・∀・ステキ!
892デフォルトの名無しさん:2009/04/11(土) 09:00:45
>>889
(lambda (arg) ...) で囲むことで、これは procedure ですよという型付けをしていると
解釈することもできるぜ。
893デフォルトの名無しさん:2009/04/11(土) 12:09:16
、、Schemeで無限ループする問題と、Haskellで型推論失敗する問題は、なんつーか、
同じ問題を違う言葉で言いかえただけなんじゃね?
894デフォルトの名無しさん:2009/04/11(土) 13:11:31
>>893 もっと!もっと考察して!
895デフォルトの名無しさん:2009/04/11(土) 18:35:53
>>890
eager な型推論では infinite type を遅延するゴニョゴニョ・・・
896デフォルトの名無しさん:2009/04/11(土) 20:56:50
無限ループっていうか強く型付けされたλ計算は強停止性を持つんじゃなかったっけ?
897デフォルトの名無しさん: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では型推論の時に検出されてエラーになってるということかな?
898デフォルトの名無しさん:2009/04/11(土) 22:17:54
>>897
ラムダ式のコンストラクタで遅延、applyで発火とするのは、
処理系の実装上の問題に過ぎない。
たまたまS式を使っているから、Lisp上で同じ型になっているに過ぎない。
元のラムダ算法ではまったく別のもの。
thunkはラムダ算法上のファーストクラスのオブジェクトではない。
899デフォルトの名無しさん:2009/04/11(土) 23:02:42
結局、型付きλ計算だと強停止性がある→ループが書けない→チューリング完全でないってこと?
型付きλ計算ではfixが型付けできないからファーストクラスの演算子として用意していると解釈していたんだけど
900デフォルトの名無しさん:2009/04/11(土) 23:20:25
fix は
http://en.wikipedia.org/wiki/System_F
という型付きλ計算の体系でなら
forall a. (a -> a) -> a
という型を持っていると解釈され、>>792のようにふつうの関数として定義できる。
901デフォルトの名無しさん:2009/04/11(土) 23:21:31
そうです。
その再帰用演算付加の定式化で有名なのが、ゲーテルの体系TとPCFです。
ちなみに情報学板にλ計算スレありますよ。
大学の講義用資料にいいのがたくさん転がってますしね。

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

http://math.stanford.edu/~feferman/papers/dialectica.pdf
905デフォルトの名無しさん:2009/04/12(日) 15:18:09
Feferman!!!
906デフォルトの名無しさん: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> <- この下?

になるのか? とも思うのですが普通に考えると扱いが特別な予約語
にしか見えないですし、どうなるのが正しいのかと・・
ごく単純な考え違いっぽいですが、教えて頂けましたら幸いです
907デフォルトの名無しさん: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に評価される。
908デフォルトの名無しさん:2009/04/12(日) 20:50:59
つまり+とか-などの識別子も
fooとかxとかyなどの識別子と一緒
909デフォルトの名無しさん:2009/04/12(日) 21:50:20
>>907
Aがまず評価される
その後Aが手続きであればBとCが任意の順番で評価される

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

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

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

人生の中でそういう時期なだけなのかな
920デフォルトの名無しさん:2009/04/14(火) 21:12:11
皮肉を言われていることに気が付いてないだけ
921デフォルトの名無しさん:2009/04/15(水) 00:01:29
それらしい言葉を使うと響きがかっこいいだけで、実体のない虚飾だよ。
922デフォルトの名無しさん:2009/04/15(水) 00:03:06
形而上学的な思考の事かとオモタ
923デフォルトの名無しさん:2009/04/16(木) 19:54:20
どうでもいいことだが
厨の俺にとって、響きがかっこいい、というのは重要w
Befungeとか名前がカコイイ
IConとかCatはカワイイ
そして、Lolliは潔い
924デフォルトの名無しさん:2009/04/16(木) 20:14:09
Gaucheもこのスレでおk?
925デフォルトの名無しさん: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
926デフォルトの名無しさん:2009/04/17(金) 11:39:02
lispな人はgitかdarcsでhg使ってるの見たことないのだけど
何か理由があるの?
927デフォルトの名無しさん:2009/04/17(金) 12:35:29
lisp な人は、比較的年齢層高めだから、
hg って入力する時、
H爺を連想して嫌なんだ。
928デフォルトの名無しさん:2009/04/17(金) 12:40:13
<<927評価中>>
929デフォルトの名無しさん:2009/04/17(金) 14:53:22
ハードゲイですね
わかります
930デフォルトの名無しさん:2009/04/17(金) 23:52:46
>>926
git は判らんが darcs に関しては common-lisp.net で使えるというのはあるんじゃないか。
931デフォルトの名無しさん:2009/04/18(土) 00:16:48
shiroさんのλっちゃにワラタw
932デフォルトの名無しさん:2009/04/18(土) 03:31:49
なんか新スレ立ってるよ

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

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

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

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

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

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

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

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

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

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

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

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


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


この2つのどっちを使うのがいいのだろう
967デフォルトの名無しさん:2009/04/23(木) 19:09:04
>>966
用途による。
968デフォルトの名無しさん:2009/04/23(木) 19:13:16
>>966
実際に晒して、議論すればいいだろ
伏せている意味がよくわからん
969デフォルトの名無しさん:2009/04/23(木) 19:31:04
970デフォルトの名無しさん:2009/04/23(木) 20:05:49
lispとか、わからん
エロい人の降臨を待とう

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

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

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

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

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

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

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

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

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

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

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

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

単なる冗談です。
991デフォルトの名無しさん:2009/04/25(土) 22:46:58
※スレタイの「Lisp Scheme」の「Lisp」はCommon Lispを除く
と注釈すればいい
992デフォルトの名無しさん:2009/04/25(土) 23:50:37
新参ですがこのスレにCommon Lispを含まないなんて今はじめて知りました
993デフォルトの名無しさん:2009/04/25(土) 23:53:16
ああ、実はそうだったんだよ
詳しくは過去ログに
994デフォルトの名無しさん:2009/04/26(日) 00:02:51
次のスレタイは [Lisp族のScheme Part26] でいかがかね?
995デフォルトの名無しさん:2009/04/26(日) 00:03:58
馬鹿っぽいから却下
996デフォルトの名無しさん:2009/04/26(日) 00:07:25
LisSche Part26
997デフォルトの名無しさん:2009/04/26(日) 00:07:50
>>993
LISPはたくさんあるのに、
LISP=CommonLISPの略だとするのはおかしい
って意見があって、だったらCommonLISPは専用スレ立てましょう、
みたいな感じでまとまったんだっけ??
それでなぜか「入門」スレが立ってて俺はあるぇ〜?って感じで読んでた。
正直、
998デフォルトの名無しさん:2009/04/26(日) 00:20:06
S式スレ、もしくはsexpスレってのは?
999デフォルトの名無しさん: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
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。