Lisp Scheme Part27
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/07/27(月) 10:15:31■過去スレ
Part26: ttp://pc12.2ch.net/test/read.cgi/tech/1240567959/
Part25: ttp://pc12.2ch.net/test/read.cgi/tech/1231856193/
Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/
Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/
Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/
Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc11.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc11.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc11.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc11.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc11.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc11.2ch.net/test/read.cgi/tech/1075630259/
Part09: ttp://pc11.2ch.net/test/read.cgi/tech/1069594582/
Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html
■テンプレート置き場
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
0003デフォルトの名無しさん
2009/07/27(月) 10:19:22□Common Lisp - Wikipedia (日本語)
ttp://ja.wikipedia.org/wiki/Common_Lisp
□CLiki (英語): Common Lisp関連のリソースが集積されています。
ttp://www.cliki.net/index
□Common-Lisp.net (英語): 多くのプロジェクトがホスティングされています。
ttp://common-lisp.net/
□CMU Common Lisp Repository (英語): 新旧様々なプログラムが置いてあります。
ftp://ftp.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/0.html
□The EncyCMUCLopedia (英語): CMUCL関連文書。CMUCLユーザーでなくとも有益なはず。
ttp://www.isr.ist.utl.pt/library/docs/encycmuclopedia/doc/
□The Common Lisp Cookbook (英語): いわゆるCookbookです。
ttp://cl-cookbook.sourceforge.net/
■Schemeに関する情報源(1)
□Scheme - Wikipedia (日本語)
ttp://ja.wikipedia.org/wiki/Scheme
□プログラミング言語Scheme (日本語): Schemeの人はまずここを見ましょう。
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/scheme.html
□Scheme-users.jp (日本語): Schemeユーザのためのハブサイトです。
ttp://scheme-users.jp/
□Schemeへの道 (日本語): Schemeの入門サイト。
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
□独習Scheme三週間 (日本語): Schemeの教科書。
ttp://www.sampou.org/scheme/t-y-scheme/t-y-scheme-Z-H-1.html
□Practical Scheme (日本語): Scheme処理系「Gauche」の作者である川合史朗氏のサイト。
Paul Grahamの「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されています。
ttp://practical-scheme.net/index-j.html
0004デフォルトの名無しさん
2009/07/27(月) 10:20:08□Bibliography of Scheme-related Research (英語): Scheme関連の論文リンク集。
ttp://library.readscheme.org/
□Scheme Hash (英語): S式でXMLを使えるようにするSXML等。
ttp://okmij.org/ftp/Scheme/index.html
□(Scheme) (Lisp) (日本語): 各種Scheme処理系をCygwin上でビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/
□SLIB (英語): Scheme用のライブラリとして有名なSLIBのサイトです。
ttp://swiss.csail.mit.edu/~jaffer/SLIB
□Scheme Requests for Implementation (英語): いわゆる「SRFI」のサイトです。
ttp://srfi.schemers.org/
□継続関連
□なんでも継続 (日本語)
ttp://practical-scheme.net/docs/cont-j.html
□Schemeへの道:継続 (日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/continuation.html
□継続の使い方 (日本語)
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#continuation
□継続の使用法 (日本語)
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/block.html
□Kahua: 継続ベースのアプリケーションサーバ。
ttp://www.kahua.org/
0005デフォルトの名無しさん
2009/07/27(月) 10:20:51□Common Lisp: A Gentle Introduction to Symbolic Computation (英語):
Common Lispを使った非常に丁寧なプログラミング入門書。
全文がpdf形式でダウンロードできます。
ttp://www.cs.cmu.edu/~dst/LispBook/
□Common Lisp: An Interactive Approach (英語):
人工知能の大家、Stuart ShapiroによるCommon Lispの教科書。
全文がpdf形式でダウンロードできます。
ttp://www.cse.buffalo.edu/~shapiro/Commonlisp/
□On Lisp (英語/日本語):
LispハッカーPaul Grahamが、Lispの力の源泉であるマクロプログラミングを解説。
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06637-5
ttp://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/ (日本語訳HTML版)
ttp://www.paulgraham.com/onlisp.html (英語原文がダウンロード可)
□Practical Common Lisp (英語/日本語):
S式の羅列で現実的な問題をどう解くのか、そのギャップに悩まされてる人に。
全文がオンラインで読めます。日本語版は『実践Common Lisp』として出版されています。
ttp://www.gigamonkeys.com/book/
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06721-1
ttp://pcl.lispuser.net/ (日本語版非公式サポートページ)
0006デフォルトの名無しさん
2009/07/27(月) 10:21:36□Structure and Interpretation of Computer Programs (英語/日本語):
通称「SICP」として知られる計算機科学の教科書。全文がオンラインで読めます。
日本語版は『計算機プログラムの構造と解釈』として出版されています。
ttp://mitpress.mit.edu/sicp/
ttp://sicp.ipl.t.u-tokyo.ac.jp/ (日本語版サポートサイト)
□Programming Languages: Application and Interpretation (英語):
ブラウン大学で使われている、Schemeを使ったプログラミング言語論の教科書。
SICPでは触れられていない継続についても、Webアプリと関連づけて詳述されています。
ttp://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
全文がpdf形式でダウンロードできます。
□How to Design Programs (英語):
Schemeを使った優れたプログラミング入門書。全文がオンラインで読めます。
ttp://www.htdp.org/2003-09-26/Book/
□The Little Schemer/The Seasoned Schemer (英語):
Schemeの教科書として定評のある「Schemerシリーズ」のサポートページです。
ttp://www.ccs.neu.edu/home/matthias/BTLS/
ttp://www.ccs.neu.edu/home/matthias/BTSS/
□The Scheme Programming Language (英語):
Schemeの入門書。全文がオンラインで読めます。
ttp://www.scheme.com/tspl3/
□入門Scheme (日本語):
幻となったScheme入門書。全文がダウンロードできます。
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
□プログラミングGauche (日本語):
Scheme処理系言語「Gauche」の初の解説書!
ttp://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?&ISBN=978-4-87311-348-7
ttp://karetta.jp/book/gauche-hacks (立ち読み版)
ttp://karetta.jp/book-cover/programming-gauche (サポートページ)
0007デフォルトの名無しさん
2009/07/27(月) 10:33:23□Steel Bank Common Lisp: 代表的な処理系。CMUCLより派生。
ttp://www.sbcl.org/
□CMUCL: カーネギーメロン大学で開発された処理系。
ttp://www.cons.org/cmucl/
□GNU CLISP: バイトコード変換系。
ttp://www.clisp.org/
□Clozure CL: OpenMCLから改名されました。
ttp://trac.clozure.com/openmcl
□Embeddable Common Lisp: Cで書かれたプログラムへの埋め込みが可能な処理系。
ttp://ecls.sourceforge.net/
□Armed Bear Common Lisp: JVM上で動く処理系。JVMバイトコード変換系。
ttp://armedbear.org/abcl.html
□Allegro Common Lisp: 代表的な商用処理系。無料試用版も有り。
ttp://www.franz.com/products/allegrocl/
□LispWorks: 商用処理系。無料試用版も有り。
ttp://www.lispworks.com/
□Corman Common Lisp: Windows専用の商用処理系。無料試用版も有り。
ttp://www.cormanlisp.com/
□Scieneer Common Lisp: CMUCLより派生した商用処理系。非商用利用なら無料。
ttp://www.scieneer.com/scl/index.html
0008デフォルトの名無しさん
2009/07/27(月) 10:34:20□Gauche: マルチバイト文字に対応したR5RS準拠処理系。川合史朗氏作。
ttp://practical-scheme.net/gauche/index-j.html
ttp://jp.youtube.com/watch?v=WEBOdWyGE3E (川合氏によるGaucheに関するトーク)
□PLT Scheme: DrScheme、MzSchemeなどのR5RS準拠および独自拡張のScheme処理系。
ttp://www.plt-scheme.org/
□Scheme48: R5RS準拠のバイトコードインタプリタ。
ttp://www.s48.org/
□Gambit-C: R5RS準拠処理系。
ttp://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Main_Page
□Chicken: R5RS準拠処理系。スタンドアロン実行ファイルが簡単に作成可能。
ttp://www.call-with-current-continuation.org/
□Stalin: 激烈な最適化を施す処理系。人間の書くCコードより速いという噂。
ttp://cobweb.ecn.purdue.edu/~qobi/software.html
ftp://ftp.ecn.purdue.edu/qobi/fdlcc.pdf (Stalinの最適化技術を解説した論文)
□Bigloo: CLR用のコードを吐けるようになったらしい。
ttp://www-sop.inria.fr/mimosa/fp/Bigloo/
□Guile: R5RS準拠のGNU公式拡張用言語。もちろんSLIBも使えます。
ttp://www.gnu.org/software/guile/guile.html
□JScheme: Javaで書かれたR4RS準拠処理系。Javaインターフェイスをサポート。
ttp://jscheme.sourceforge.net/jscheme/main.html
0009デフォルトの名無しさん
2009/07/27(月) 10:35:05□Chez Scheme: R6RS準拠の商用処理系。インタプリタはフリー。
ttp://www.scheme.com/
□IronScheme: Microsoft DLR上で動作するR6RS準拠処理系。ERR5RSもサポート予定。
ttp://www.codeplex.com/IronScheme
□Ypsilon Scheme System: 藤田善勝氏が開発中のR6RS準拠処理系。
ttp://www.littlewingpinball.net/mediawiki-ja/index.php/Ypsilon_Scheme_System
□Mosh: higepon氏が開発中のR6RS準拠処理系。
ttp://code.google.com/p/mosh-scheme/
□SECDR-Scheme: SECD machine modelに基づく実装。
ttp://lily.fan.gr.jp/~kmd/adhoc/view.rhtml?n=SECDR-Scheme_woyomu
□LispMe: Palm上で動く処理系。これもSECD virtual machine。
ttp://www.lispme.de/lispme/
□Minischeme: 1ファイルに凝縮された処理系。
ttp://tinyscheme.sourceforge.net/minischeme.tar.gz
□TinyScheme: Minischemeを色々弄ったもの。
ttp://tinyscheme.sourceforge.net/
□Schemix: Linuxのkernelへのパッチで/dev/として扱えるTinyScheme。
ttp://www.abstractnonsense.com/schemix/
□Bit: Minischemeよりも小さい(?)バイトコード変換系。
ttp://www.iro.umontreal.ca/~dube/
□KI-Scheme, AM-Scheme, etc...
ttp://www.nifty.com/download/dos/prog/lisp/
0010デフォルトの名無しさん
2009/07/27(月) 10:35:51□awklisp: Awkで書かれたわずか500行のLispインタプリタ。
ttp://www.accesscom.com/~darius/
□CAMPUS LIsP Lemon version: Cでわずか1000行。
ttp://www-masu.ist.osaka-u.ac.jp/~kakugawa/hacks/clisp/
□Lisp interpreter in AS3: ActionScriptで書かれたLispインタプリタ。
ttp://www.solve-et-coagula.com/?p=8
□newLISP: Lispライクな軽量スクリプト言語。
ttp://www.newlisp.org/
□Arc: Paul Grahamが開発中の新しいLisp。
ttp://arclanguage.org/
□Clojure: MLやHaskellの特長を取り入れた新しいLisp。JVMバイトコード変換系。
ttp://clojure.org/
□Qi: MLやHaskellの特長を取り入れた新しいLisp。型の定義にシーケント計算表記を用います。
ttp://www.lambdassociates.org/
□GOO: DylanとSchemeの影響を受け、OOPをサポートした新しいLisp。
ttp://people.csail.mit.edu/jrb/goo/
□Liskell: Lispの顔をしたHaskell。
ttp://liskell.org/
0011デフォルトの名無しさん
2009/07/27(月) 10:36:56□初心者が集うIRC
布教してくれる先生も大募集です。
irc.scenecritique.com:6667 #Lisp_Scheme
□Shibuya.lisp
東京地区、特に渋谷周辺半径2万キロのLisp系プログラマによる非営利団体。
第3回テクニカルトークは2009年7月4日開催予定です。
ttp://shibuya.lisp-users.org/
□GaucheNight 第2回 (2008年3月8日)
「SchemeとGaucheとλとS式を愛するすべての人に贈るマクロな一夜」
出演:川合史朗、伊藤篤、山下伸夫、笹田耕一、ひげぽん、zick、
黒田寿男、えんどうやすゆき、ほか
ttp://practical-scheme.net/wiliki/wiliki.cgi?gauche.night
□GaucheNight 第1回 (2007年5月9日)
出演:川合史朗、黒田寿男、まつもとゆきひろ(Skype中継)、小飼弾、
伊東勝利、久井亨、小黒直樹、ほか
ttp://practical-scheme.net/wiliki/wiliki.cgi?GaucheNight%3a2007
□黒田寿男氏関連 (黒板の人)
ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/901-909
ttp://www.bookshelf.jp/2ch/tech/1151025773.html#901
□Schemeのマクロに関する黒田氏の所感
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
□それに対する川合史朗氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83
□それに対する黒田氏の再反論
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night
□それに対する川合氏の応答
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83%3a%e6%84%8f%e5%91%b3%e8%ab%96
□その他、黒田氏によるLisp関連のエッセイがこちらで読めます。
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/
0012デフォルトの名無しさん
2009/07/27(月) 11:01:15□Meadow memo: 2ちゃんねるログ: dat落ちした過去スレの一部が閲覧できます。
ttp://www.bookshelf.jp/2ch/index.html
□2ch上にあるLisp関連のスレ
【入門】Common Lisp その6【質問よろず】
ttp://pc12.2ch.net/test/read.cgi/tech/1234884136/
Emacs Lisp 3
ttp://pc12.2ch.net/test/read.cgi/tech/1191875993/
【GNU】スクリプト言語 Guile【scheme】
ttp://pc12.2ch.net/test/read.cgi/tech/1239985829/
【SICP】計算機プログラムの構造と解釈 Part2
ttp://pc12.2ch.net/test/read.cgi/tech/1203096230/
【普通のやつらの】 Arc Language 0 【上を行け】
ttp://pc12.2ch.net/test/read.cgi/tech/1202098949/
【魔法】リリカル☆Lisp【言語】
ttp://pc12.2ch.net/test/read.cgi/tech/1183396621/
【CGI】実用比較Lisp vs C/C++【GUI】
ttp://pc12.2ch.net/test/read.cgi/tech/1150501484/
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】
ttp://pc12.2ch.net/test/read.cgi/tech/1140006937/
Lisp@UNIX版
ttp://pc12.2ch.net/test/read.cgi/unix/1019926525/
Lisperこそ真のプログラマーよ!!
ttp://pc11.2ch.net/test/read.cgi/prog/1175791979/
LISPってさ〜
ttp://science6.2ch.net/test/read.cgi/sim/1015169050/
【数式処理システム】 Maxima 【Common Lisp】
ttp://science6.2ch.net/test/read.cgi/math/1220340695/
■スレ上でSchemeのコードを晒す場合は、こちらをご利用ください。
ttp://codepad.org/
0013デフォルトの名無しさん
2009/07/27(月) 11:52:470014デフォルトの名無しさん
2009/07/27(月) 11:56:11|l| i|li , __ _ ニ_,,..,,,,_
l|!・ω・ :l. __ ̄ ̄ ̄ / ・ω・≡
!i ;li  ̄ ̄ ̄ キ 三
i!| |i  ̄ ̄  ̄ =`'ー-三‐ ―
/ ; / ; ;
; _,/.,,,// / ヒュンッ
/・ω・ /
| / i/
//ー--/´
: /
/ /;
ニ_,,..,,,,,_
/ ・ω・`ヽ ニ≡ ; .: ダッ
キ 三 三 人/! , ;
=`'ー-三‐ ―_____从ノ レ, 、
0015デフォルトの名無しさん
2009/07/27(月) 12:31:460016デフォルトの名無しさん
2009/07/27(月) 14:52:17すっかり忘れてたな
0017デフォルトの名無しさん
2009/07/27(月) 18:32:54a がそれ以外なら b=a, c=a と処理したいのですが
どう書けば良いでしょうか?
自分やってダメだった物を書いておきます。
(let ((a nil))
(let ((if a (list '(b a) '(c c))
(list '(b "b") '(c "c"))))
(print b)
(print c)))
環境は Common Lisp (xyzzy) です。
0018デフォルトの名無しさん
2009/07/27(月) 18:41:14(cond (a (list (list 'b a) (list 'c a)))
(t (list (list 'b "b") (list 'c "c")))))
(f 1)
(f nil)
0019デフォルトの名無しさん
2009/07/27(月) 19:05:17(コンド(ァ(リスト(リスト 'ブ ァ)(リスト 'ク ァ)))
(テ(リスト(リスト 'ブ "バ゙")(リスト 'ク "カ")))))
(フ 1)
(フ ニル)
↑見てたら唐突に8bitマシンリスプというのを思いついた
馬鹿にしてるわけじゃないお
0020デフォルトの名無しさん
2009/07/27(月) 19:15:26ありがとうございます。
0021デフォルトの名無しさん
2009/07/27(月) 19:20:41ぜんぜんおもしろくないです。
0022デフォルトの名無しさん
2009/07/27(月) 19:28:220023デフォルトの名無しさん
2009/07/27(月) 19:37:34Harropよけをまいておこう。
λ... Haskell Haskel Haskell
0024デフォルトの名無しさん
2009/07/27(月) 20:06:03> ■過去スレ
> Part09: ttp://pc11.2ch.net/test/read.cgi/tech/1069594582/
行方不明になっている模様
0025デフォルトの名無しさん
2009/07/27(月) 20:14:080026デフォルトの名無しさん
2009/07/28(火) 16:56:43こないだのカタラン数のは良かったよ。
0027デフォルトの名無しさん
2009/07/28(火) 17:33:52基本だけど、冪集合を列挙するというのはどうよ。
0028デフォルトの名無しさん
2009/07/28(火) 17:54:36難しそうだけど面白そう。
考えてみるよ。
0029デフォルトの名無しさん
2009/07/28(火) 21:24:160030デフォルトの名無しさん
2009/07/28(火) 21:33:010031デフォルトの名無しさん
2009/07/28(火) 21:39:42003228
2009/07/28(火) 21:40:35http://codepad.org/IvzgMsyr
0033デフォルトの名無しさん
2009/07/28(火) 21:43:23自分もそれ考えてた。選択ソートとかバブルソートで必要だけど
リストだと効率悪いよね。
0034デフォルトの名無しさん
2009/07/28(火) 22:25:08イマイチだな
>
0035デフォルトの名無しさん
2009/07/28(火) 22:42:50こんなアホな関数の出番はないけど
(defun swap (l x y)
(let ((tmp (nth x l)))
(setf (nth x l) (nth y l))
(setf (nth y l) tmp)))
0036デフォルトの名無しさん
2009/07/28(火) 23:12:39(define (swap m n ls)
(let* ((v (list->vector ls))
(vm (vector-ref v (- m 1)))
(vn (vector-ref v (- n 1))))
(vector-set! v (- n 1) vm)
(vector-set! v (- m 1) vn)
(vector->list v)))
Schemeでスマンです。
0037デフォルトの名無しさん
2009/07/29(水) 00:53:37http://www.lispworks.com/documentation/HyperSpec/Body/m_rotate.htm
まあ、リストのソートならおとなしくマージソートがいいとは思うけど。
0038デフォルトの名無しさん
2009/07/29(水) 01:03:540040デフォルトの名無しさん
2009/07/29(水) 05:15:33(nthcdr 1 '(1 2 3))
この2つは等価だと思ってたんですが
(pop (cdr '(1 2 3)))
(pop (nthcdr 1 '(1 2 3)))
これの下側がエラーになってしまいます。
どう書けば回避できるか どなたか教えていただけませんか?
0041デフォルトの名無しさん
2009/07/29(水) 06:16:22泥縄な解決法としては、
(defun foo (ls n) (if (= n 0) (pop ls) (pop (cdr (nthcdr (- n 1) ls))) ))
くらいじゃないですか。
pop とかの代入とか更新とかする系のマクロは
参照先として場所を示す式を取れるわけですけれど、
nthcdr は標準では場所を表す名前として使えるようになっていないので
この場合はワンクッション置く必要があります。
突っ込むと説明がややこしいところですけど。仕様的にはだいたいこのへん。
http://www.lispworks.com/documentation/HyperSpec/Body/05_a.htm
0042デフォルトの名無しさん
2009/07/29(水) 06:46:45んんん、難しいですね。
提示されたリンク先何度か繰り返して読んでみます。
ありがとうございました。
0043デフォルトの名無しさん
2009/07/29(水) 15:42:26common lispやschmeの処理系は、その辺はどのぐらい頑健なの?
0044デフォルトの名無しさん
2009/07/29(水) 16:05:370045デフォルトの名無しさん
2009/07/29(水) 16:45:19すいません、良く試してみると返り値は正しいんですが
元のリストの変更は n=0 の時失敗してしまうようです…。
(let ((ls '(1 2 3)))
(foo ls 0)
ls)
004627
2009/07/29(水) 17:01:31自分が書いたのはこんなの。
Lisp/Schemeはほとんど使ったことないんで書き方がおかしいかもしれないが。
(define (add-elt elt set)
(cond
((null? set) (list elt))
((member elt set) set)
(else (cons elt set))))
(define (map-add-elt elt set)
(cond
((null? set) '())
(else (map (lambda (m) (add-elt elt m)) set))))
(define (power-set set)
(cond
((null? set) '(()))
(else (let
((ps (power-set (cdr set))))
(append ps (map-add-elt (car set) ps))))))
004732
2009/07/29(水) 17:55:23ああ〜〜〜〜〜、そうかぁ。
集合の要素を1つ抜いた部分集合を全部の要素について考えたのですが、
ああ、そうですね。全部考える必要などなかったです。
0048デフォルトの名無しさん
2009/07/29(水) 18:38:55こう書いてみました
(define (power l)
(if (not (pair? l)) (list l)
(append
(power (cdr l)) ;先頭をとらない
(map (pa$ cons (car l)) (power (cdr l))) ;先頭をとる
)))
0049デフォルトの名無しさん
2009/07/29(水) 18:42:50良かったら考えてみてください
元々は小町算を解くために考えた問題です
結局、カタランが出来たのにこれはまだ解けずにいます
問題
2引数を取る演算子のリストと、演算数のリスト(演算子より1個多い)を引数にとって
全ての生成可能な式のリストを生成するkomachiを定義せよ
(komachi '(+ - *) '(1 2 3 4))
を実行すると
(
(+ (- (* 1 2) 3) 4)
(+ (- 1 (* 2 3)) 4)
(+ (- 1 2) (* 3 4))
... ;こんな感じで全パターンが出るまで続く。上の並びは適当
)
この条件をつけるかはお任せ
条件:「演算子、あるいは演算数のみに注目した場合、順序の入れ替えはないものとする」
例えば '(+ -) '(1 2 3)において
(+ 1 (- 2 3))を(+ 1 (- 3 2)) ;演算数の順序を入れ替えたのでNG
(+ 1 (- 2 3))を(- 1 (+ 2 3)) ;演算子の順序を入れ替えたのでNG
こうすると、komachiが生成する式の総数は
(演算子は空気と思えばよいので)演算数のカタラン数に一致します。多分。
005032
2009/07/29(水) 18:53:31なるほどよくわかりました。2^nを計算
するアルゴリズムと基本的には同じですね。
要素をとる、とらない、の2通りがあるから。
冪集合の名前の通りだ。
0052デフォルトの名無しさん
2009/07/29(水) 19:35:51(define (pa$ fn . args) (lambda more-args (apply fn (append args more-args))))
0053デフォルトの名無しさん
2009/07/29(水) 20:28:19部分適用といって、手続きの引数の一部を固定した新たな引数を返す手続き。
例えば、
((pa$ + 3) 2) ⇒ 5
みたいな。SRFI-26のcutと似たようなもの。cutなら、
((cut + 3 <>) 2) ⇒ 5
こんな感じ。
0054デフォルトの名無しさん
2009/07/29(水) 20:33:400055デフォルトの名無しさん
2009/07/29(水) 21:11:30最初に書いたのは無駄だらけだった(笑)。
(define (power-set ls)
(if (null? ls)
'(())
(let ((subset (power-set (cdr ls))))
(append subset
(map (lambda (x) (cons (car ls) x)) subset)))))
0056デフォルトの名無しさん
2009/07/29(水) 22:22:39おっと失礼。マクロじゃなきゃダメですね。
(defmacro foo (ls n) `(if (= ,n 0) (pop ,ls) (pop (cdr (nthcdr (- ,n 1) ,ls))) ))
0057デフォルトの名無しさん
2009/07/29(水) 23:07:40mzscheme なら curry
ちなみに >>52 の pa$ は片方が空リストになる時にエラーになった
0058デフォルトの名無しさん
2009/07/30(木) 00:37:16curryingのことだったのか。名前の由来には何か歴史的な事情でもある?
0059デフォルトの名無しさん
2009/07/30(木) 02:25:44こんなのは無駄に問題を難しくしてるだけ
(+ 3 2)
これでいいじゃないか
(pa$ + 3) は何を返す?
手続きを作ったところでそれを保存したり表示したりできるわけでもないし
無駄なことをするな
0060デフォルトの名無しさん
2009/07/30(木) 03:20:20歴史的経緯は知らないけれど、部分適用をあらわすのに$を使うのはgaucheの命名規約。
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a!%E3%81%A8%3f#H-yofpb1
個人的には、curry って名前なら(lambda (x y z) ...) を
(lambda (x) (lambda (y) (lambda (z) ...)))ってしてくれるんじゃないと違和感があるなあ。
可変長引数で困るけど。
>>59
そりゃ実用上はpa$をそんな使い方する人いないでしょ。
0061デフォルトの名無しさん
2009/07/30(木) 07:46:09作った手続きを束縛して再利用するに決まってんじゃん。
もしかして、複数の引数を持つ手続きを呼ぶ際には、
毎回必ず全ての引数の値が異なるようになる呪いを掛けられてる人ですか?
というか、クロージャがファーストクラスな言語でそういう事を言うのが信じられない。
0062デフォルトの名無しさん
2009/07/30(木) 08:07:48partial apply で $ をつけるのは Haskell の $ 演算子由来だそうな
ttp://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%3alog00#H-1bifybk
0063デフォルトの名無しさん
2009/07/30(木) 09:17:140064デフォルトの名無しさん
2009/07/30(木) 09:37:190065デフォルトの名無しさん
2009/07/30(木) 10:08:48(bind (+ 100 $1)) とか (bind (+ 200 . $rest)) とか書けないかな。
直観的になって嬉しいと思うんだけど。
0066デフォルトの名無しさん
2009/07/30(木) 12:44:20前以って arity がわかってるんなら syntax-case で
http://codepad.org/29239gmR
みたいな感じとか。
(bind 1 (+ 100 $1))
みたいに使う。後者の例はどうするのがいいんだろ。
0067デフォルトの名無しさん
2009/07/30(木) 12:57:170068デフォルトの名無しさん
2009/07/30(木) 13:00:09(^(x) (+ 100 x))
0069デフォルトの名無しさん
2009/07/30(木) 13:00:55後者は構文として正しくない
0070デフォルトの名無しさん
2009/07/30(木) 13:06:38@restとすると展開
$restとすると単値(リスト)
がいいかも
((bind (+ 200 @rest)) 300 400) ; ==> 900
((bind (cons 200 $rest)) 300 400) ; ==> (200 300 400)
0071デフォルトの名無しさん
2009/07/30(木) 14:04:09LOL の 5.2 節を参考にしてみたんだけどダサいかな。
マクロ引数を flatten してごにょごにょすればそういうのもできるよ
0072デフォルトの名無しさん
2009/07/30(木) 15:20:22srfi-26 の議論の中で引数の番号つきの部分適用の話が出たことはあるそうだ。
http://srfi.schemers.org/srfi-26/mail-archive/msg00018.html
>>66-67
最も大きい番号を arity とみなす実装。
http://d.hatena.ne.jp/SaitoAtsushi/20080811/1218380989
確かにどこから rest 引数にすりゃいいのか決められないな。
0073デフォルトの名無しさん
2009/07/30(木) 15:33:03単純に最も大きい番号の数より多い引数が rest になるんじゃまずいのかな。
式の中で $1, $2, $3, $rest が使われていたら
(lambda ($1 $2 $3 . $rest) ...) になるみたいな。
0074デフォルトの名無しさん
2009/07/30(木) 15:55:35ありがとうございます。
こういう時にマクロを使うんですね。勉強になります。
0075デフォルトの名無しさん
2009/07/30(木) 16:04:53(define-macro (bind2 . body) `(lambda ($2 . $rest) (lambda ($1) ,@body)))
0076デフォルトの名無しさん
2009/07/30(木) 18:59:240077デフォルトの名無しさん
2009/07/30(木) 19:06:060078デフォルトの名無しさん
2009/07/30(木) 20:12:500079デフォルトの名無しさん
2009/07/30(木) 20:14:170080デフォルトの名無しさん
2009/07/30(木) 20:28:490081デフォルトの名無しさん
2009/07/30(木) 20:32:380082デフォルトの名無しさん
2009/07/30(木) 22:19:40どんな時に使うの?
0083デフォルトの名無しさん
2009/07/30(木) 22:42:53プレースホルダー。
使わない引数とかを表現するのに使う作法。
(define (const a) (lambda _ a)) とか。
0084デフォルトの名無しさん
2009/07/30(木) 22:42:59透明あぼーんと同じ
0085デフォルトの名無しさん
2009/07/30(木) 22:53:15いつもdummy、みたいな変数名を付けてた
0086デフォルトの名無しさん
2009/07/30(木) 22:55:17あくまで作法。
0087デフォルトの名無しさん
2009/07/30(木) 22:59:04まあフロー解析すりゃいいけど
0088デフォルトの名無しさん
2009/07/30(木) 23:00:470089デフォルトの名無しさん
2009/07/30(木) 23:04:28みなさんありがとうございます.
0090デフォルトの名無しさん
2009/07/30(木) 23:14:280091デフォルトの名無しさん
2009/07/30(木) 23:23:040092デフォルトの名無しさん
2009/07/31(金) 17:54:45R6RS のマクロパターンではワイルドカード
それ以外の場所ではただのシンボル
0093デフォルトの名無しさん
2009/07/31(金) 20:57:590094デフォルトの名無しさん
2009/08/01(土) 05:00:54and-let*で _ 使いたくなる時ってある?
単に条件判断のみやりたい時は変数書かなくてもいいわけだし。
0095デフォルトの名無しさん
2009/08/01(土) 10:21:04Lisperの皆様から見てどんな感想でしょうか。
どうもマクロというと難しいという印象強いので、翻訳以前から本は知ってましたけど
読むのは気が引けてました。
また、翻訳レベルはどうでしょうか?Amazonの立ち読み見た限りではかなり良い
翻訳に感じました。
0096デフォルトの名無しさん
2009/08/01(土) 12:34:57単に趣味の問題です:-)
変数だけ書いたり式だけ書いたりするのはバランスが悪く感じるので
'_を使っているんです
Cなんかで変数宣言&初期化する時に=を揃えるような感覚です
int hoge = 10;
int foo = 30;
0097デフォルトの名無しさん
2009/08/01(土) 12:36:090098デフォルトの名無しさん
2009/08/01(土) 12:45:30という話を思い出した。
x = 123;
y = 054;
0099デフォルトの名無しさん
2009/08/01(土) 22:40:23LispマシンっていうのはPC98がBASICだったみたいに
LISPを基本的に動作するパソコンんの事でしょうか?
0100デフォルトの名無しさん
2009/08/01(土) 22:44:520101デフォルトの名無しさん
2009/08/01(土) 22:47:040102デフォルトの名無しさん
2009/08/01(土) 22:49:03■ このスレッドは過去ログ倉庫に格納されています