1 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 15:37:08.66 ] Common Lisp、SchemeをはじめとするLisp族全般のスレです ■前スレ Lisp Scheme Part33 toro.2ch.net/test/read.cgi/tech/1318150738/ ■テンプレ wiki.fdiary.net/lisp/ ■関連スレ 【入門】Common Lisp その8【質問よろず】 hibari.2ch.net/test/read.cgi/tech/1309940115/
231 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 14:45:25.16 ] そこに収斂するまでどれだけの血と汗と紆余曲折があったと思ってんだ!!
232 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:02:28.87 ] >>231 汗はなんとなく分かるけど、血と紆余曲折の具体的事例が思い浮かばない
233 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:07:20.62 ] Lispの方言の数を舐めるなよ。
234 名前:デフォルトの名無しさん [2012/03/09(金) 15:11:04.31 ] Cygwin-1.7.8でGuile-2.0.5のビルドが通らない。libffiのテストが通らない。
235 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:21:07.33 ] Allegro Common Lisp (ACL) の試用版を使っています (list "*" '(2 3 4) '(a b) "!" '(8 9 0)) こういう文字列とリストからなるリストをもとに *2a!8 *2a!9 *2a!0 *2b!8 *2b!9 *2b!0 *3a!8 ... と続くものを出力したいです(文字列とリストは0回以上ランダムに表れます) リストについては命令型言語でいうところの for (...) for (...) のような処理をすることになりそうですが どこから手をつければよいかわかりません おそらくmapcarを使ってリストを作り直す必要があります? どうすればよいですか
236 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:28:42.47 ] ここschemeスレなんだけど
237 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:30:48.13 ] じゃschemeではどうやるか教えてください。
238 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:33:18.46 ] 頑張れば書けるだろ
239 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/09(金) 15:33:25.27 ] >>235 Common Lisp の闇である loop と format が大活躍する場面だな!!
240 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:44:11.86 ] Lisp族の総合スレだろ。
241 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/09(金) 15:50:15.41 ] >>235 >>237 こんな感じかな。 (define (power-display lst) (let loop ((acc '()) (next lst)) (cond ((null? next) (for-each display (reverse acc)) (newline)) ((list? (car next)) (for-each (lambda(x) (loop (cons x acc) (cdr next))) (car next))) (else (loop (cons (car next) acc) (cdr next)))))) (power-display (list "*" '(2 3 4) '(a b) "!" '(8 9 0)))
242 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:51:56.19 ] とりあえずloop系のゴリ押しか、再帰で書けそうだけど、 リスト処理だからmap系の上手い手がありそうな気がするな。
243 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:06:21.13 ] プログラム書いてくれるプログラムまだー
244 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:47:03.23 ] コンピュータが人間に合わせてくれるのではなく、コンピュータに合わせて人間の頭を 作り変えろ、というのがLISPの思想。
245 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:12:13.22 ] 1960年代ではその考えは間違い。
246 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:01:04.41 ] lispのコードが読みやすいのはコード量が少なくなるから 少なくなる要因は1つの行に複数の関数を押し込めるから 同様のことは、オブジェクト指向のチェーンメソッドでやっている プログラマの目の動きを考えたとき、その視点は左から右、上から下に動くのが普通。 だから、チェーンメソッドはポーランド記法よりも理にかなっている。 けれども、チェーンメソッドである以上はオブジェクトでなければならない。 行数を短くし、1行に複数の関数を押し込めて自然な流れで読むためには、 逆ポーランド記法が理にかなっているといえる
247 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:28:34.82 ] >lispのコードが読みやすい 要出典
248 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:32:02.72 ] よって、逆ポーランド記法で書けるschemeが最も自然な流れで読めるという結論に至ったわけだが
249 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:34:38.31 ] >>247 慣れの問題なだけだからなー XMLのタグよりよっぽど楽だし、構文の覚えやすさならLispの右に出るのってFrothくらいじゃないのか?
250 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:37:59.63 ] 一語ずつ順番に読むならそうかもしれんが いくつか語句を先読みしてまとめて解釈するからな 逆ポーランド記法が読みやすいなら数学なんかもそうなっているだろうし
251 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:05:04.34 ] (set! bar (fn1 (fn2 (fn3 (fn4 "foo"))))) <- "foo"まで読んでから視点が折り返し bar = fn1(fn2(fn3(fn4("foo"))) <- 上に同じ bar = "foo".fn4.fn3.fn2.fn1 <- 左から右へ一発。オブジェクトでないとダメ "foo" fn4 fn3 fn2 fn1 bar! <- プリミティブな型から自然に変換できる! vimのマクロがforthで書かれていたなら、エディタ戦争はまだまだ続いていたと思うね
252 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:06:55.12 ] >>248 schemeって逆ポーランド記法なの? 1 2 + みたいな記述するん?
253 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:19:34.65 ] だからさー、Lispでうまく分業できる方法確立したら、 世界制覇、いや銀河を制覇出来るって何度言ったら… 初めてでした。調子乗ってすみません。
254 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 21:45:16.32 ] 引数と関数のチェーンって逆の方向に伸びるから 逆ポーランドだと引数が不恰好になるよ あとリストのcarが関数の名前だとほんの少しだけマシンにやさしい
255 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 22:50:31.97 ] ちょっと何言ってるかわからないですね
256 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 23:30:53.68 ] >>255 そっか、わかりづらくてごめん でもほんとにたいした内容じゃないからスルーして
257 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 01:05:41.88 ] >>252 逆ポーランド記法な scheme があったら、って話だと思う つまり、 (5 (3 4 +) *) こういうことだよね? 案外いいかもしれない さらに Forth のように + や * が関数だと分かってると、上のは 5 3 4 + * って書けるだろうけど シンボル a, b, c, d に関数や数値が束縛されているとき a b c d はどこが引数でどこが関数なのか、普通の人間には理解できないかもしれん… メソッドチェーンは上手く表現できるんだろうけど、こんな表現を使いこなせるのは、なるほど Jedi だな さらにもし多値を返せて、それがスタックに複数の値として残ったりなんてしたら、とてもとても…
258 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 01:06:49.20 ] >>241 ありがとうございます
259 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 02:06:16.88 ] >>257 その書き方だとマクロが悲惨なことにならない? (((a 0)) ('foo 'bar (a 1 <) if) let)
260 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 02:17:06.93 ] 確かに… マクロとの相性最悪ですね だから Forth は、Lisp的なマクロじゃないんだろうな 改めてS式万能だなぁ。まさしく、Lispは「発見」されたんですね
261 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:02:24.24 ] 映画コンタクトで解読できたのは巨大な括弧だった
262 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:06:15.29 ] >>258 時既に遅かったっぽいけど、自分も書いてみた。 >>241 のCommon Lisp版も付けたので出遅れたのは見逃して欲しい。 paste.lisp.org/display/128244
263 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 05:39:21.55 ] >>259-260 マクロと相性が悪いというよりツリーと相性が悪いのでは? LispはツリーであるS式が基本なので 逆ポーランド記法は採用できないと思います。 線形リスト: ポーランド記法でまあまあ読みやすい。 逆ポーランド記法でとても読みやすい。 ツリー: ポーランド記法でだいぶ読みにくい。インデントで改善できる。 逆ポーランド記法でかなり読みにくい。 グラフ: ポーランド記法でとても読みにくい。 逆ポーランド記法でとても読みにくい。
264 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 07:51:38.54 ] 言いたいことは分かる気がするけど「だいぶ」と「とても」と「かなり」の順序が分からん あと上のLispと関係ないフレーム合戦でみんな申し合わせたようにPerl6を黙殺してて泣ける
265 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 09:46:03.03 ] >>263 グラフ同士でも読みやすさに差があるからこうですね。 <<読みやすさランキング>> 線形リスト + 逆ポーランド記法 ---- 壁0. 実行順の壁 ---- 線形リスト + ポーランド記法 ---- 壁1. 一直線の壁 ---- ========<< 越えられない壁 >>======== ツリー + ポーランド記法 ---- 壁2. 概要から詳細への壁 ---- ツリー + 逆ポーランド記法 ---- 壁3. 階層構造の壁 ---- ========<< 越えられない壁 >>======== グラフ + 逆ポーランド記法 ---- 壁4. 実行順の壁 ---- グラフ + ポーランド記法
266 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:52:36.29 ] グラフって何の話? あと、完全に後置にさせると Forth とかでも悲惨になる。 THEN FOO @ ELSE BAR @ COND 1 2 + 3 4 + < IF Lisp系言語で最初の要素がオペレータになっているのは、 compile の前に macro expansion があるから。 macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。 FORTHで完全な後置にしなくて良いのは immediate word があるから。
267 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 14:23:45.93 ] >>262 >エターナルフォースnreverseすると死ぬ これは一体…
268 名前:デフォルトの名無しさん [2012/03/10(土) 17:27:10.53 ] www
269 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:42:55.78 ] 262ではないがlisperなら使えるのでは? エターナルフォースブリザードとは - はてなキーワード d.hatena.ne.jp/keyword/%A5%A8%A5%BF%A1%BC%A5%CA%A5%EB%A5%D5%A5%A9%A1%BC%A5%B9%A5%D6%A5%EA%A5%B6%A1%BC%A5%C9
270 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:44:07.61 ] >>266 > macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。 「都合が悪い」ってのは、評価時にさらに構文解析が必要になるのが問題になるってこと? それってmacro expansionに限った話か?
271 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 18:56:43.36 ] >エターナルフォースブリザード 松本零士御大の漫画かと思いました
272 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 21:47:59.76 ] >>266 グラフ理論のグラフじゃね? ツリーは循環のないグラフと言い換えられる(グラフはツリーを含む)
273 名前:266 mailto:sage [2012/03/10(土) 22:25:57.43 ] >>270 macro expansion に限った話ではないです。例として挙げただけ。 「都合が悪い」のは、 例えば「第二要素がオペレータ」という決まりにしてしまうと 引数が0個のマクロを定義できなくなるとかです。 マクロ定義時にマクロ名を何番目に置くか定義できるようにすると、 (macro0 macro1) のような式でどちらを先に展開するのか、とか。 >>272 グラフで記述された言語って何?という意味の質問でした。
274 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/10(土) 22:59:25.81 ] BNF って構造としてはグラフだよね。
275 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:11:34.18 ] >>262 横レスだけど面白い処理だね control stringとリストを作ってから最後にまとめるわけか ただ、その処理だと文字列に~sや~aが現れたときにはエラーになってしまうような。
276 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:26:18.14 ] >>272 細かい話だが普通、循環のない無向グラフと無向を断わらないか。 有向だとDAGが循環はないがツリーでない判例になるから。
277 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:57:02.65 ] >>275 アイヤー。"~s"とかのこと忘れてたアルよ。無駄にnilの場合とか考慮してるのにね。 エターナルフォースnreverseは、>>239 で闇とか言われてたので、そんなテンションだったとき、 途中で要素を共有してたのを忘れてnreverseして自分が死んだ。相手は死なない。平和。 結局loopとかformatとか良く使わないのであんま分かんなかった。アップルパイ美味しいです。
278 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 07:14:21.07 ] 最初は、データ構造として用意したS式以外に 、プログラムを書くためのM式ってのがあった。 squab.no-ip.com:8080/wiki/435 ja.m.wikipedia.org/wiki/LISP www.google.co.jp/search?hl=ja&q=M%E5%BC%8F+%E4%B8%AD%E8%A5%BF%E6%AD%A3%E5%92%8C&oq=M%E5%BC%8F+%E4%B8%AD%E8%A5%BF%E6%AD%A3%E5%92%8C 慣れの問題かS式のが見やすい、、
279 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 07:40:21.31 ] yamlに変換したら読みにくそう
280 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:01:54.68 ] >>278 S式が用意された理由は、データ構造というか構文木の表現のためだよ だから本来のS式にとって、データ構造の表現は副次的な役割に過ぎない
281 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:13:47.61 ] 逆だよ。 データ構造が先で、evalを理論的に説明するために、ソースコードを データ構造で表現する必要があって、そういうことになった。
282 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:08:32.47 ] 元のレポート読んでないけど、Wikipediaの記述ではデータ構造が先だな。
283 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:17:50.86 ] 数式処理をしたい 動的データ構造が必要 FORTRANでリスト処理ライブラリを書く リスト処理ライブラリで数式処理プログラムを書いてみた 数学やってたからλ式採用 万能関数eval発見 Lispの誕生 こんな経緯だったはず。 M式はコンスセルを意識しやすい表記として、かなり初期に考えられたはず。
284 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:14:10.01 ] あれ?そうなるとeval誕生前にはどうやって処理していたんだろうか
285 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:50:53.77 ] evalはインタプリタ。 コンパイラがあったらしいように読めたような気がする。
286 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 22:50:04.17 ] 当初evalは数式処理をしていたが、万能関数ではなかった。 >>285 無茶言うな。
287 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:28:18.89 ] www-formal.stanford.edu/jmc/recursive/node4.html には、コンパイラがある、と書いてあるように読める。 一方で、これの後半には eval があるけど、 www-formal.stanford.edu/jmc/recursive/node3.html 伝説によれば、ラッセルが実装してみせるまで、マッカーシーは 実装できるものと思っていなかった、とされている。
288 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:46:37.82 ] >>287 FLPL(fortran list processing library)辺りからの経緯の話なんだけど。 その前にもNSS listとかIPLとか先駆的な仕事があるんですよ。 いきなりLispやLispコンパイラが生まれたんじゃなくて。
289 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:48:29.52 ] うーん なんかよく分からなくなってきた 表や図でlispの歴史をまとめているのは無いのかな
290 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 00:07:05.51 ] IPL軽視されすぎ。 IPLなければLispのようなものはLispにはなってなかったはず。 FLPLは当初IPL-IIに翻訳される予定だったが、 McCarthyがFORTRANで記述できると助言したらしい。
291 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 07:59:45.70 ] >>276 うん、条件を見落としてた ごめん >>273 >>263 とは別人だから真意は分からないけれど CLや特定のSRFIを含むSchemeだと#n=と#n#で循環も書けるから 念の為にグラフも比較対象に含めたんじゃないかと思う
292 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 18:43:06.24 ] 質問です Gaucheです hash-table関数などのように可変個引数を取る関数に、自前のリストを出力する関数から値を渡したいのですが、形式をどのように変換すればよいのですか? e.g. '((foo bar) (piyo hoge))を (hash-table '(foo bar) '(piyo hoge))のように渡したいのです
293 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 19:13:34.20 ] >>292 aplly を使え。 それと hash-table の第一引数はハッシュテーブルのタイプ (比較関数) だぞ。
294 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 19:14:35.66 ] まちごた… aplly じゃなくて apply だ。 こんな基本的なところでタイプミスとはカッコわりぃ〜 orz
295 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:20:33.73 ] Gaucheなら (use util.list) (alist->hash-table '((foo bar) (piyo hoge))) ちなみに、alistからの変換なので、元データの形式を '((foo . bar) (piyo . hoge)) としないと意図と違うことになると思う
296 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:21:42.12 ] アップリー
297 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 20:30:50.45 ] >>295 あらためでドキュメント見てて気付いたんだが、 alist->hash-table のデフォルトの比較関数は eq? ってのが書いてないのは忘れてるだけなのかなぁ。 practical-scheme.net/gauche/man/?l=jp&p=alist->hash-table 指摘した方がいいだろうか。
298 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 02:44:49.93 ] Lisper 死んでも誰も困らない この世のゴミ 早くGCに回収されろ
299 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 03:26:43.37 ] >>298 おっぱい?
300 名前:プログラミング超初心者 mailto:sage [2012/03/19(月) 03:38:50.39 ] リリカルLISPっていう学習ソフトで詰んだので答えて頂けるとうれしいです。 問い:関数fを引数の第二要素を返す関数として定義しなさい。ただし引数は一つ。
301 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 03:43:00.67 ] (define f cadr)
302 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 03:53:04.02 ] (define (f 大好き おっぱい) おっぱい) これは糖衣構文だから、このレベルが解けないくらいの初心者なら、 (define f (lambda (大好き おっぱい) おっぱい) ) という感じで、糖衣構文を使わず、 defineによって f に 無名関数lambda を 束縛する、ときちんと覚えたほうがいいかも
303 名前:302 mailto:sage [2012/03/19(月) 03:57:18.63 ] というか、俺もリリカルLISPでSchemeをはじめたんだけど ちゃんと途中に引数と戻り値については説明があっただろ そこは詰む場所じゃねーぞ
304 名前:302 mailto:sage [2012/03/19(月) 04:19:41.21 ] なんで詰んでるんだろうと思ってリリカルLisp起動してちゃんと問題読んだ >>300 を読み直した 恥ずかしすぎるから吊ってくる
305 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 04:50:09.92 ] かける言葉もないわ。コレは吊るしかない
306 名前:プログラミング超初心者 mailto:sage [2012/03/19(月) 05:02:57.53 ] ありがとうございます 何故か分からないけど(define f cadr) で解けました。 これは何かの省略した形ですかね。 ヒントを参考に(define f (lambda (x) なんちゃら))こんなので色々考えましたが 思いつきませんでした。
307 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 05:27:08.66 ] >>306 cadrを束縛してる手続きでfを束縛するってこと。 要はcadrにfっていう別名を付けた。 (define x 10) とかと考え方は同じ。
308 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 05:32:15.37 ] ちなみに (define f (lambda (lis) (car (cdr lis)))) が多分意図する正解だと思う。 多分 (car (cdr lis)) の部分をやらせたかったんじゃないかな。 (lambda (lis) (car (cdr lis))) は cadr として最初から定義されているので同じ意味ってことね
309 名前:デフォルトの名無しさん [2012/03/19(月) 07:06:35.29 ] (define (cr ad sex) (case ad ((a) (car sex)) ((aa) (car (car sex))) ((aaa) (car (car (car sex)))) ((aaaa) (car (car (car (car sex))))) ((aaaaa) (car (car (car (car (car sex)))))) ((aaaaaa) (car (car (car (car (car (car sex))))))) ((aaaaaaa) (car (car (car (car (car (car (car sex)))))))) 無限に続く)) これを効率よく実装するにはどうしたらいいでしょうね
310 名前:デフォルトの名無しさん [2012/03/19(月) 08:02:33.27 ] ;;効率的かは分からないが ;;Gauche (define (cr ad sex) (letrec ((port (open-input-string (symbol->string ad))) (iter (lambda (sex) (let ((ch (read-char port))) (cond ((eof-object? ch) sex) ((char=? ch #\a) (iter (car sex)))))))) (iter sex))) ;;aかどうかを気にしないなら(length (symbol->string ad))でもいいと思う
311 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:16:09.74 ] ×length ○string-length だった(13行目)
312 名前:デフォルトの名無しさん [2012/03/19(月) 08:36:23.73 ] (define (cr ad sex) (define (iter ls sex) (cond ((null? ls) sex) ((char=? #\a (car ls)) (iter (cdr ls) (car sex))))) (iter (string->list (symbol->string ad)) sex))
313 名前:デフォルトの名無しさん [2012/03/19(月) 08:44:36.90 ] ;;やっと言いたいことを理解したが効率的ではないな (define (cr ad sex) (define (iter ls sex) (cond ((null? ls) sex) ((char=? #\a (car ls)) (iter (cdr ls) (car sex))) ((char=? #\d (car ls)) (iter (cdr ls) (cdr sex))))) (iter (reverse (string->list (symbol->string ad))) sex))
314 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 09:15:59.79 ] そういうのこそマクロ使うんだよ
315 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 09:56:32.71 ] (define (apls ls arg) (if (null? ls) arg ((car ls) (apls (cdr ls) arg)))) とでもして (apls (map (λ (ch) aならcar dならcdr) (stringー>list (symbol->string ad))) sex) みたいなのとか
316 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/19(月) 10:06:05.34 ] >>310 もっと積極的に (というか無闇に) Gauche の機能を使ってみた。 (define (cr a x) ($ port-for-each (cut $ update! x $ case <> ((#\d)cdr)((#\a)car)) $ cute read-char $ open-input-string $ symbol->string a) x)
317 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 10:24:33.65 ] ごーしゅよくわからないけど適用順ぎゃくじゃない?
318 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:17:19.77 ] Closure(これは古い日記です) - Diary(uid) d.hatena.ne.jp/uid/20051129 よくわからないんだがclusureって無名関数のことだったの?
319 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:21:49.70 ] lambdaは無名関数でもありクロージャでもある 無名であることとクロージャは無関係
320 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:42:25.98 ] Lispスレ的には、昔のlambdaで作られる関数は動的束縛で、クロージャではなかった。 あと、無名関数という特別なものがあるとか考えるよりも、関数に名前が必要な言語と そうでない言語があって、名前が必要ない言語では名前を付けないと無名(匿名)関数に なる、という風に考えたほうが良いと思われ。
321 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/19(月) 18:58:38.20 ] >>318 言葉の意味はとりあえず Wikipedia 見ておけばだいたいわかる。 ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3 >>320 を補足すると昔の方式の LISP のひとつには emacs lisp がある。 喩えば対話モードで (lambda () 'hoge) と入力すると (lambda nil (quote hoge)) と返ってくる。 これは emacs lisp の中では lambda で作られる関数は単に「car が lambda というシンボルであるリスト」として表されていることを意味する。 静的な環境と結び付いていない。 あと、極論するなら Scheme の手続きは全て無名。 (define (x) 'hoge) みたいに書いても、これは (define x (lambda() 'hoge)) の構文糖だから。 名前は変数についているのであって関数の名前ではない。
322 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 06:14:08.18 ] >>314 わからないので、やってみてください
323 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 07:04:51.44 ] >>322 ほれ (define-macro (cr ad sex) (let loop ((ad (string->list (symbol->string ad)))) (if (null? ad) sex (if (char=? (car ad) #\a) `(car ,(loop (cdr ad))) `(cdr ,(loop (cdr ad))))))) (cr a '((a) b c)) =>(a) (cr aa '((a) b c)) =>a (cr ad '((a) b c)) =>b (cr add '((a) b c)) =>c
324 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 20:19:10.55 ] SchemeとCommonLispは完全に時代遅れ これからはclojureの時代
325 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 08:22:26.09 ] Clojureは大好きだけどそんなことはないと思う
326 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 13:41:51.74 ] >>325 どんなところがそんなことないと思うのですか?
327 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 14:30:33.31 ] common lispとschemeのコードをシンタックス・ハイライトで色づけできる wikiを自分のサイトに設置したいのですが、何かおすすめはありますか? これまではgaucheのwilikiを使っていましたが、 wilikiではシンタックス・ハイライトを導入できそうになかったので。
328 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/22(木) 15:12:02.26 ] >>327 google-code-prettify なら CL や Scheme に対応してるし、 WiLiKi に導入することも簡単だよ。
329 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 15:22:44.98 ] >>328 ありがとう。google-code-prettifyの使い方を見てみた。 javascriptとcssのファイルの読み込みはwilikiに簡単に追加できそう。 だけど、<pre class="prettyprint linenums:4">のように pre要素のclassに任意の文字列を渡すことはwilikiではできないのでは?
330 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:04:46.17 ] ここ、Wilikiでシンタックスハイライト使ってるけど、wiliki本体を改造してるのかな。 community.schemewiki.org/?scheme-style
331 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:11:46.88 ] >>326 JVMやCLIのような「ホスト」環境にアクセスするのは自然な事としている所はCLやSchemeとは違うと思う それに、共有された状態を管理する手段としてロックを推奨しないなど、まだ一般に浸透していない設計上の判断がある その判断が良いものかどうかは別の話だけど、少なくともCからC++のように 「コンパイラを入れ替えて、多少のエラーを直せば一応移行できる。それからより良い方法を学べばいい」というわけにはいかない 俺はClojureをCLやSchemeを過去の遺物にするような何かではなく、今までも沢山あった方言の一つだと思っていて その上でClojureが好きで、長期間続いて欲しくて、他の言語にClojureが良い影響を与えたらいいなと思う だから「CL・Schemeは死んだ、これからはClojure」みたいな主張には頷けない