Lisp Scheme Part31
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2010/09/03(金) 18:50:52■前スレ
Lisp Scheme Part30
http://hibari.2ch.net/test/read.cgi/tech/1270897776/
■テンプレ
http://wiki.fdiary.net/lisp/
■関連スレ
【入門】Common Lisp その7【質問よろず】
http://hibari.2ch.net/test/read.cgi/tech/1270370267/
0002デフォルトの名無しさん
2010/09/03(金) 19:44:19乙です
0003デフォルトの名無しさん
2010/09/03(金) 23:24:38http://hibari.2ch.net/test/read.cgi/tech/1275891974/
0004デフォルトの名無しさん
2010/09/03(金) 23:35:52とりあえずClojureのスレ
http://hibari.2ch.net/test/read.cgi/tech/1255533519/
0005デフォルトの名無しさん
2010/09/04(土) 04:43:24|l| i|li /___ ≡
l|! |´・ω・`| :l. __ _ / |´・ω・`| \
!i ;li __ ̄ ̄ ̄ /  ̄ ̄ ̄ 三
i!| ⊂i|li二;l|i  ̄ ̄ ̄ キ i ヽ、_ヽ
l|! ;li  ̄ ̄  ̄ └二二⊃ l ∪
:li i|li | ,、___, ノ
i!| |i i! ;l ヽ_二コ/ 三‐ ―
i| ; /__/´_____
; _,/.,,,//
/ ̄ ̄ ̄
/ ___ / ; ;
/ |´・ω・`| / ヒュンッ
/ _,  ̄⊂二二
/ l l / //
| |
/
____ ヽ / \ /
/___ \ : /ヽノ //
ニ/ |´・ω・`| \/ / /
/  ̄ ̄ ̄ \/ /;
≡ i ヽ、_ヽ
└二二⊃ l ∪
| ,、___, ノニ≡ ; .: ダッ
キ_二コ/ /三 三 人/! , ;
ニ =/__/´三‐ ―_____从ノ レ, 、
0006デフォルトの名無しさん
2010/09/05(日) 00:55:040007デフォルトの名無しさん
2010/09/06(月) 10:59:300008デフォルトの名無しさん
2010/09/06(月) 14:38:04CLへの登竜門と考えてればGaucheだのEmacsだのウザったらしい。
0009デフォルトの名無しさん
2010/09/06(月) 16:34:48IDEがあるAllegroやLispWorksは驚くほど高いよ?
EclipseとCUSP使う手もあるけど、SBCLしか使えないって話だし。
そもそもRacketのエディタ自体がEmacs互換のキーバインドだった気が。
0010デフォルトの名無しさん
2010/09/06(月) 16:42:09純粋にメモリが足りてない、っていうんじゃないなら、これかなー。
ttp://groups.google.com/group/plt-scheme/browse_thread/thread/a9eba7d1fd272e4b
0011デフォルトの名無しさん
2010/09/06(月) 16:43:53SBCLしか使えないって何か問題あるの?
そんなに処理系をたくさん使ってなにするの?
0012デフォルトの名無しさん
2010/09/06(月) 16:56:43SBCLはフットプリントが巨大な、いわゆる重量級の処理系で、
用途によってはマッチしないことがある。
そういうとき、CLISPとかの軽量な処理系に切り替えられない。
あるいは、Cと連携するためにECLを使いたい、
ARM向けに開発したいからClozure CLを使いたい、
SBCL以外の処理系で動作するか確かめたい、
みたいなケースもある。
0013デフォルトの名無しさん
2010/09/06(月) 17:13:32Thread関係Windowsでも使えるようになったかってのが一番でかかったりするんだけど、どうなった?
Thread使えないとhenchentootとかで遊べないのよ
0014デフォルトの名無しさん
2010/09/06(月) 17:50:36SBCLのWindowsでのスレッドサポートならお察しください。
Windowsでスレッドを使えるCommon Lispの処理系があるか、という意味なら、
CLISP、Clozure CL、ECL、商用処理系をご利用ください。
0015デフォルトの名無しさん
2010/09/06(月) 18:52:43仮想Linux上でEmacs使ってみるのもいいよ
0016デフォルトの名無しさん
2010/09/06(月) 22:27:04が標準になってないんだろう。
viですらあるのに。
0017デフォルトの名無しさん
2010/09/06(月) 22:52:42何故そう思ったんだ?
0018デフォルトの名無しさん
2010/09/06(月) 22:52:520019デフォルトの名無しさん
2010/09/06(月) 23:09:40(define (pn x) (display x) (newline))
(define (f a)
(let ((x a))
(lambda ()
(set! x (+ x 1))
(lambda (t)
(let ((y t))
(lambda ()
(set! y (+ y 1))
(display "x=")(pn x)
(display "y=")(pn y)
(+ x y)))))))
(define a (f 10))
(define b (a)) ;x=11になってほしいが・・x=12になる
(define b2 (a)) ;x=12
(define c (b 20))
(define d (b2 20))
(c)(c)(c) ;yは順調に育つよい子
(d)(d)(d) ;yは順調に育っよい子
0020デフォルトの名無しさん
2010/09/06(月) 23:38:210021デフォルトの名無しさん
2010/09/06(月) 23:39:24> (define b (a)) ;x=11になってほしいが・・x=12になる
> (define b2 (a)) ;x=12
何がしたいのかわからん。
(define b (a)) のときに x に 1 が足されて (define b2 (a)) のときにもう一度1が足されるのだから、
お前が x=11 になって欲しいときには x=11 になっている。
0022デフォルトの名無しさん
2010/09/06(月) 23:50:44(define (f x)
(let ((a x))
(lambda () (set! x (+ x 1)) x)))
(define x (f 10))
(define y (f 20))
(x)(x)(x)(y)(y)(y)
こうするとxとyは独立して変更出来るのに
2段階にすると動かなくなるのは何ででしょう?
書き方が悪いだけなんじゃないかと思ってるんですが
クロージャってオブジェクト指向の
オブジェクトと同列に語られることがあるから
出来そうな感じなのに、それとも
closure is poor man's objectってことですか
0023デフォルトの名無しさん
2010/09/07(火) 00:15:32(define (f a)
(let ((x a))
(lambda ()
(set! x (+ x 1))
(let ((x x)) ;これ
(lambda (t)
(let ((y t))
(lambda ()
(set! y (+ y 1))
(display "x=")(display x) (display " , y=")(pn y)
(+ x y))))))))
0024デフォルトの名無しさん
2010/09/07(火) 00:38:22C-M-b、C-M-fは?
0025デフォルトの名無しさん
2010/09/07(火) 00:53:12そんなに使用頻度高いのだろうか。
0026デフォルトの名無しさん
2010/09/07(火) 02:31:21viは移動コマンドを編集のときに組み合わせるんで、
移動用に使用頻度が低くても、編集用に無いと困るんですよ。
d%とかy%とか。df)とかだとネストしてると無理なので。
この辺、編集コマンドが独立してるEmacsとは思想が違います。
0027デフォルトの名無しさん
2010/09/07(火) 03:52:47Vimならテキストオブジェクトで設定できそうだけどどうやるんだろ。
0028デフォルトの名無しさん
2010/09/09(木) 20:56:06ttp://d.hatena.ne.jp/Dubhead/20100312/p1
こんな風に評価できるとこだけ評価するlispなんて面白そう
0029デフォルトの名無しさん
2010/09/10(金) 02:18:03やって面白いか試すんだ
0030デフォルトの名無しさん
2010/09/10(金) 19:57:580031デフォルトの名無しさん
2010/09/11(土) 20:48:420032デフォルトの名無しさん
2010/09/12(日) 12:09:070033デフォルトの名無しさん
2010/09/13(月) 00:42:44Maximaの演算子は
右側への結合性と左側への結合性とで分けて定義できる
どういうルールなのかまで把握出来てないが
あいつらは、かなりへんてこりん
0034デフォルトの名無しさん
2010/09/13(月) 07:24:510035デフォルトの名無しさん
2010/09/13(月) 10:53:27SICP
0036デフォルトの名無しさん
2010/09/13(月) 15:22:52SICP
0037デフォルトの名無しさん
2010/09/13(月) 20:37:510038デフォルトの名無しさん
2010/09/13(月) 23:35:360039デフォルトの名無しさん
2010/09/14(火) 02:17:31ttp://www.megaupload.com/?d=6ZOPQTP0
sick pee
0040デフォルトの名無しさん
2010/09/15(水) 22:26:09WindowsでのScheme学習なら最高かもしれん
0041デフォルトの名無しさん
2010/09/16(木) 00:41:42あとあの無駄に豊富なドキュメント群。
速度もそこそこでライブラリも多い方。
加えて日本語の扱いも問題ないとくれば。
0042デフォルトの名無しさん
2010/09/16(木) 03:41:34euc, utf sjis
全部いけた?
0043デフォルトの名無しさん
2010/09/16(木) 08:43:20これは日本語の扱いさえよくなれば〜
って意味でしょ
0044デフォルトの名無しさん
2010/09/17(金) 01:40:29ttp://docs.racket-lang.org/reference/bytestrings.html
何度も何度も出してる気がするが、上記参照。
EUC-JPでもUTF-8でもShift_JISでも好きなの使え。iconv使ってるから。
ああ、でもIDEの方は知らん。Shift_JISで多少引っ掛かったりするかもね。
0045デフォルトの名無しさん
2010/09/17(金) 12:55:50継続でも使って探索すると便利なのだろうか
0046デフォルトの名無しさん
2010/09/17(金) 13:54:160047デフォルトの名無しさん
2010/09/17(金) 23:17:09SXPath使うならPerlでXPath使うのと変わらんでしょ。
SXMLの利点は>>46も言ってるように、リストとして好き放題処理できること。
再帰でトラバースするもよし、部分木をmapやfoldで処理するもよし。
0048デフォルトの名無しさん
2010/09/18(土) 01:49:27単に XPath をS式で表現しただけじゃないんだよ。
0049デフォルトの名無しさん
2010/09/18(土) 01:54:17I/O周りでハングすることがあるとか言ってるけど、
そのうちマトモに動くようになることを期待。
http://clgtk2.wordpress.com/2010/09/16/related-project-sbcl-win32-threads/
0050デフォルトの名無しさん
2010/09/18(土) 04:33:33SBCLの面子は無能ばっかりなのかよほどメンテがし辛いのか
0051デフォルトの名無しさん
2010/09/18(土) 08:01:37そこまで言うなら、オマイが手伝ってやれよ。
0052デフォルトの名無しさん
2010/09/18(土) 08:07:25だから、自分は自分の人生を生きていくのね・・・
0053デフォルトの名無しさん
2010/09/18(土) 11:44:060054デフォルトの名無しさん
2010/09/18(土) 11:53:34単に「Lisp」と言ったときには Scheme を含むLisp 系言語全部のことがある。
文脈によっては CommonLisp のこともある。
マッカーシが論文に書いたやつのことだったりもする。
お前が言う Lisp とは何だ。
0055デフォルトの名無しさん
2010/09/18(土) 12:02:53一方言としての実装のことです。
0056デフォルトの名無しさん
2010/09/18(土) 12:05:47なります。
0057デフォルトの名無しさん
2010/09/18(土) 12:08:33(define a 10)
(define (f x) (+ a x))
(define (g x) (+ (f x) a))
(define a (+ a 10)) ;(set! a (+ a 10))
(define (p x) (display x) (newline))
(p (f 10))
(p (g 10))
(define (f x) (- a x))
(p (f 10))
(p (g 10))
(define (g x) (- (f x) a))
(p (f 10))
(p (g 10))
0058デフォルトの名無しさん
2010/09/18(土) 12:12:07いいえ。
0059デフォルトの名無しさん
2010/09/18(土) 12:23:31let a=10
let f x=a+x
let a=20
f a
これに相当するコードの実行結果は、
Haskell,OCaml,F#全てのインタプリタで30ですが
(define a 10)
(define (f x) (+ a x))
(define a 20)
(f a)
schemeインタプリタでは40になります
0060デフォルトの名無しさん
2010/09/18(土) 12:40:440061デフォルトの名無しさん
2010/09/18(土) 12:43:41Schemeでもこうすれば30になる。
(define a 10)
(define (f x) (+ a x))
(let () (define a 20) (f a))
0062デフォルトの名無しさん
2010/09/18(土) 12:55:59レスどうも。参考になります。
0063デフォルトの名無しさん
2010/09/18(土) 12:58:19OCamlでlet recを使っても結果は変わりませんし
>>61 letが静的束縛であるのには元々異論は無いです
元はReal World Haskellを読んでて知ったんですが
let x=5
let f a =a+x
let g a=f a
let f a =a-x
let x=7
f 35
変数が動的束縛、関数が動的束縛なら28
変数が動的束縛、関数が静的束縛なら42
変数が静的束縛、関数が動的束縛なら30
変数が静的束縛、関数が静的束縛なら40
になるらしく
Haskellインタプリタでは変数は静的束縛、関数は動的束縛だそうです
schemeはどうなのかなと思って書いたコード
自信が無いので聞いてみました
0064デフォルトの名無しさん
2010/09/18(土) 12:59:31R6RS では明確に禁止されている。
0065デフォルトの名無しさん
2010/09/18(土) 13:05:56(define a 10)
(define (f x) (+ a x))
(define (g x) (+ (f x) a))
(define (p x) (display x) (newline))
(p (f 10))
と書いたなら
(letrec* ((a 10)
(f (lambda(x)(+ a x)))
(g (lambda(x)(+ (f x) a)))
(p (lambda(x) (display x) (newline))))
(p (f 10)))
と同じ意味になる。
0066デフォルトの名無しさん
2010/09/18(土) 13:11:130067デフォルトの名無しさん
2010/09/18(土) 13:11:33なるほど、ありがとうございます。
先のhaskell etcも、同じく同じものを二度定義するのはエラーなので
「インタプリタ」という但し書きを付けてます
インタプリタで同じ変数を何度も定義出来ないのは不便すぎますしね
最初のコードでコメントアウトしてある
(set! a (+ a 10))ですが
これと入れ替えても動的束縛される結果になるので
defineの動作は動的束縛のように見えます
(自分の環境はR5RSです)
>>65
とても参考になります。
R6RSの処理系入れてないので
この動作を頭の中で考えてみます
0068デフォルトの名無しさん
2010/09/18(土) 13:12:270069デフォルトの名無しさん
2010/09/18(土) 13:32:58その展開形を見ると一発で判るんだがな。
let系が全部マクロで実装されてて、
macroexpandできる処理系が手元にあればいい。
0070デフォルトの名無しさん
2010/09/18(土) 13:43:36そもそも<variable>の複数回定義を許してないので
インタプリタの動作は実装依存ってことでしょうか
R6RSの処理系をいくつか入れてテスト(とりあえずすぐインストール出来たのだけ)
テストコード
(define x 5)
(define (f a) (+ a x))
(define (g a) (f a))
(define (f a) (- a x))
(define x 7)
(f 35)
結果
R6RS
Ypsilon 28
Larceny 28
Racket 28
schemeインタプリタは実際の所、一貫してますね
0071デフォルトの名無しさん
2010/09/18(土) 13:54:28http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%e5%a4%89%e6%9b%b4%e7%82%b9#H-19yd41rqaw7zv
0072デフォルトの名無しさん
2010/09/18(土) 14:56:29(letrec ((a b) (b 3)) a)
(letrec ((a (list a b)) (b 3)) a)
これらはエラーなんだけど、
ちゃんと意味解析のエラーではじく処理系ってあるかいな?
特に後者のケースで。
手抜き処理系だと良くて実行時エラーか、
評価順序の関係でエラーにならなかったりする。
0073デフォルトの名無しさん
2010/09/18(土) 18:56:14oeditのマクロ
0074デフォルトの名無しさん
2010/09/19(日) 05:04:03実行時エラーっぽいけどちゃんとエラーにはなるね
内部的にunboundな属性でも持ってるんだろうか
0075デフォルトの名無しさん
2010/09/19(日) 09:50:54そのコードは意味的にこれと同じ
let x=5 in let f a=a+x in let g a=f a in let f a =a-x in let x=7 in f 35
つまり、 x=7 は新しい環境で x という名前の変数を作っているので、
関数 f や g の中で参照している x は依然としてそのまま存在している。
Scheme で言えば
(let ((x 5))
(let ((f(lambda(a)(+ a x))))
(let ((g(lambda(a)(f a))))
(let ((f(lambda(a)(- a x))))
(let ((x 7))
(f 35))))))
ってこと。
define が set! の意味になる場合があるのが混乱の元だな。
r6rs で禁止にしたのは良い選択だと思う。
0076デフォルトの名無しさん
2010/09/19(日) 11:08:22動的束縛と考えるのは変ですね
インタプリタで定義した順に、inでスコープが作られているって考えると
全て静的束縛で説明出来るわけか
0077デフォルトの名無しさん
2010/09/20(月) 12:38:17((lambda (x)
((lambda (f)
((lambda (g)
((lambda (f) ((lambda (x) (f 35)) 7))
(lambda (a) (- a x))))
(lambda (a) (f a))))
(lambda (a) (+ a x))))
5)
>>70をletrec*として直したやつ
((lambda (x f g)
(set! x 5)
(set! f (lambda (a) (+ a x)))
(set! g (lambda (a) (f a)))
(set! f (lambda (a) (- a x)))
(set! x 7)
(f 35))
'()
'()
'())
>>77
0078デフォルトの名無しさん
2010/09/20(月) 23:39:42Lispだと「リスプラス」とでもなるのかなw
0079デフォルトの名無しさん
2010/09/22(水) 22:07:52carで出会って、cdrで深まり、consする
0080デフォルトの名無しさん
2010/09/22(水) 22:13:57LiS#
0081デフォルトの名無しさん
2010/09/22(水) 22:59:270082デフォルトの名無しさん
2010/09/22(水) 23:02:39じゃ馬。馬は何種類か知ってる?3兆wwwwwwwwwwwwwwwwww
ちなみにゴリラはみんなB型だってwww少なくねwwwww 全部自己中だよゴリラwwwwww
ゴリラってよ、あれ通称ってこと知ってんだろ。
あれの本名、つまり学名ってなんだか知ってる?知ってる?
ゴリラ・ゴリラだってwwwww
まんまじゃねえか。まんまじゃねえかおい。それがローランドゴリラだとなんだか知ってる?
ゴリラ・ゴリラ・ゴリラだってwwwwwwwwwちょwwおまwwwww
0083デフォルトの名無しさん
2010/09/23(木) 00:53:290084デフォルトの名無しさん
2010/09/23(木) 02:37:210085デフォルトの名無しさん
2010/09/23(木) 07:54:550086デフォルトの名無しさん
2010/09/23(木) 08:46:550087デフォルトの名無しさん
2010/09/24(金) 08:13:02ttp://journal.mycom.co.jp/articles/2010/09/24/lisp/index.html/
0088デフォルトの名無しさん
2010/09/24(金) 12:19:320089デフォルトの名無しさん
2010/09/24(金) 14:11:41もちろんwindowsで使えるやつ
0090デフォルトの名無しさん
2010/09/24(金) 21:11:47まるちうざい
0091デフォルトの名無しさん
2010/09/24(金) 21:44:15Twitterとかでも流行っています(笑)」
とりあえず括弧の使い方がなってない
0092デフォルトの名無しさん
2010/09/24(金) 21:46:420093デフォルトの名無しさん
2010/09/24(金) 22:47:340094デフォルトの名無しさん
2010/09/24(金) 23:37:040095デフォルトの名無しさん
2010/09/25(土) 00:46:500096デフォルトの名無しさん
2010/09/25(土) 02:12:250097デフォルトの名無しさん
2010/09/25(土) 06:23:510098デフォルトの名無しさん
2010/09/26(日) 00:02:22http://groups.csail.mit.edu/mac/users/dae/
0099デフォルトの名無しさん
2010/09/26(日) 00:26:500100デフォルトの名無しさん
2010/09/26(日) 00:29:200101デフォルトの名無しさん
2010/09/26(日) 02:14:340102デフォルトの名無しさん
2010/09/27(月) 14:53:430103デフォルトの名無しさん
2010/09/27(月) 15:47:51stalin遅い
0104デフォルトの名無しさん
2010/09/27(月) 19:41:230105デフォルトの名無しさん
2010/09/28(火) 03:02:41それなりに堅実に発展してるよ。
http://gazette.call-cc.org/
0106デフォルトの名無しさん
2010/09/28(火) 13:38:43(string-append "(fib 32) =>" (fib 32))とか自明なやつや、
数字または真偽値を返すようなやつで
(define (numfilter n) (if (number? n) n #f))
(list (numfilter 1) (numfilter 2) (numfilter "3"))はOKでも
(+ (numfilter 1) (numfilter 2) (numfilter "3"))はエラーとか
0107デフォルトの名無しさん
2010/09/28(火) 13:44:32(define (make-pair a b) (cons a b) ) ; => (a . b)
(length (make-pair 1 (make-pair 2 '()))) ; OK
(length (make-pair 1 2)) ; エラー:リストでない
こういう風に実行前に検出するとか
まあこの例では定数畳み込みやってたら判ることだろうけど
0108デフォルトの名無しさん
2010/09/28(火) 13:59:020109デフォルトの名無しさん
2010/09/29(水) 01:04:41を実行するとa+1,a+2,a+3みたいになってしまうのな
久しぶりにmaximaスレを探してみれば、
シミュレート版も数学版もDAT行きか
0110デフォルトの名無しさん
2010/09/29(水) 12:41:090111デフォルトの名無しさん
2010/09/29(水) 20:29:15LittleとSeasonedの間には結構ギャップありますよね?
焦らずに巻末の推薦図書読んだ方が良いのかな。
0112デフォルトの名無しさん
2010/09/30(木) 00:26:40http://lispuser.net/commonlisp/qi.html
0113デフォルトの名無しさん
2010/09/30(木) 00:32:160114デフォルトの名無しさん
2010/09/30(木) 17:06:32C in Sexp
次は何がくるんだろな
0115デフォルトの名無しさん
2010/10/01(金) 19:49:14rubyはlispじゃないよな
0116デフォルトの名無しさん
2010/10/02(土) 19:48:16c-wrapperがmacportで動かない
0117デフォルトの名無しさん
2010/10/02(土) 21:24:45http://blog.livedoor.jp/naoya_t/archives/51324267.html#more
修正は必要ながら、根本的な部分は問題ないはず。
動かなかったとしても Gauche の側の責任ではないな。
0118デフォルトの名無しさん
2010/10/03(日) 02:12:49他の人も動いてないことがわかってよかったです
危うくいろいろ再インストールするとこだった
0119デフォルトの名無しさん
2010/10/04(月) 05:00:40MacでGaucheの挙動が変なのはMacのgccの独自機能が原因らしい
Macのgccには関数プログラミングの機能が強引に組み込まれてるそうな
0120デフォルトの名無しさん
2010/10/04(月) 08:23:520121デフォルトの名無しさん
2010/10/05(火) 17:42:14C のループ系構文の continue 相当の動作ってさせられないものかな?
named ラベルで go しようとしてもできないし。
0122デフォルトの名無しさん
2010/10/06(水) 13:51:39また規制か
0123デフォルトの名無しさん
2010/10/06(水) 15:06:05gaucheには最初から入ってるけど、これは使えないかな
(define-syntax let/ec
(syntax-rules ()
[(_ name body ...)
(call-with-current-continuation (lambda (name) body ...))]))
0124デフォルトの名無しさん
2010/10/06(水) 18:24:10CommonLisp の loop って書いてんのになんで gauche の話になってんの
0125デフォルトの名無しさん
2010/10/06(水) 18:31:240126デフォルトの名無しさん
2010/10/06(水) 19:00:44Schemeではネームスペースはどのように作るものなのでしょうか?
0127デフォルトの名無しさん
2010/10/06(水) 19:16:14標準はない。
0128デフォルトの名無しさん
2010/10/06(水) 19:35:21ずばりC++やJavaのようなネームスペースをつくりたとおもっておりました。
標準ではないとのことですが、自作できるという事で良いのでしょうか・・・?
0129デフォルトの名無しさん
2010/10/06(水) 19:46:52たとえばGaucheではモジュールと呼んでいる。
0130デフォルトの名無しさん
2010/10/06(水) 19:49:550131デフォルトの名無しさん
2010/10/06(水) 20:00:04採用したはずだけど、具体的にどうやってモジュラな処理系にしてるんだ?
0132デフォルトの名無しさん
2010/10/06(水) 20:34:560133デフォルトの名無しさん
2010/10/06(水) 22:18:12前スレで、名前空間的なものを作るマクロが話題になってたから参考にしてみれば?
↓この周辺
http://www.nihongodeok.net/thread/hibari.2ch.net/test/read.cgi/tech/1270897776/#message_980
0134デフォルトの名無しさん
2010/10/07(木) 01:32:09階層化もないし空間自体ないし省略もできない
0135デフォルトの名無しさん
2010/10/07(木) 11:55:45UCL Package
がGaucheでも動くことはあるのだろうか
0136デフォルトの名無しさん
2010/10/08(金) 10:55:36Gauche が R6RS モードを実装すればそういうこともあるんじゃね?
0137デフォルトの名無しさん
2010/10/09(土) 01:39:24continueそんなに使いたいときある?
unless節じゃ駄目なの?
0138デフォルトの名無しさん
2010/10/09(土) 03:21:56>>132
importで同様の処理ができる。インポートする束縛にprefixを付けたり、renameしたり。
R6RS libraryが実質的な名前空間。
0139デフォルトの名無しさん
2010/10/11(月) 03:56:57を実行しようとしたら、
*** ERROR: Autoloaded symbol ~$ is not defined in the module gauche.procedure
とエラーが出る。
(hash-table-keys (module-table mod))
のリストに ~$ が含まれることが問題っぽいのだが、対処法が分からない。
どうしたら良いだろ?
0140デフォルトの名無しさん
2010/10/11(月) 09:38:56たぶんこれと関係がある。
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche:Bugs#H-2vmko8525la0k
svn trunk では改善されてるはず。
0141デフォルトの名無しさん
2010/10/11(月) 12:49:13無事動きました、超サンクス。
「~$」って検索できない文字だから困ってたんだよね。
0142デフォルトの名無しさん
2010/10/11(月) 12:51:21まこっから先は自分で何とかします。ども。
0143デフォルトの名無しさん
2010/10/11(月) 14:03:460144デフォルトの名無しさん
2010/10/11(月) 14:36:090145デフォルトの名無しさん
2010/10/11(月) 19:51:110146デフォルトの名無しさん
2010/10/11(月) 20:22:100147デフォルトの名無しさん
2010/10/11(月) 20:28:11condはもっと我慢するでゲソ
0148デフォルトの名無しさん
2010/10/12(火) 11:08:02メシを quote したら cond は饅頭しかなかった。 甘い unquote 皮の比率が絶妙。
0149デフォルトの名無しさん
2010/10/12(火) 11:15:130150デフォルトの名無しさん
2010/10/12(火) 12:07:20S式の閉じ括弧の枚数を数えるプログラム教えてください。
仕様は
・閉じ括弧が現れたらその後ろに))))) ; 枚数
のようにコメントを入れる。
・既存のコメントやインデントは残す。
・開き括弧と対応してなくても動く。
です。
0151デフォルトの名無しさん
2010/10/12(火) 12:11:540152デフォルトの名無しさん
2010/10/12(火) 13:04:380153デフォルトの名無しさん
2010/10/12(火) 13:34:420154デフォルトの名無しさん
2010/10/12(火) 13:58:17判りました。
0155デフォルトの名無しさん
2010/10/12(火) 14:15:310156デフォルトの名無しさん
2010/10/12(火) 15:48:04例の声優グループがそんなこと言ってたりしたら・・・
0157デフォルトの名無しさん
2010/10/12(火) 16:19:54こういうのはどうなんの? どこにコメント入れるの?
(define (hoge huga) hage)
括弧が対応してなければ、S式とは言えない。 冒頭の「S式の閉じ括弧」に矛盾する。
「動く」というのはどう動けばいいの? エラーとして報告する動作でもいいの?
使うプログラミング言語は何がいいの? このスレだから Lisp 系を想定してはいるんだろうけど。
0158デフォルトの名無しさん
2010/10/12(火) 17:03:130159デフォルトの名無しさん
2010/10/12(火) 17:06:04(define (hoge huga) hage) ; 2枚 ぴったりです
define (hoge huga) hage) ; 2枚 1枚多いです
(define ((hoge huga) hage) ; 2枚 1枚少ないです
でいいよ?
0160デフォルトの名無しさん
2010/10/12(火) 17:09:530161デフォルトの名無しさん
2010/10/12(火) 17:47:200162デフォルトの名無しさん
2010/10/12(火) 18:19:56プログラムも書けないよな
0163デフォルトの名無しさん
2010/10/12(火) 18:20:330164デフォルトの名無しさん
2010/10/12(火) 18:29:110165デフォルトの名無しさん
2010/10/12(火) 18:32:14くらだん駄洒落しか書かねーんだもん
ネタ提供してやってんだから
御託並べずにさっさと書けっての
0166デフォルトの名無しさん
2010/10/12(火) 18:34:500167デフォルトの名無しさん
2010/10/12(火) 18:37:110168デフォルトの名無しさん
2010/10/12(火) 18:41:51まてまて、ネタの質にまで言及するならお前が提供しろよ
お門違いなんだよ
もう答えなんかとっくに出来てんだよこっちは
数分でできるだろこんなの
お前らどんだけできるの?って所を俺に見せつけてやろうよ
前向きに考えろよクズどもが
0169デフォルトの名無しさん
2010/10/12(火) 21:05:10仕様は無視。対象は勝手にリストに限定
閉じ括弧数は、その位置での、あるリストの中で、自分より手前の要素がリストである個数
(define (p . a) (map display a) "")
(define (cp x n m)
(if (not (pair? x)) (p x)
(begin
(p "(")
(fold (lambda (y acc)
(if (not (pair? y)) (begin (p y) acc)
(begin (cp y (+ n 1) acc) (+ acc 1)))) m x)
(p ");()=" (+ m 1) ",+" n "\n"))))
(cp '(a (b (c (d) (e) (f))) (g) (h) (i)) 0 0)
0170デフォルトの名無しさん
2010/10/12(火) 21:29:23じゃあこれは?
(define (hoge
huga) hage)
こうなるのか?
(define (hoge ; 0枚 2枚少ないです
huga) hage) ; 2枚 2枚多いです
0171デフォルトの名無しさん
2010/10/12(火) 21:41:16ちがうよー
こんなとこで目的を履き違える無能を晒してどうするの
>>170
ちがうよー
・閉じ括弧が現れたらその後ろに))))) ; 枚数
のようにコメントを入れる。
の文章読めないの?
アホなの?
0172デフォルトの名無しさん
2010/10/12(火) 21:48:400173デフォルトの名無しさん
2010/10/12(火) 21:50:24(define (hoge
huga) hage) ; 2枚 ぴったりです
(define (hoge
huga) ; 1枚 1枚少ないです
hage) ; 2枚 ぴったりです
0174デフォルトの名無しさん
2010/10/12(火) 21:53:050175デフォルトの名無しさん
2010/10/12(火) 21:53:27「プログラミング Gauche」 を参考にして、meadow をインストールしたのですが、M-C-f, M-C-b 等での S 式単位のカーソルの移動ができません。
(scheme-other-window は実行できます。)
これは、そういうものでしょうか?それとも手を加えれば S 式単位のカーソルの移動もできるようになるのでしょうか?
0176デフォルトの名無しさん
2010/10/12(火) 21:55:06codepadとか知らんのか?
情弱とか言わせんなよもー
0177デフォルトの名無しさん
2010/10/12(火) 22:05:47閉じ括弧が無い場合はわかった。
じゃあ↓このケースはこれでいいか?
(define (hoge huga) ; 1枚 1枚少ないです
hage) ; 2枚 ぴったりです
0179デフォルトの名無しさん
2010/10/12(火) 22:08:15R5RS 範囲内ならいいか?
0180デフォルトの名無しさん
2010/10/12(火) 22:16:00これでいいの?
(define (hoge huga) ;; 1枚 1枚少ないです
hage) (define (hoge huga) ;; 2枚 1枚少ないです
hage) ;; 2枚 ぴったりです
0181デフォルトの名無しさん
2010/10/12(火) 22:17:44俺はコードがあるスレのほうがらしくて好きだから書いただけで
お前のためにやった訳じゃない
お前が書いたコードを張るならも一つ書く
そうすれば仕様も曖昧じゃないし、みんなコードを書いてくれるさ
さもなければお前はcons
0182デフォルトの名無しさん
2010/10/12(火) 22:25:04LISP系ならなんでもいいよ
>>180
そんな書き方する馬鹿は知らんけど
その理解で合ってるよ>>177-178も
>>181
もういいよお前は
0183デフォルトの名無しさん
2010/10/12(火) 22:25:48meadowは使ってないけど
M-C-f forward-sexp
M-C-b backward-sexp
にあたる機能があるならキーバインド設定で使えるんじゃないかな?
M-x(Alt+xね)のあとにforwardとか自分で打ってタブで補完してみたら、あれば出る
関数があるなら.emacs相当のファイルを設定すればいけると思う
外してたらごめん
0184デフォルトの名無しさん
2010/10/12(火) 22:30:24(display " 〜|")
(display "〜")
(newline)
(display " ((")
(display " ))"))
0185デフォルトの名無しさん
2010/10/12(火) 23:01:08なんかどっかの自称天才デベロッパーがlispのreadの作り方を知ろうとしてるように見えるな
0186デフォルトの名無しさん
2010/10/12(火) 23:09:04>>180 がテストケースとして OK なら、仕様をまとめると
「最後に遭遇した一番外側の開き括弧からの閉括弧の数と、
それを除いた現在行の閉じ括弧の数を足したものを行の最後にコメントとして付け加える。
但し、閉じ括弧が存在しない行については例外とする。」
ってことでいいかな。
0187デフォルトの名無しさん
2010/10/12(火) 23:12:24最後に遭遇した最も外側の開き括弧から (それ自体を含む) 開き括弧の数に対して閉じ括弧がいくつ不足するか?
ってのも必要だったな
0188デフォルトの名無しさん
2010/10/12(火) 23:20:170189デフォルトの名無しさん
2010/10/12(火) 23:40:24俺への問いかけですか?なんか怖いなー
エスケープ処理とかはセルフサービスでお願いしますよ
>>185
readってあんま関係ないだろこれ
何いってんの?
>>186-187
1行にまとめるなら、
開きと閉じ括弧両方カウントして、閉じがある行で枚数コメ挿入ね
0190デフォルトの名無しさん
2010/10/13(水) 00:57:30> 1行にまとめるなら、
> 開きと閉じ括弧両方カウントして、閉じがある行で枚数コメ挿入ね
それじゃ説明になってないだろうが…。
「カウント」とは何をカウントするのかってことで >>180 のケースを説明しようとしてるのに。
0191デフォルトの名無しさん
2010/10/13(水) 01:07:09ネタ提供とか嘯くなら、思春期の子みたいに無駄に煽るの止めようよ。
ゲハとかじゃないんだから、そんな殺伐とさせてどうすんのよ。
確かにああいう駄洒落しか書き込まないのは、俺もどうかと思うけど。
QuicklispとかiSchemeとか旬の話題色々あるのにさ。
0192デフォルトの名無しさん
2010/10/13(水) 01:24:24haskellは諦めたのか?
0193デフォルトの名無しさん
2010/10/13(水) 02:22:480194デフォルトの名無しさん
2010/10/13(水) 02:24:52相手をする奴は最後まで面倒を見ろよな
レスアンカーつけて
0195デフォルトの名無しさん
2010/10/13(水) 12:35:28> <peculiar identifier> ==> + | - | ...
の ... って、文字通りドット3つの並びと解釈するんですかね?
0196デフォルトの名無しさん
2010/10/13(水) 12:45:32ドット3つの並びです
0197デフォルトの名無しさん
2010/10/13(水) 14:07:30マクロのパターンの書き方のところはこんな風になってる。
(<パターン> ...)
(<パターン> <パターン> ... . <パターン>)
(<パターン> ... <パターン> <省略符号>)
#(<パターン> ...)
#(<パターン> ... <パターン> <省略符号>)
ここでの ... は文字通りの ... ではなくて繰り返しの意味で、
<省略符号> の方が字句としては ... だったりする。
0198デフォルトの名無しさん
2010/10/13(水) 14:51:470199デフォルトの名無しさん
2010/10/13(水) 14:58:480200デフォルトの名無しさん
2010/10/13(水) 15:06:42繰り返し? ということは、
<peculiar identifier> は [+-]+ ?
0201デフォルトの名無しさん
2010/10/13(水) 15:19:24いやいや。 <peculiar identifier> は >>195 の解釈でいいんだよ。
0202デフォルトの名無しさん
2010/10/13(水) 15:22:04Gauche用。
(define (result le la sb se) (if (zero? (+ la se)) (newline) (begin (format
#t ";; ~d枚 " (+ la se)) (cond ((- sb se) (^x (not (zero? x))) => (pa$
format #t "~d枚足りません\n")) (else (format #t "ぴったりです\n"))))))
(define (main args) (when (< 1 (length args)) (with-input-from-file (cadr args)
(lambda() (let ((le 0) (la 0) (sb 0) (se 0)) (do ((ch (read-char) (read-char)))
((eof-object? ch) (result le la sb se)) (cond ((char=? #\( ch) (if (= sb se)
(begin (set! sb 1) (set! se 0) (set! la (+ la le))) (inc! sb)) (write-char ch))
((char=? #\) ch) (inc! se) (inc! le) (write-char ch)) ((char=? #\newline ch)
(result le la sb se) (set! le 0) (set! la 0)) (else (write-char ch)))))))))
文字や文字列のリテラルとかコメント中に括弧が有った場合も括弧として
認識してしまうんだけど、とりあえずもうめんどくさくなったからここまでで投下するわー。
0203デフォルトの名無しさん
2010/10/13(水) 18:56:05では、正しいのはどれ?
(1)「aが1234を束縛している」
(2)「1234がaに束縛されている」
(3)「1234がaを束縛している」
(4)「aが1234に束縛されている」
(1)(2)が正しいように思い込んでる。
0204デフォルトの名無しさん
2010/10/13(水) 19:02:35いいよいいよー
1個まともなのが出てきたので俺のを貼り付けるとくわ
(define (parentheses-counter)
(define STATE_NONE 0)
(define STATE_COMMENT 1)
(define STATE_SHARP 2)
(define STATE_SHARP_ESC 3)
(define STATE_DQUOTE 4)
(define STATE_DQUOTE_ESC 5)
(define (sharp? ch) (char=? ch #\#))
(define (dquote? ch) (char=? ch #\"))
(define (escape? ch) (char=? ch #\\))
(define (comment? ch) (char=? ch #\;))
(define (newline? ch)(char=? ch #\newline))
(define (open-p? ch) (char=? ch #\())
(define (close-p? ch) (char=? ch #\)))
(define (display* . seq) (for-each display seq))
(define (report cn on last?)
(display* " ; " cn "枚")
(cond
((> cn on) (display* " " (- cn on) "枚多いです"))
((< cn on) (display* " " (- on cn) "枚少ないです"))
(else (display* " ぴったりです")))
(if last? (begin(display " おわり")(newline))))
(define (loop on cn closed? state)
(let ((ch (read-char)))
(cond
((eof-object? ch)
(report cn on #t))
0205デフォルトの名無しさん
2010/10/13(水) 19:03:39(write-char ch) (loop on cn closed? STATE_DQUOTE))
((= state STATE_DQUOTE)
(write-char ch)
(if (escape? ch)
(loop on cn closed? STATE_DQUOTE_ESC)
(loop on cn closed? (if (dquote? ch) STATE_NONE state))))
((= state STATE_SHARP_ESC)
(write-char ch) (loop on cn closed? STATE_NONE))
((= state STATE_SHARP)
(write-char ch)
(loop on cn closed? (if (escape? ch) STATE_SHARP_ESC STATE_NONE)))
((= state STATE_COMMENT)
(write-char ch)
(loop on cn closed? (if (newline? ch) STATE_NONE state)))
((or (newline? ch) (comment? ch))
(if closed? (report cn on #f))
(write-char ch) (loop on cn #f (if (comment? ch) STATE_COMMENT state)))
((open-p? ch)
(write-char ch) (loop (+ on 1) cn closed? state))
((close-p? ch)
(write-char ch) (loop on (+ cn 1) #t state))
((dquote? ch)
(write-char ch) (loop on cn closed? STATE_DQUOTE))
((sharp? ch)
(write-char ch) (loop on cn closed? STATE_SHARP))
(else
(write-char ch) (loop on cn closed? state)))))
(loop 0 0 #f STATE_NONE))
0206デフォルトの名無しさん
2010/10/13(水) 19:04:33'((((((((((((((((((((((((((((((((((((
おまえは今まで使った括弧の枚数を覚えているのか?)))))))))))))))))))))))))))))))))))) ; 157枚 ぴったりです
とかで遊ぶだけですおwwww
0207デフォルトの名無しさん
2010/10/13(水) 20:05:19束縛が作られてもオブジェクト (値) の側は他の束縛を作ることもできるのに対し、
変数にとってはその束縛が唯一無二のものだってことを意識すると
「オブジェクトが変数を束縛している」ってことに納得できる。
R5RS だと 3.1 あたりに記述があるね。
「誤用しがちだけど、別に大して混乱もしないよ」ってことも書いてあるからぶっちゃけ気にしないで問題ないと思う。
0208デフォルトの名無しさん
2010/10/13(水) 20:16:16地味に便利だな。
0209デフォルトの名無しさん
2010/10/13(水) 20:20:19つまり、>>203の(1)(2)(3)(4)全部おkってこと?
0210デフォルトの名無しさん
2010/10/13(水) 20:43:17正しくは (3) (4) だけど、(1) (2) の言い方をしても誤解する余地はあんまり無いよって話。
0211デフォルトの名無しさん
2010/10/13(水) 20:53:220212デフォルトの名無しさん
2010/10/13(水) 21:05:06束縛を能動的と捉えた場合(1)(2) ; 4枚 ぴったりです
0213デフォルトの名無しさん
2010/10/13(水) 21:28:340214デフォルトの名無しさん
2010/10/13(水) 23:08:23こんな感じか?
([+-]|\.\.\.)
正規表現ってモノによって表現が若干違うからエスケープとかは適宜やってね。
だけど、前後の文脈も含めると正規表現だけでは表わせないはず…。
0215デフォルトの名無しさん
2010/10/13(水) 23:19:50set!でも束縛が変わらない
0216デフォルトの名無しさん
2010/10/13(水) 23:23:09了解しました、サンクスです。
0217デフォルトの名無しさん
2010/10/14(木) 01:21:11(define (hoge huga) ; 1枚 1枚少ないです
hage) (define (hoge huga) ; 3枚 1枚少ないです
hage) ; 4枚 ぴったりです
>>180と違う。
しかしまあ読みやすいコードだった。
0218デフォルトの名無しさん
2010/10/14(木) 01:38:300219デフォルトの名無しさん
2010/10/14(木) 13:27:13いまいち仕組みがわかりません。
(((lambda (y)
(lambda (x)
(begin
(set! y (+ x y))
y)))
10)
1)
((lambda (y)・・・) 10)の部分では、
最終的に (begin・・・) が計算されて10が戻る。
その後外側の式に流れ落ち (10 1) となるのでは考えております。
よろしければご指導お願いいたします。
0220デフォルトの名無しさん
2010/10/14(木) 14:21:00((lambda (y)・・・) 10) の部分が返すのは
xを引数とする
(begin
(set! y (+ x y))
y)
と言う手続きと、変数yが10に束縛されている、という定義時の環境に関する情報。
xに対して何か数値を束縛してこの手続きを呼ぶと、begin文内でy は改めて x + y = x + 10の値に束縛され、その新しい値が返る。
0221デフォルトの名無しさん
2010/10/14(木) 15:19:15レスありがとうございます。
ご指導を頂き、再度考えをまとめてみました。
(lambda (y)・・・)は (lambda (x) (begin (set! y (+ x y)) y))を返す。
y は(lambda (x)・・・)の外側の (lambda (y)・・・) にて束縛される。
((lambda (y)・・・) 10)は (lambda (x)・・・) の引数 x を10として呼ばれ、
(begin (set! y (+ x y)) y)を実行し y を式の結果として返す。
しかし実行結果としてはここで値ではなく手続きが帰らないと、
結果として 11 を出力できないこととなります。
よろしければ今一度ご指導お願いいたします。
0222デフォルトの名無しさん
2010/10/14(木) 15:21:54手続きオブジェクトが帰ってくるんだよ。
0223デフォルトの名無しさん
2010/10/14(木) 15:30:27> (begin (set! y (+ x y)) y)を実行し y を式の結果として返す。
((lambda (y)・・・) 10) は y=10 に束縛した (lambda (x)・・・) を返す
その返ってきた (lambda (x)・・・) に 1 を渡して呼ぶので、 x=1, y=10 で (begin・・・) を実行し 11 を返す
0224デフォルトの名無しさん
2010/10/14(木) 15:47:36レスありがとうございます。
((lambda (x) expression) y)
このような式は手続きの引数xをyとして式を実行し、
手続きを返すと考えるのでしょうか?
0225デフォルトの名無しさん
2010/10/14(木) 16:06:22まず、どっから拾ってきたかのかは別に問いませんが、
そのコードはマクロ展開に現れる典型的な出力パターンなんですよ
これを素で書いてるとしたら、そいつは間違いなく頭がイカれてます
そういう事情を知ってないと、いくら眺めても何を意図するのか
まるで読み取れない、馬鹿げたコード、つまり時間の無駄なんですよ
なんで誰も突っ込まないかなあ・・・
それを踏まえた上で、あえてご指導させて頂くと、
とりあえずそのbeginとset!は何の意味もないので、
除去してから考えてみてはどうですかね
(begin (set! y (+ x y)) y) → (+ x y) ; 4枚 ぴったりです
0226デフォルトの名無しさん
2010/10/14(木) 16:15:01((lambda (y) expression) 10) は expression を返す
((lambda (y) (lambda (x)・・・)) 10) は (lambda (x)・・・) を返す
0227デフォルトの名無しさん
2010/10/14(木) 16:20:05(f y)のfが(lambda (x) expression)におきかわっただけだろ。
0228デフォルトの名無しさん
2010/10/14(木) 16:57:54もう一度考え直してみました。
(lambda (y)・・・)は、式(lambda (x)・・・)を返す式で、
(lambda (x)・・・)の式は(begin・・・)となっている。
((lambda (y)・・・) 10)は、(lambda (x)・・・)の引数を
10として計算し、(lambda (x)・・・)を返す。
このときの(begin・・・)の返す値は何処へ行くのかは不明。
(どこへ行ってしまうのでしょうか・・・)
引数10で計算済みの(lambda (x)・・・)を引数1で計算する。
出力は11になる。
ここでのポイントは、(lambda (y)・・・)は、式(lambda (x)・・・)を返すのであって、
最初に引数を10で計算したさいの値は(begin・・・)の返す値ではない。
このように考えてよいでしょうか?
>>225
出展は下記URLの中ほどになります。
ttp://karetta.jp/book-node/gauche-hacks/009133
勉強途中でわからなくなってしまったので質問いたしました。
0229デフォルトの名無しさん
2010/10/14(木) 17:13:47あのね、きっとlambdaんとこはレキシカルスコープや
生存期間を理解してないと読み解けないですよ?
それと、普通はあんな書き方はしないんだから
誤解しないでよね
ぶっちゃけると、そのurlのはてめーのお勉強にはまだ早いんだよ
イカれてるけど基本を踏まえた上でのもっと先の話なので
0230デフォルトの名無しさん
2010/10/14(木) 17:20:20> このときの(begin・・・)の返す値は何処へ行くのかは不明。
> (どこへ行ってしまうのでしょうか・・・)
どこもなにも、 (lambda (x)・・・) はまだ呼ばれていないのだからそんな値は存在しない
呼ばれないまま (lambda (y)・・・) から返されただけ
(・・・ 1) が実行された時点で初めて呼ばれ (begin・・・) が実行される
0231デフォルトの名無しさん
2010/10/14(木) 17:43:50「その言葉が聞きたかった」ってなるまで放置するべきパターンだな
0232デフォルトの名無しさん
2010/10/14(木) 17:44:330233デフォルトの名無しさん
2010/10/14(木) 17:46:470234デフォルトの名無しさん
2010/10/14(木) 17:48:120235デフォルトの名無しさん
2010/10/14(木) 17:55:150236デフォルトの名無しさん
2010/10/14(木) 18:14:080237デフォルトの名無しさん
2010/10/14(木) 18:20:220238デフォルトの名無しさん
2010/10/14(木) 21:23:580239デフォルトの名無しさん
2010/10/14(木) 21:27:40YコンビネーターのYみて、エッチなことを想像した私も同罪
0240デフォルトの名無しさん
2010/10/14(木) 21:45:32青年よ、高階関数を考えすぎて後悔するなかれ。
青春時代を無駄にしてはいかん。女性を口説く術を身につけるのが先よ。
たかがLisp、されどLisp
0241デフォルトの名無しさん
2010/10/14(木) 22:16:250242デフォルトの名無しさん
2010/10/14(木) 22:47:44これぞ、再帰。
0243デフォルトの名無しさん
2010/10/14(木) 23:01:45とりあえず、お茶でも飲んで一息ついて、もう一度頭の中を整理してみたらどう?
lambda式を返すんじゃなくて、lambda式を評価した物を返すのよ。
んで、lambda式を評価すると、手続きオブジェクトとかクロージャと呼ばれるものが返ってくる。
これには、lambda式中の処理の内容と一緒に、lambda式が評価された時点での、
変数の値とかも一緒に保存されてる。
0244デフォルトの名無しさん
2010/10/14(木) 23:43:31了解。ありがとう。
0245デフォルトの名無しさん
2010/10/15(金) 04:08:240246デフォルトの名無しさん
2010/10/15(金) 10:03:53前にbiglooのソース見たら、明らかにマクロエクスパンドした結果が並んでた
オープンソースと言いながらマクロは公開しませんよということなんだな
0247デフォルトの名無しさん
2010/10/15(金) 15:40:04自作の糞マクロよりよっぽど見やすいだろ、
というありがたい配慮、もしくは君ら(下等生物)は
展開形でもデバッグしてなさいという意思表示、
オプソ(他人)にはその程度の期待しかない、
金を出す奴しか相手にせず、
横の繋がりは常に懐疑的であり続ける
なんというSchemerの鏡・・・
俺らもこうありたいですな!
0248デフォルトの名無しさん
2010/10/15(金) 16:06:07そして惜しげもなく便利なマクロをちりばめてくれるGaucheのすばらしさ
0249デフォルトの名無しさん
2010/10/15(金) 19:28:40「Scheme手習い」¥2940
http://www.amazon.co.jp/dp/4274068269/
0250デフォルトの名無しさん
2010/10/15(金) 20:24:53Gauche で書かれている部分が含まれていて、それを処理するために Gauche を必要とするから。
Gauche がインストールされてない状態で svn trunk を拾ってきてもビルドできない。
リリース版ではそこんところを処理してからパッケージに含めている。
このようにプリプロセスやマクロ展開、コンパイルに自分自身を必要とする場合があり、
素の状態で配布してもビルド不可能だったりする。
展開した状態で配布してるのはブートストラップ問題を回避するためじゃないかな。
git master の方には元コードがあったりしない?
0251デフォルトの名無しさん
2010/10/15(金) 21:44:31お〜、良書復活。ゾウさんに会えてオヂサン、うれしいゾウ。
0252デフォルトの名無しさん
2010/10/15(金) 22:25:090253デフォルトの名無しさん
2010/10/15(金) 22:34:30Gaucheにatom?はないが、
(define (atom? x) (not (pair? x)))
これでいいのかな?
0254デフォルトの名無しさん
2010/10/15(金) 22:43:450255デフォルトの名無しさん
2010/10/15(金) 22:54:38その認識でいいと思うよ
コンテナ以外をatomにしたら文字列とかどっちなわけ?って話になる
0256デフォルトの名無しさん
2010/10/15(金) 23:16:13「Gauche に」っていうか「Scheme に」無いんだけどな。
アトムと言うからには分割不能なものってことになるわけだけど、最後は全部 1 と 0 じゃね? ブール値こそ真のアトム!!
と、まあ極論すればこうゆう主張もできるわけで、何を以って分割不能かってのはこれと決められるものでない。
(Scheme の意味論は必ずしも機械の内部構造と一致しないので、もちろんこれは説明用の極論です。)
ペアでないものをアトムと考えることが便利である場面ならば、そのように定義すればいい。
でも、もちろんそれはあくまで利便性で決めるべき話で、唯一無二の正解があるわけではない。
0257デフォルトの名無しさん
2010/10/15(金) 23:21:20今の物理では「分割できないもの」は素粒子と呼ばれるようになった。
もし素粒子が内部構造をもつことがわかれば今度はその構成要素が素粒子と呼ばれるようになる。
世の中変われば定義も変わる。
0258デフォルトの名無しさん
2010/10/15(金) 23:35:280259デフォルトの名無しさん
2010/10/15(金) 23:40:410260デフォルトの名無しさん
2010/10/16(土) 10:51:09考えうる限り最悪のシチュエーションだな。
そいつ心が広すぎるだろう常識的に考えて。
0261デフォルトの名無しさん
2010/10/16(土) 11:44:240262260
2010/10/16(土) 13:54:57マジでスマンこってす。
0263デフォルトの名無しさん
2010/10/16(土) 16:09:14俺も自然に米屋って呼んでた。
たぶん家業が米屋なんだろうなと漠然と思ってた。
で、こないだ同窓会で再会したんだよ。
そこで知った衝撃の事実。
そいつの姓が「米屋」だった…
0264260
2010/10/16(土) 20:35:07マジでスマンこってす。
0265デフォルトの名無しさん
2010/10/17(日) 20:45:20次の方どうZO!
0266デフォルトの名無しさん
2010/10/18(月) 12:10:530267デフォルトの名無しさん
2010/10/18(月) 13:17:46俺も自然にハレル屋って呼んでた。
たぶん家業がハレル屋なんだろうなと漠然と思ってた。
で、こないだ同窓会で再会したんだよ。
そこで知った衝撃の事実。
そいつの姓が「電池」だった…
0268デフォルトの名無しさん
2010/10/18(月) 13:46:300269デフォルトの名無しさん
2010/10/18(月) 17:48:300270デフォルトの名無しさん
2010/10/18(月) 22:02:18Paul Graham。
てーか、vi派ならEmacsでviper-mode使えば良いんだよ。viper-mode。
両者の長所が合わさって最強に見えるが、周囲からは変態だと思われる。
0271デフォルトの名無しさん
2010/10/18(月) 22:43:57両方を無意識に切り替えることができれば、できれば‥‥‥、できる人は変態かなあ、やっぱり。
0272デフォルトの名無しさん
2010/10/18(月) 23:21:06viper-mode って vi を完全に再現してたっけ?
0273デフォルトの名無しさん
2010/10/18(月) 23:35:49vimpulseとか使えばいいけど、SLIMEでLispするならそこまで凝らなくてもいいと思う。
0274デフォルトの名無しさん
2010/10/19(火) 03:14:14>9. lisp
だんだんと汚染されてきたなぁ
0275デフォルトの名無しさん
2010/10/19(火) 03:51:24悠久の時を超えてきたlisp様にすればほんの一瞬に過ぎないのさ
0276デフォルトの名無しさん
2010/10/19(火) 07:49:22使えば慣れる。どうせEmacsのキーバインド前提にしてる所だと、
Emacsのキーバインド使わざると得ないし。
>>272
もう完全に慣れきってるから、良く憶えてないけど、
元々使ってたnviから移行したときは、挙動に違和感があった記憶がある。
>>273
足りないとこだけEmacsの機能使っちゃえば、割と使い易いよ。
少なくともEmacsのかったるい基本編集コマンド使わないで済む。
そういう意味でも、viper-expert-levelは5で良い。
0277デフォルトの名無しさん
2010/10/19(火) 08:12:13大丈夫あっちは歳をとるがこっちは歳をとらん
0278デフォルトの名無しさん
2010/10/19(火) 08:28:08俺の書いたCommonLispやSchemeのプログラムはいつまで動くんだろ。
0279デフォルトの名無しさん
2010/10/19(火) 18:16:060280デフォルトの名無しさん
2010/10/19(火) 19:03:28略
Rasmus:学術的に純粋であることと実用的であることはあまり関係がありません。
略
確かに美しくないですが,正しく動くことが重要なのです。
それに,我々が解決しようとしている問題は美しい問題ではないですよね。
美しくない問題を美しくないツールで解決することに何の問題もありません。
美しいツールは美しい問題を解決するためには非常に効果的かも知れませんが,多くの場合は必要がありません。
略
0281デフォルトの名無しさん
2010/10/19(火) 20:51:520282デフォルトの名無しさん
2010/10/19(火) 20:58:41自分が心底ほれ込むことが大事なわけで‥‥‥やっぱり美人がいいかあ。orz
0283デフォルトの名無しさん
2010/10/19(火) 21:00:150284デフォルトの名無しさん
2010/10/19(火) 22:42:570285デフォルトの名無しさん
2010/10/20(水) 08:32:280286デフォルトの名無しさん
2010/10/20(水) 17:57:33lispが素晴らしいのは
>>246
みたいなことができること
客に全部のノウハウ出さなくて済む
0287デフォルトの名無しさん
2010/10/20(水) 18:53:31なんだ、マクロってその程度のもんか。
0288デフォルトの名無しさん
2010/10/20(水) 19:11:48都合の悪い部分だけを選んで展開しておくこともできる
展開した形で配布しても作り手側は特に困らない
他の言語でやろうとしたら一仕事の事が、
LISPはリスト処理を行う程度の能力
0289デフォルトの名無しさん
2010/10/20(水) 19:18:26その代わりに括弧の呪いに罹る
0290デフォルトの名無しさん
2010/10/20(水) 19:47:38マクロ展開って一意性があるんか?
素因数分解なら一意だから元に戻るだろうが、マクロ展開された結果から
元のマクロを復元するなんて無理だろ?
0291デフォルトの名無しさん
2010/10/20(水) 20:31:120292デフォルトの名無しさん
2010/10/20(水) 20:40:22コンパイルしたバイナリを公開するのと
意味的に等価だよな
0293デフォルトの名無しさん
2010/10/20(水) 21:15:46無理なのもあるけどさ
なんでLisperはそんなにマクロに拘るんだい?
0294デフォルトの名無しさん
2010/10/20(水) 21:52:04その質問は「いつマクロを使うべきか」と同じことなんで、この辺読んで下さい。
ttp://www.komaba.utmc.or.jp/~flatline/onlispjhtml/whenToUseMacros.html
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme:%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%8A%B9%E7%94%A8
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme:%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%8D%B1%E9%99%BA
0295デフォルトの名無しさん
2010/10/21(木) 14:33:39On LispのATN使えばできそう
Schemeで相当するのってどれだ?
0296デフォルトの名無しさん
2010/10/21(木) 18:48:00無理じゃないのか。
組成式C4H10からそれはブタンかメチルプロパンか答えろみたいなもんじゃないか?
それともLispはアセンブラみたいに逆アセンブルできんのか?
0297デフォルトの名無しさん
2010/10/21(木) 18:53:420298デフォルトの名無しさん
2010/10/22(金) 00:14:38無理だと思う。同じS式に展開するマクロがふたつ以上あれば、区別が付かない。
そもそも、そのS式が展開後のものか、最初からその形か、すら区別できない。
むしろ、基本的には区別できてはいけない。それがマクロの本質じゃないの?
0299デフォルトの名無しさん
2010/10/22(金) 01:22:02ソースリストから元のマクロを正確に推定するのは無理でしょう。
でも元々の目的は>>246の状況で読みやすいソースを入手する事ですよね。
公開ソースから人間が推定したマクロと公開ソースを読み込ませて
推定したマクロで置換できる所をすべてマクロに置換したソースを出力する、
という処理なら可能ではないでしょうか。
0300デフォルトの名無しさん
2010/10/22(金) 07:35:35それはもう、人間の手で変換してる時点で、かつ推測の時点で、「元に戻す」ことができてないよね?
そもそも、>>288は>>246から離れて、より一般的な話をしているという理解だったんだけど。
マクロ展開後のコードを単に読み易くしたい、というのなら、そういうアプローチで良いんじゃないかと。
0301デフォルトの名無しさん
2010/10/23(土) 14:11:14どんな感じ? 買った人。
0302デフォルトの名無しさん
2010/10/23(土) 14:22:500303デフォルトの名無しさん
2010/10/23(土) 14:33:590304デフォルトの名無しさん
2010/10/23(土) 15:22:30どこまで再帰が細かく書かれてるのか?
虫眼鏡で覗いたらば
0305デフォルトの名無しさん
2010/10/23(土) 15:48:53つか普通google readerのLisp関連くらいは読むだろ
日本語だけだとものすごく偏った所の発言しか拾いにくいし
0306デフォルトの名無しさん
2010/10/23(土) 18:18:09尼で注文したが、22日発売の他の本は発送されて、Scheme手習いは未発送。
とゆーか、これって復刊なんだよね?元々読んでたことがある人は、このスレにはいないのか?
The Little Schemerを読んでる人は多いみたいだけど。
0307デフォルトの名無しさん
2010/10/23(土) 18:28:29もってたよ〜ん マグロウヒルのもの
Littleももってるけど日本語の方が楽チン
訳した人は同じ人だね。SICPのマグロウヒル版を訳した人だよ。
0308デフォルトの名無しさん
2010/10/23(土) 18:48:32素直に原著を買い直すつもり。
0309デフォルトの名無しさん
2010/10/23(土) 19:26:50んなこたぁ、ね〜だろ。どこが昔なんだい?????
0310デフォルトの名無しさん
2010/10/23(土) 19:49:190311デフォルトの名無しさん
2010/10/23(土) 19:50:140312デフォルトの名無しさん
2010/10/23(土) 19:51:16Google Groups
0313デフォルトの名無しさん
2010/10/23(土) 19:54:01>>305
Google Groupsのc.l.lとかc.l.sなら読んでる。
たまに面白い話題が出るよね。
0314デフォルトの名無しさん
2010/10/23(土) 21:13:32>>303 で気づいたよ…。
「else?」とかのジョーク、どう訳されてるんだろうなぁ。
0315デフォルトの名無しさん
2010/10/23(土) 22:26:29(* "へぇ〜" 3)
0316デフォルトの名無しさん
2010/10/24(日) 00:43:52「leftmostが何をするか言うことができますか。」
「leftmostは可能な3つの場合すべてで質問をする必要がありますか。」
「なぜalignがゴールに向けて進展している保証ができないのでしょうか。」
読んでると、なぜあなたはカタコトですか?と聞き返したくなる。
0317デフォルトの名無しさん
2010/10/24(日) 01:10:39化学の学校思い出した。
0318デフォルトの名無しさん
2010/10/24(日) 01:42:320319デフォルトの名無しさん
2010/10/24(日) 03:47:510320デフォルトの名無しさん
2010/10/24(日) 04:24:44ちょっと意味が判らないですね。
0321デフォルトの名無しさん
2010/10/24(日) 07:07:29マグロウヒル版しかもってないんで確認できないけど
旧版のP90、leftmost関数にはそんな表現はでてこないけどなぁ。
やわらかい表現で初心者にLisp遊びの楽しさを伝える良書だったと思う。
新版がでると聞いて心配だったのはatom?が使われてたり、cond節の構文が
旧版ではelseにtが使われていたこと。当時入手可能だった処理系は
PCScheme(CRCが日本語化)とMacSchemeくらいでatom?は関数として組み込まれて
いた。現代のGaucheにはないから初心者には(define (atom? x) (not (pair? x)))
を加えておいてとか説明が要るんじゃないかと思ってた。Gaucheは組み込み
関数も書き換えることができるから、number?を書こうなどという部分も
そのまま試せるんでいいと思う。これからScheme/Lispを始めようという人には
良い本だと思うがね〜。
0322デフォルトの名無しさん
2010/10/24(日) 07:33:12() ってアトムなん?
0323デフォルトの名無しさん
2010/10/24(日) 07:35:200324デフォルトの名無しさん
2010/10/24(日) 19:08:52アトムってことになってるんだけど
リストでもあるんだよね。
なんでこうなるんだろうね?
0325デフォルトの名無しさん
2010/10/24(日) 19:29:07(null? '())=>#t
だから
0326デフォルトの名無しさん
2010/10/24(日) 19:46:54R6RS によって導入された操作的意味論の世界観ではある値がリストであるということは「list? が真を返すかどうか」によって定義される。
ある値がアトムであるかどうかは atom? を適用して真であるかどうかによって定義される。
(define (atom? x) (not (pair? x))) と言う定義の下では空リストはアトムとしか言いようがない。 その定義が妥当かどうかは別にして。
0327デフォルトの名無しさん
2010/10/24(日) 19:52:09ってなってるね。
0328デフォルトの名無しさん
2010/10/24(日) 20:00:00空リストは要素がないただの風呂敷なのだけど入れ物には違いないのでリストに分類
風呂敷は空の状態ならただの物だからアトムに分類
こんな感じかな。
関数でこういう風に定義したからって言ってしまえばそれまでだけど、
無意味な定義ってのは受け入れ難いんじゃない?
0329デフォルトの名無しさん
2010/10/24(日) 20:20:54むしろ、無理に理由を付ける方が混乱しないか?
数学みたいに、都合が良いから、矛盾がないから、
って感じに割り切って付き合う方が楽だと思う。
0330デフォルトの名無しさん
2010/10/24(日) 20:28:42その通りだね。複素数の加減算の定義はそうすると体系に矛盾をきたさないからね。
定義も慎重に選択しているはずなんで、Scheme手習いの著者も考えがあっての
ことだと思ったんだよ。
0331デフォルトの名無しさん
2010/10/24(日) 22:04:17そして構成要素をもたないからアトム。
むしろこれより自然な定義はないんじゃないか?
0332デフォルトの名無しさん
2010/10/24(日) 22:13:45リストは原子の集まりである分子のイメージでいると
なんにも入ってない分子が原子って何だ?と。
0333デフォルトの名無しさん
2010/10/24(日) 22:47:120334デフォルトの名無しさん
2010/10/25(月) 01:09:27Gauche-GTKはWindowsじゃ駄目みたいだし
0335デフォルトの名無しさん
2010/10/25(月) 02:35:54FFIで適当なツールキットを使えば? c-wrapperとかCygwinでも動くらしいし。
GTK+とかも多分動くんじゃない?
個人的にはRacketとかIronSchemeとか使ったほうが楽だと思うけど。
0336デフォルトの名無しさん
2010/10/25(月) 17:00:20case sensitiveなclisp環境でパッケージ跨って使えるアナフォリックマクロを作ろうと思って
こんなん書いてみた。
; begin amacros.cl
(export 'alambda)(export 'case-sensitive-package-p)
(defun case-sensitive-package-p (&optional (pkg *package*)) (and (package-case-sensitive-p pkg) (package-case-inverted-p pkg)))
(defmacro alambda (params &body body)
(let ((self-symbol (intern (if (case-sensitive-package-p) "self" "SELF"))))
`(labels ((,self-symbol ,params ,@body)) #',self-symbol )))
; end amacros.cl
> (in-package :cs-user)
#<package cs-common-lisp-user>
cs-user> (load "amacros.cl")
t
cs-user> (macroexpand '(alambda ()))
(labels ((self nil)) #'self) ;
t
cs-user> (in-package :user)
#<PACKAGE COMMON-LISP-USER>
> (import 'cs-user:alambda)
T
> (macroexpand '(alambda ()))
(LABELS ((|self| NIL)) #'|self|) ;
T
(:user でマクロ定義すると逆に、self が常に大文字シンボルに。)
とまあ、マクロ定義した環境のケースの扱いで intern されるシンボル名が
現在のパッケージを無視して大文字か小文字に固定されちゃう。
case-sensitive-package-p の動作は現在のパッケージのケースの扱いに依存するのに
どうして intern だけがこうなるのかよくわからない。
どなたか解説&解決方法教えてください。
0337デフォルトの名無しさん
2010/10/25(月) 17:28:23>case-sensitive-package-p の動作は現在のパッケージのケースの扱いに依存するのに
これは、たとえば
(defmacro alambda (params &body body)
(let ((symname (if (case-sensitive-package-p) "intern" "INTERN"))
(self-symbol (intern symname)))
...)
のように定義した場合、symname は *package* の値に応じて "self" だったり "SELF" だったりするのに対し
self-symbol はマクロを定義したときの *package* のケースの扱いに応じて |self| か |SELF| か
固定的に決まってしまう、という話です。
0338デフォルトの名無しさん
2010/10/25(月) 23:28:25CLISPのコード(src/package.d)を見たところ、cl:internとcs-cl:internの違いは、
引数のシンボル名をinvertするかどうかだけの違いのようです。
なので、case-insensitiveなパッケージではそういう動作になります。
readerとかprinterとか色々いじって、擬似的にcase-sensitiveに見せてるわけです。
ぶっちゃけ、cs-cl:symbol-nameを使えばいいのではないでしょうか。
こちらはinvertされたシンボル名を返します。
(defmacro alambda (params &body body)
(let ((self-symbol (intern (symbol-name 'self))))
`(labels ((,self-symbol ,params ,@body)) #',self-symbol)))
みたいにして。
なお、case-sensitive packageの存在意義が理解出来ないので、意欲に欠けます。
CLISPも常用してませんし、割と適当なこと言ってるかもしれませんが許してください。
0339デフォルトの名無しさん
2010/10/26(火) 16:36:16プログラムの動作としては symbol-name の利用でいけました。ありがとうございます。
が、>>337 のような書き方をした場合に、
(1) case sensitive なパッケージで defmacro した場合:
(1-a) case sensitive 環境でマクロ展開
symname := "self", self-symbol := self
(1-b) case insensitive 環境でマクロ展開
symname := "SELF", self-symbol := |self| (i.e. (intern "self"))
(2) case insensitive なパッケージで defmacro した場合:
(2-a) case sensitive 環境でマクロ展開
symname := "self", self-symbol := SELF (i.e. (intern "SELF"))
(2-b) case insensitive 環境でマクロ展開
symname := "SELF", self-symbol := SELF
となってしまうロジックがわかりません。
また、>>338 のように if でなく symbol-name で "self" と "SELF" を使い分けるのは
アリな理由もわかりません。
clisp の実装上の都合なのか、CLの規格によるものなのか, etc.
何か追加情報ありましたらよろしくお願いします。
0340デフォルトの名無しさん
2010/10/26(火) 23:52:17真面目に答えますと、case-sensitiveなパッケージは処理系独自拡張なのはご存知ですよね?
ただ、ANSI Common Lispは、case-sensitiveなシンボル自体は扱えるんですよ。|symbol|みたいに。
なので、CLISPでは、独自に擬似的なcase-sensitive環境を実現するために、>>338でも書きましたが、
case-sensitiveなシンボルを使うことで大文字小文字の区別を付け、readerやprinterなどに細工して、
それっぽく処理してる訳です。cs-cl:symbol-nameとか、cs-cl:internとかも、その一環です。
で、そういった動作になるのは、(1)ではCLISPの独自拡張のcs-cl:symbol-nameやcs-cl:internが、
(2)ではANSIのcl:symbol-nameやcl:internが使われるからです。:userと:cs-userの両パッケージ内で、
clパッケージとcs-clパッケージのsymbol-nameやinternを、それぞれ試してみてください。
また、この辺りはreaderとパッケージの動作を理解していないと、混乱するかもしれません。
この説明で納得できないなら、まずCommon Lispのreaderとパッケージの仕組みを把握してから、
CLISPのコードを実際に読んでみてください。難しいコードではないので、すぐに理解できると思います。
CCLユーザで、本来Schemerな私の説明より、ずっと解り易いのではないでしょうか。
0341デフォルトの名無しさん
2010/10/27(水) 07:02:38何かの変数に保存されているのでしょうか
0342デフォルトの名無しさん
2010/10/27(水) 07:30:39処理系独自の拡張がある場合もあるが、基本的にはされてない。
特に R6RS の考え方ではマクロは実行時には不要なものであるので、
デバッグ用途を除いて必要とするのであれば設計がよくない。
0343デフォルトの名無しさん
2010/10/27(水) 15:41:38自分がどこで論点をとり違えていたのか気付きました。
>>338 の段階で cl:intern と cs-cl:intern の違いを指摘されていたのに
intern 側の挙動の違いにちゃんと目を向けていなかったようです。
お騒がせしました。
ところで clisp の cs パッケージの実装がアホだなぁと実感するのは
たとえば #\space を評価すると #\sPACE になるところだったり。
0344デフォルトの名無しさん
2010/10/28(木) 13:10:47他の言語との連携で不便だね
"className"をinternしたらCLASSNAMEになるんだっけ?
0345デフォルトの名無しさん
2010/10/28(木) 13:37:32普通に使えるけど
[1]> (intern "className")
|className| ;
NIL
0346デフォルトの名無しさん
2010/10/28(木) 13:54:03Kawaとかもあるのに
なんでなんだろ
マクロ工夫すれば他の言語に移植するの簡単だからなのかな
0347デフォルトの名無しさん
2010/10/28(木) 19:00:42labels じゃダメだ! flet じゃなきゃダメなんだ!
ってのはどういう状況なんだろう? にわかに思い付かないや。
0348本田
2010/10/28(木) 23:06:21皆さまのご投票により、下記タイトルの復刊がついに決定いたしました!
待望の復刊です。ぜひご購入ください!
――――――――――――――――――――――――――――――――――
■『Scheme手習い』(最終得票数 57 票)
著者】Daniel P. Friedman and Matthias Felleisen 著
元吉文男・横山晶一共訳
【発行】オーム社
【予価】2,940円(税込み)※予価の為、価格が変更する場合がございます。
【発送時期】2010年11月中旬
Scheme入門書の定番を翻訳!
0349デフォルトの名無しさん
2010/10/28(木) 23:17:200350デフォルトの名無しさん
2010/10/29(金) 00:19:58abclとkawaをいじってみた感じ、jvm上でもscheme系のが軽量な分初期化が速いなーとおもった。
0351デフォルトの名無しさん
2010/10/29(金) 00:38:24すぐ上の>>340で、case-sensitiveなシンボルはANSI Common Lispで扱える、
って書いてるじゃん。それどこから得た知識?
>>347
fletじゃないといけない場合は思い付かないけど、便利なケースはCLtL2に書いてた。
「7.5. Establishing New Variable Bindings」より。
> Using flet one can locally redefine a global function name, and the new
> definition can refer to the global definition; the same construction using
> labels would not have that effect.
ただ、labelsとletとfuncallの組み合わせで代用できる気がする。
0352デフォルトの名無しさん
2010/10/29(金) 07:47:32起きてからもうちょっと調べてきた。>>351に追加で、
1.マクロ展開で想定外の再帰を防ぐ
ttp://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2005-01/0918.html
2.可読性の向上
ttp://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2005-01/0908.html
3.性能
ttp://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2005-01/0926.html
という要素があるみたい。3はletとlet*みたいなノリで、最適化に影響を及ぼしそう、
とか自分でも思ったけど、実際に計測はしてないし、引用先でもしてない。
2はfletとlabelsの使い分けで、コードの示す内容を読む助けになるよ説。
1は強いて言えば、fletじゃないといけない理由なのかも。でも普通gensym使うよね?
0353デフォルトの名無しさん
2010/10/29(金) 12:50:10tomcatで動かす場合、初期化が軽いのはあんまり意味がない
ずっと動かしぱなしだから
0354デフォルトの名無しさん
2010/10/29(金) 16:10:52わざわざ global definition と同じ名前を付ける必要があるのって
関数名自体が dynamic scope で扱われるときとかかな?
flet と labels で検索するとそれらしい記述が引っかかるし。
で、(call-next-method) もどきとして使うとか。
他人が作ったマクロとかが特定の名前の関数を使うことを前提としていて
それをフックして挙動いじりたい場合とかには有用なのかな。うーん。
マクロとの絡みで言えば
>1.マクロ展開で想定外の再帰を防ぐ
は確かにそうなのかもしれない。それが必然的に発生する状況ってのは俄におもいつかんけどさ。
>2.可読性の向上
labels で複数関数作ってぐちゃぐちゃと相互呼び出ししてる場合は
そういうものだって把握しておかないと読み難いかもしれない。
けど、そういう関数はそもそもちゃんと読まなきゃわからないんだよね。
でも、flet だから再帰とかないとわかっていることが可読性の向上させるサインになる、
というのはなんか納得できん。
>3.性能
>In addition to the other reasons given, FLET can be a bit
>more efficient in some implementations.
あくまで some implementations では、なんだよね。
flet で書いたコードと labels で再帰/相互呼び出ししないで書いたコードは
高性能なコンパイラ持ち処理系でバリバリに最適化すれば効率変わらなそう。
0355デフォルトの名無しさん
2010/11/04(木) 10:26:44そのままテキストとしてMySQLに保存させるのはあまり賢い方法でもない気がします
何か推奨された方法のようなものはないでしょうか
0356デフォルトの名無しさん
2010/11/04(木) 11:58:56単純に永続化したいだけなら、極端な話writeで問題ないと思うんだけど。
データをどう使うかっていうのが、こういう場合の選択の基準になるんじゃないの?
一般的な話なら、AllegroCacheみたいな、オブジェクトデータベースが賢いと思う。
既存のKVSとかRDBMSに乗っかりたいなら、マッピングするしかない。
あとは、扱うデータが少ないなら、Object Prevalenceとかもある。
0357デフォルトの名無しさん
2010/11/04(木) 20:59:25特定ディレクトリにテキストファイルとしてほぞんして、
そのパスをDBに突っ込むのではだめなんかい?
0358デフォルトの名無しさん
2010/11/06(土) 13:16:04(define (power l)
(if (pair? l)
(let ((l2 (power (cdr l))))
(append (map (cut cons (car l) <>) l2) l2))
(list l)
))
これって末尾再帰には出来ないのかな? ちょっと考えたけど分からなかった。
0359デフォルトの名無しさん
2010/11/06(土) 14:13:06んなもん楽勝だろ
でも今はISP規制されててやる気起きない
0360デフォルトの名無しさん
2010/11/06(土) 15:46:240361デフォルトの名無しさん
2010/11/06(土) 17:25:520362デフォルトの名無しさん
2010/11/07(日) 17:51:56(if (null? xs)
p
(pow1 (append
p
(map (lambda (ys) (cons (car xs) ys)) p))
(cdr xs))))
(define (pow xs)
(pow1 '(()) xs))
0363デフォルトの名無しさん
2010/11/10(水) 09:42:30ポールグラハムの言ってることの一部は日本人の感覚と合わない
当たり前と言えばそうなんだけど
0364デフォルトの名無しさん
2010/11/10(水) 09:53:46(time (pow (make-list 20)))
前者の方が速いんだな
0365デフォルトの名無しさん
2010/11/10(水) 10:05:12社会条件が違うってことだろ。
0366デフォルトの名無しさん
2010/11/10(水) 14:01:490367デフォルトの名無しさん
2010/11/10(水) 17:28:250368デフォルトの名無しさん
2010/11/10(水) 19:40:16DQ6の隠しボスの名前を思い出すといいよ。
ポールグレアム
ダークドレアム
な。似てるだろ。
0369デフォルトの名無しさん
2010/11/10(水) 20:58:240370デフォルトの名無しさん
2010/11/11(木) 00:55:520371デフォルトの名無しさん
2010/11/11(木) 07:59:34♪オールナーイトローング♪
0372デフォルトの名無しさん
2010/11/14(日) 09:46:250373デフォルトの名無しさん
2010/11/14(日) 17:16:010374デフォルトの名無しさん
2010/11/14(日) 18:10:35日本でChez使ってる人の数って二桁いかないと思うぞ。
素直に公式ドキュメント当たって、駄目ならコミュニティで聞いた方が早いと思う。
>>373
有名ではあると思う。原書含めて、ここでも何度も出てくる名前だし。
0375デフォルトの名無しさん
2010/11/14(日) 18:48:49ドキュメントはあくまで Chez Scheme のしかない。
Petite の方はコンパイラ以外は基本的に全部有るとは書いてあるけど、個別の説明は無い。
foreign-procedure を使おうとするとエラーメッセージでコンパイラが無い旨が示されるのでこの機能はコンパイラが必要なのだろうとは思うもののダメモトで聞いてみた次第。
Chez Scheme のユーザーはあんまりいないと思うが、 Petite Chez Scheme はかなり人気がある方じゃね?
作者が Scheme 界で特に活躍している人でもあるし。
0376デフォルトの名無しさん
2010/11/14(日) 22:16:07名前といい状況といい、何かLarcenyとPetit Larcenyの関係みたいだな。
あっちも、ろくにPetitのドキュメントないんだ。
Kent Dybvigは有名だし、海外だと良くベンチマークで並んでるけど、
今は国内だとGaucheが人気ありすぎるからなー。PLT使ってる人すら少数派だし。
逆に、海外だと全然Gaucheの名前が出てこないのが面白い。
というか、もし日常使いしてるなら、印象を教えて欲しい。Chezってどうなの?
0377デフォルトの名無しさん
2010/11/14(日) 22:49:400378デフォルトの名無しさん
2010/11/15(月) 00:08:19chez は r6rs 処理系としては最も規格をまともに実現していると思う。
特にマクロまわりは。 kent 氏の立場を考えれば当然だけど。
ただ、現実の用途としてスクリプト言語的な使い方をする場合にはテキスト処理がネックにはなってくる。
r6rs が要求する (そして chez が実装している) Unicode 対応だけでは現実に多く使われている CP932 や EUC をきちんと処理するのは面倒。
ドキュメントも英語なので、 (多くの日本人がそうであるように) 英語が苦手だとつらいかも。
その点、 Gauche は日本語を意識したものになってるし、ドキュメントも公式に日本語で用意しているってところは強いな。
ただ、 Gauche はマクロまわりのバグとかがあるので高度なマクロを書こうとすると悩むことになる。
ベンチマークを意識したことは無いな。
素人がスクリプト言語的な使い方をする分にはぶっちゃけた話、速度が10倍違ったところで大したこと無いから。
0379デフォルトの名無しさん
2010/11/15(月) 03:56:30なるほど。ありがとう。やっぱ文字コード周りは面倒だね。R6RSで枠組みが出来ただけマシだけど。
R6RSのマクロ周りっていったら、ラップされた構文オブジェクトの扱いの問題で、
IkarusでSRFI-99のリファレンス実装が動かないとかあったな。あの辺ナイーブで好きじゃない。
そういえば、Ikarusの作者のAbdulaziz Ghuloumって、Kent Dybvigの教え子なんだよね。
ベンチマークは単に、注目度の目安ってことで。Schemeだと速い処理系って割と使いにくいし。
0380デフォルトの名無しさん
2010/11/15(月) 18:50:16勢いで買っちゃったんだけど
0381デフォルトの名無しさん
2010/11/15(月) 21:33:43ただ、以前にも話題になったけど、 chez は implicit facinlg が採用されてるので、メタレベルの指定が間違ってても動いてしまう。
確か、この挙動は r6rs でも認められているとレスが付いたと思うんだが、具体的にどこに記述がある?
フェイズの概念の導入でダークコーナーが片付いたと思ったけど、そう単純な話でもないみたいね。
r7rs ではまた別の方針になったりするんだろうか? もしそうなったら影響は大きいぞ。
0382デフォルトの名無しさん
2010/11/16(火) 12:17:250383デフォルトの名無しさん
2010/11/16(火) 15:41:280384デフォルトの名無しさん
2010/11/16(火) 23:02:360385デフォルトの名無しさん
2010/11/17(水) 13:28:040386デフォルトの名無しさん
2010/11/19(金) 18:20:45Cで十分なのに無意味にlambdaとかいろいろ作ってる様にみえるんだろうか
0387デフォルトの名無しさん
2010/11/19(金) 20:01:28かなり後になってからでないとわからんもんだ
0388デフォルトの名無しさん
2010/11/19(金) 22:24:200389デフォルトの名無しさん
2010/11/19(金) 23:38:10ABIの魔窟とか、お前FFIで使い辛いんだよとか、規格が尖り過ぎとか、
規格の大きさで唯一Common Lispと戦える存在とか、Boostの立ち位置が凄いとか、
気付いたらオブジェクト指向からジェネリック指向になっていたでござるとか、
色々愉快な言語だよね。自分では使わないけど、傍から見てると面白い言語。
CLerとしては性能面でのライバルだし、Schemerとしては完全に別世界の存在。
無理矢理lambdaとかはむしろ感動した。あそこで新しい言語作らないのが逆に凄い。
0390デフォルトの名無しさん
2010/11/20(土) 09:13:20ランタイムの言語による支援を前提にすればいいのに。
0391デフォルトの名無しさん
2010/11/20(土) 10:49:42自由にシンタックスを作れない不自由な言語
覚えなきゃいけない記述っ方法が山ほどあって近寄りたくない言語
# だけど, たまにくるんだよな. C++ の仕事 orz
0392デフォルトの名無しさん
2010/11/20(土) 21:08:16ハァハァ
0393デフォルトの名無しさん
2010/11/23(火) 01:32:23楽しみだな
0394デフォルトの名無しさん
2010/11/23(火) 08:36:07ビルドは素直に出来なかったので、正式にサポートされるのはありがたいな。
0395デフォルトの名無しさん
2010/11/24(水) 10:06:59そろそろ固定されたのかな
0396デフォルトの名無しさん
2010/11/24(水) 12:14:16こんな感じでyaccを駆使するのは良くないの?
http://stackoverflow.com/questions/517113/lisp-grammar-in-yacc
全部schemeで書いた方が方針としてはいいのかな?
0397デフォルトの名無しさん
2010/11/24(水) 12:21:43できそうなものから作ってかないと。
ていうか、まずは入力はreadに任せちゃえば?
0398デフォルトの名無しさん
2010/11/24(水) 14:50:10日本ではgaucheがあるからschemeの人口多いみたいだけど
0399デフォルトの名無しさん
2010/11/24(水) 15:13:11単に俺がネットでよく見かけるかどうかという範囲での話だけど
0400デフォルトの名無しさん
2010/11/24(水) 20:48:040401デフォルトの名無しさん
2010/11/25(木) 00:12:270402デフォルトの名無しさん
2010/11/25(木) 20:35:28ISLISP とか DSSSL とか、実質的に死んでるのはカウントしない方針で。
0403デフォルトの名無しさん
2010/11/25(木) 20:45:15野次馬的にはCommon Lispは厚さが死ねるからやんないんじゃない? とか。
0404デフォルトの名無しさん
2010/11/25(木) 20:46:110405デフォルトの名無しさん
2010/11/25(木) 21:26:230406デフォルトの名無しさん
2010/11/25(木) 21:43:43DSSSLは、JIS X 4153:1998
だけど、ノーカウントで、っていう意味だと思う
0407デフォルトの名無しさん
2010/11/25(木) 22:04:50だけどなー。 JIS で規格化したらその文書の著作権は JIS が持ってることになるんだわ。
例えば ISLISP の規格書って何円するか知ってるか?
5,040円 だぞ!
SICP より高いんだぞ!
ペラい冊子にそんなに払えるか!
まっとうなコミュニティがあるんだから、あえて規格団体に頼る必要はないと思う。
0408デフォルトの名無しさん
2010/11/25(木) 22:09:59その昔, 企画協会から RS-485 の仕様(英文)を買ったら、
a4 4ページ程度のコピーが送られてきて \3000 以上とられた
覚えあるもんなぁ...
0409デフォルトの名無しさん
2010/11/25(木) 22:21:27公式サイトが公開されたばかりのISLispを勝手に殺さないでください。
http://islisp.org/index-jp.html
Common Lispが巨大すぎるからわざわざISLispを開発してISO規格とした、
という経緯から考えるとCommon LispのJIS規格化はないでしょう。
0410デフォルトの名無しさん
2010/11/25(木) 22:26:19理解していくにつれ「俺ならこう実装するよ畜生」となって更に実装の数が増えるという。
Scheme無しでは生きられぬ、生きることすらままならぬ、生きているかもわからない、
そんなゾンビができあがる。Lispはまことに罪深い。
0411デフォルトの名無しさん
2010/11/26(金) 02:50:08(string-join "," "a" "b" "c") ;"a,b,c"
gauche のstring-join
(string-join '("a" "b" "c") ",")
0412デフォルトの名無しさん
2010/11/26(金) 06:58:56おそらく、互換性を望む層からの働きかけなんだろうけど。
>>404
とっくにIEEEで標準化されています。
ttp://standards.ieee.org/findstds/standard/1178-1990.html
0413デフォルトの名無しさん
2010/11/26(金) 07:19:42今後も標準化団体に頼る方向には行かないと思う。当時のGabrielの訴えもスルーして、
Common Lispとは合流しなかったわけで。
ttp://www010.upp.so-net.ne.jp/okshirai/HOPL2-Uncut-j.txt
とはいえ、コミュニティの性格が当時とは変化してるのも事実だから(例えばR6RS)、
可能性が無いとは言えないけれど。
0414デフォルトの名無しさん
2010/11/26(金) 07:51:13実質的にISLispが相手にされていないのは否めないと思う。
Common LispやSchemeと違って、コミュニティで開発している処理系も、
実用されてる商用の処理系もないし、動きも外からは見え難い。
OKI ISLispもWindows版だけ公開されて、Linuxとかはその後音沙汰がないし。
もしもまだ誰かが動いているなら、もっとそれをオープンにしてくれないと、
Lisper自体が少数民族な今の御時世、ただ忘れられていくだけじゃないかな。
仮にISLispに興味を持った人がいたとしても、興味の持って行きどころがない。
最近地味にLispが再評価されてるんだし、折角のチャンスなのに勿体無い。
0415デフォルトの名無しさん
2010/11/26(金) 09:12:31いや、 ISLISP の実装や情報は普通にいくつもありますが。
http://christian.jullien.free.fr/
0416デフォルトの名無しさん
2010/11/26(金) 09:34:33ttp://islisp.org/jp/other-ISLisp-jp.html
実装いくつもは流石に誇張じゃありませんか?
情報も、Googleの検索でISLispが3,580件に対して、Common Lispが522,000件です。
密度の問題と仰るなら、ISLispのまとまった情報が辿れる場所をご教示下さい。
0417デフォルトの名無しさん
2010/11/26(金) 15:02:25Rubyの場合は「規格にないと役所とかで採用しづらい」ということで
JISでコアの部分だけを定義しようという流れ
言語自体はこれからも変化させる気満々
0418デフォルトの名無しさん
2010/11/26(金) 19:51:01slib:foo
をjavaのslibパッケージだと解釈する
0419デフォルトの名無しさん
2010/11/26(金) 19:59:05CommonLisp を基準にしたら ISLISP がそれより小規模なのは言われるまでもなく当然だ。
「実用されてる商用の処理系もないし、動きも外からは見え難い。」や「もっとそれをオープンにしてくれないと」へ反応したつもりだった。
小規模ながら確実に活動は存在し、成果もオープンにしているので >>414 が言うほど ISLISP が死んでいるわけではないと主張したい。
0420デフォルトの名無しさん
2010/11/27(土) 00:29:15教えて頂いたOpenLispが、予想以上にちゃんと頑張っているようなのは理解しました。
商用処理系については認識を改めます。CLより速いと言ってるのは野心的で興味深いです。
ただ、どうせなら、同じ環境におけるCLやSchemeのGabrielベンチマークの結果も欲しかった。
さておき、実際のISLisp自体の動きが外に見えていないのは事実ではないですか?
ISOのWGのnewsやmeetingsもまるで更新されていませんし、分かり易い場所に、
動きを追える情報源もないように思えます。活動してるらしいのは分かるのですが、
何処で、誰が、何時、など、その実態が部外者にはあまり伝わってきません。
私がオープンにして欲しいのは、成果へ至る過程です。こちらも必要十分だとお考えですか?
勘違いして欲しくないのですが、ISLispという規格自体を否定したいわけではありません。
単純に、興味があるのに、知るための手段が少なくてもどかしいだけです。
0421デフォルトの名無しさん
2010/11/27(土) 00:35:01ああ、なるほど。それは確かに。情報感謝。
ただ、コアの機能の定義だけでも、結構苦労しそうだなあ。
0422デフォルトの名無しさん
2010/11/27(土) 09:07:43手間をかけたくなきゃ金がいる。
0423デフォルトの名無しさん
2010/11/28(日) 09:56:530424デフォルトの名無しさん
2010/11/28(日) 10:20:370425デフォルトの名無しさん
2010/11/29(月) 05:11:30入出力がstringでなくてportになってる関数が結構あった
わざわざportにする理由って何?
ambあたりと組み合わせると便利な使い方でもあるの?
0426デフォルトの名無しさん
2010/11/29(月) 12:48:56Scheme入ってしばらくの間は、俺もそれ思った。
そのままファイルなどに入出力できるから、汎用性が高い。
ユーザー定義のポートでごにょごにょできる。あと、単純に速い。
0427デフォルトの名無しさん
2010/11/29(月) 13:03:20ttp://d.hatena.ne.jp/reinyannyan/20080116/p1
0428デフォルトの名無しさん
2010/12/01(水) 19:26:41http://www.suri.cs.okayama-u.ac.jp/servlets/APPLICATION.rkt
作ってみた
型推定をC++にまかせるためにC++0x のautoも使うようにした
これの改造なので使い方は同じ
http://people.csail.mit.edu/jaffer/Schlep/scm2c.html
0429デフォルトの名無しさん
2010/12/02(木) 00:19:510430デフォルトの名無しさん
2010/12/02(木) 01:20:060431デフォルトの名無しさん
2010/12/02(木) 03:59:03*** ERROR: cannot change constant value
0432デフォルトの名無しさん
2010/12/02(木) 04:22:16さすがに相互末尾再帰はC++コンパイラのTCO任せ?
高階関数使いまくるのは結構厳しいな。
0433デフォルトの名無しさん
2010/12/02(木) 09:24:010434デフォルトの名無しさん
2010/12/09(木) 15:18:15どうしても独自仕様にしたい理由でもあるんだろうか
0435デフォルトの名無しさん
2010/12/09(木) 20:27:450436デフォルトの名無しさん
2010/12/09(木) 20:42:38(define cont #f)
(do ((counter 0 (+ counter 1)))
((= counter 10) 'end)
(if (= counter 5)
(call-with-current-continuation (lambda (k) (set! cont k)))
#f)
(write counter) (newline))
(cont #t)
これを実行すると (do ...) の部分で 0 から 9 までの数字と end が表示され、
その後 (cont #t) の部分で 5 から 9 までの数字と end が表示されます。
継続は処理を再開すべき地点を覚えていても継続が作られたときの変数値までは
保存していなかったと思います。そうだとすれば counter が一度 10 になって
しまえば、継続を再開したときも counter は 10 からカウントされると思う
のですが。実際には counter は 5 からカウントされるようです。
do の内部で作られた継続は特別に do のローカルな変数値を保存するという
こどなのでしょうか?表示の便宜上行頭に全角スペースを使っています。
0437デフォルトの名無しさん
2010/12/09(木) 21:22:49doのマクロを展開すると再帰呼び出しっぽい形になって
counter=5の時点の環境を保存しているはず。
0438デフォルトの名無しさん
2010/12/09(木) 21:38:560439デフォルトの名無しさん
2010/12/09(木) 23:45:09関係あるよ。
変数が破壊的に変更されれば破壊されたままになる。
このへんが少し関係あるかも。
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme:generator%E3%81%A8do%E3%81%A8while
0440デフォルトの名無しさん
2010/12/09(木) 23:52:28おまいらdoなんて使ってないよな?
0441436
2010/12/10(金) 02:10:06ありがとうございます。
do や let で繰り返す場合には,1回の繰り返しが起こる度に (前回の束縛関係
を上書きするのではなく) 毎回全く新しい環境が作られて、1回の繰り返し処理
が完了したらその環境は (継続が生成して保存されない限り) 捨てられるという
理解で良いでしょうか?もしそうだとすると、このような挙動は再帰呼び出しに
よる繰り返しで一般的なものなのでしょうか。つまり再帰による繰り返しでは
一般に、異なる繰り返し回が共通して同じ局所変数を見ているものではなくて、
毎回別の局所変数を見ているのだ、と。
0442デフォルトの名無しさん
2010/12/10(金) 07:38:410443デフォルトの名無しさん
2010/12/10(金) 10:43:060444デフォルトの名無しさん
2010/12/10(金) 12:01:19本質的には同じ。
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo3/index.html
でも、メモリの確保と解放をを考えなくてよいというメリットはある。
だけど、 GC を用意しないといけないというデメリットと表裏一体でもある。
0445デフォルトの名無しさん
2010/12/10(金) 12:40:38http://letoverlambda.com/index.cl/guest/chap2.html
0446デフォルトの名無しさん
2010/12/10(金) 18:48:380447デフォルトの名無しさん
2010/12/10(金) 18:59:510448デフォルトの名無しさん
2010/12/10(金) 19:06:30昔、英語版を用意してないwebページの定型句だった "sorry, japanese only" を、
「哀れな日本人専用」とするみたいな。
0450デフォルトの名無しさん
2010/12/11(土) 02:45:21(if (null? (car lst))
(concat (cdr lst))
(append (car lst) (concat (cdr lst)))))
これどこが悪いのか分からない…(´・ω・`)助けて偉い人
0451デフォルトの名無しさん
2010/12/11(土) 03:01:590452デフォルトの名無しさん
2010/12/11(土) 03:05:22とりあえずappend使うなら
(append (list (car lst)) (concat (cdr lst)))
0453デフォルトの名無しさん
2010/12/11(土) 05:39:14エラーメッセージは
else: not allowed as an expression
(let ((x 4))
(cond ( (> x 0 )
(cond ((< x 10 ) 30)
(else 100))
(else 5))))
0454453
2010/12/11(土) 05:47:590455450
2010/12/11(土) 15:15:29(define (concat lst)
(if (null? lst)
empty
(if (null? (car lst))
(concat (cdr lst))
(if (number? (car lst))
(append (list (car lst))(cdr lst))
(append (car lst)(concat (cdr lst)))))))
なんとかできました 451さん 452さん
あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!
0456デフォルトの名無しさん
2010/12/11(土) 18:23:42たとえば、
> (defun sum (x) (labels ((rec (i sum) (if (> i 0) (rec (1- i) (+ sum i)) sum))) (rec x 0)))
SUM
> (disassemble 'sum)
Disassembly of function SUM
(CONST 0) = 0
(CONST 1) = #<COMPILED-FUNCTION SUM-REC>
1 required argument
0 optional arguments
No rest parameter
No keyword parameters
5 byte-code instructions:
0 (LOAD&PUSH 1)
1 (CONST&PUSH 0) ; 0
2 (CONST 1) ; #<COMPILED-FUNCTION SUM-REC>
3 (CALLC)
4 (SKIP&RET 2)
NIL
これ、肝心の #<COMPILED-FUNCTION SUM-REC> をdisassembleするには
どうすれば良いんでしょ?
0457デフォルトの名無しさん
2010/12/11(土) 23:47:211. labelsのスコープの中でdisassembleを仕込む。
2. 外側の関数を呼び出す。
0458デフォルトの名無しさん
2010/12/12(日) 10:22:53(rec x 0) の部分で (disassmble 'rec) あるい (disassemble 'sum-rec) しても
Undefined function 言われるだけだなぁ
0459デフォルトの名無しさん
2010/12/12(日) 11:21:40(disassemble #'rec)
0460デフォルトの名無しさん
2010/12/12(日) 13:30:55おおう、いつも function じゃなくて quote してたんで盲点でした
0461デフォルトの名無しさん
2010/12/12(日) 20:07:020462デフォルトの名無しさん
2010/12/12(日) 23:02:24に無いと思ったらSourceForgeの方にあった
ビルドしてみよー
0463デフォルトの名無しさん
2010/12/13(月) 12:23:11schemeの構文オブジェクトに相当するものはCommon Lispにはないの?
0464デフォルトの名無しさん
2010/12/13(月) 12:41:460465デフォルトの名無しさん
2010/12/13(月) 13:28:23構文オブジェクトってsyntax-caseのあれ? なら、Common Lispにはない。
Common Lispは単純に、パッケージとかgensymとかを使って変数の捕捉を避けてるから、
構文オブジェクトみたいなものは必要ない。hygienicなマクロを志向するScheme特有の概念。
↓で概念を分かりやすく解説してるので、読んでみて。
ttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme:%E3%83%9E%E3%82%AF%E3%83%AD:CommonLisp%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83
0466デフォルトの名無しさん
2010/12/13(月) 14:58:18式を評価する文脈 (環境) が違う。
0467デフォルトの名無しさん
2010/12/13(月) 23:19:26チャーチ数とかで遊んでる若輩趣味グラマなんですが、質問です。
Zコンビネータってネットで調べると、使う関数の引数に合わせてlambda増やして(arg1のとこ)ますが、
(define Z1 (lambda (f) ((lambda (g) (g g)) (lambda (h) (f (lambda (arg1) (((h h) arg1))))))))
再帰部分を遅延させるためだけなら、使う関数の引数を気にせず
引数無しlambdaを使うってことをしないのは何か理由があるんですか?
(define Z0 (lambda (f) ((lambda (g) (g g)) (lambda (h) (f (lambda () (h h)))))))
;これでも動くのは確認済み、引数無しlambdaを評価するのに与える関数内に1組カッコが増えますが。
0468デフォルトの名無しさん
2010/12/13(月) 23:42:06原則として1関数1引数の世界の話だからじゃないの
0469デフォルトの名無しさん
2010/12/14(火) 00:20:41と言うか、λに値を与えて呼び出すのではなく、値にλを適用するっていうイメージ。
(λ計算の世界では「値」もλなわけだが。)
Haskell とかだとカリー化があるからそのへんよくわかると思う。
例えば、
hoge a b = a + b
という定義は
hoge a = (\b -> a + b)
と同じなので、引数が2個以上みたいに書いても構文糖に過ぎず、
Haskell の世界では1引数の関数しかない。
まぁ、要するにλ計算のλと Lisp 系言語の Lambda は同じものではないってこと。
関数をオブジェクト (値) として扱うという思想の根源にはλ計算があるのは間違いないけど、同一視はできないよ。
0470デフォルトの名無しさん
2010/12/14(火) 03:12:28これまで計算機科学は齧ってすらいない素人の独学なので気付けませんでした。
lambdaとかコンビネータである程度遊んだから、真面目に聖書から勉強してみるかな。
0471デフォルトの名無しさん
2010/12/14(火) 11:07:370472デフォルトの名無しさん
2010/12/14(火) 22:37:02Go (Tiobe: 21 , Tier: 4)
R (Tiobe: 26, Tier:3)
Lua (Tiobe: 27, Tier:3)
Scheme (Tiobe: 29, Tier:3)
ActionScript (Tiobe: 37, Tier:2)
Erlang (Tiobe: 49, Tier:3)
Groovy (Tiobe: 50-100, Tier: 3)
Scala (Tiobe: 50-100, Tier:2)
Clojure (Tiobe: 100+, Tier:3)
1
http://regulargeek.com/2010/12/11/9-programming-languages-to-watch-in-2011/
0473デフォルトの名無しさん
2010/12/15(水) 10:59:58こんな感じのLisp批評はないものか
0474デフォルトの名無しさん
2010/12/15(水) 23:31:370475453
2010/12/18(土) 13:44:44せめてGaucheとRacketの間をマクロで変換できたらなあ
0476デフォルトの名無しさん
2010/12/18(土) 14:02:090477デフォルトの名無しさん
2010/12/20(月) 21:21:42そんなにRacketのレコードって独自色強かったっけ。
マクロで融通できないくらいに。
0478デフォルトの名無しさん
2010/12/22(水) 19:28:13時代は変わってんな。
0479デフォルトの名無しさん
2010/12/22(水) 20:17:030480デフォルトの名無しさん
2010/12/23(木) 09:02:530481デフォルトの名無しさん
2010/12/23(木) 09:24:11まず、LISP が Common Lisp にどこまで適合してるかが問題だ。
0482デフォルトの名無しさん
2010/12/23(木) 12:22:02テンプレに入れるべき
0483デフォルトの名無しさん
2011/01/02(日) 00:58:29なんか正月早々ものすごく必死です。
私は .emacs.el で大昔に設定をコピペでいじった程度でlispは全く読めません。
かつての古典BASIC/Logo/Pascalや、近年でのJava/Rubyを押しのけてlispというのはありえないと思うんですけど、
http://sigps.tt.tuat.ac.jp/index.php?%B6%B5%B0%E9%CD%D1%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%EC%A4%CB%B4%D8%A4%B9%A4%EB%A5%EF%A1%BC%A5%AF%A5%B7%A5%E7%A5%C3%A5%D72006
がソースだと主張して譲る気配がありません。
何か客観的に説得する材料とかアンケートとか、資料があったらご教示ください。
単純にググっても、あんまりいい資料が出て来なかったので(探し方が下手と言われそうですが)。
0484デフォルトの名無しさん
2011/01/02(日) 01:07:04あなたの存在自体が、「教育用言語としてlispは素晴らしい」という主張があり得ないことを
雄弁に物語っている。しっかり戦ってきてください。
私も絶対にあり得ないと確信する。
0485デフォルトの名無しさん
2011/01/02(日) 01:10:070486デフォルトの名無しさん
2011/01/02(日) 01:16:07そんな話を正月早々おおまじめにこのスレにふってどうする。
まぁ、面白半分でオレの意見を述べる。
LISPが教育用言語として不向きなところ:
- 見た目がとっつきにくい。
- フォンノイマン型計算機の基本的な構造は手続き的なので、「まずは手続き型」というのにも一理ある。
- 就職に有利ではない。Excelのマクロでも書けたほうがマシ。
LISPが教育用言語として向いているところ:
- マルチパラダイム。これだけで、いろいろなプログラミングパラダイムのさわりを導入できる。
- 大学での計算機科学の入門教育用言語としてはかなり実績がある。
実装の多様さは問題にならないだろう。
本当に教育用に向いているなら、教育用LISP国内統一仕様でも作ればよろしい
(Scheme R5RSとかをそのままで良いと思うが)。
LISPのマクロは他の言語と比べて独特だし、原理的には存在しなくかまわないものなので、とくに重視する必要はないと思う。
0487デフォルトの名無しさん
2011/01/02(日) 01:25:56万能の解はない。 教育用として素晴らしい点もあればそうでない点もある。
LISP にはおよそプログラミング言語というものにある全ての概念を表現できる可能性があるので、ひととおりの概念を教え込めるというメリットはある。
ただ、あまりにも何でもアリというのは教える立場からすると方向を決め難くてやりづらいというデメリットもある。
LISP は派生言語が多いというのは >>486 は問題にならないと述べているけれど、これはメリットにもデメリットにもなると思う。
emacs lisp と Common Lisp なんてダイナミックスコープとレキシカルスコープという根本から違うからな。
これは言語のあり方について示せる機会でもあるけど、混乱を生む元だとも言える。
事実としてかつては MIT での教育 (教養過程) に Lisp の方言であるところの Scheme が用いられていた。
(ただ、今では Python に切り替えれられているとのこと。)
国内でも多くの学校で実績がある。
教える側・教えられる側の素養によっても、あるいは時代背景によっても良い選択が何かというのは違ってくる。
仮に数値的に全体的な傾向があったとしても、アンケートなり何なりの取り方によっても変わる。
そんなのに客観的な要素を持ち出したって無駄だよ。
英語の方がユーザーが多いから日本語は英語より劣ってるとか言うようなもので馬鹿げてる。
個人的な見解だが、他の言語と同程度には教育用に適していると思う。
0488デフォルトの名無しさん
2011/01/02(日) 09:40:14Lispは、向いてるかどうかは別としても、教育関連では割と大御所だと思うよ。
以前のMIT以外にも、国内でもScheme使ってる(使ってた)所はある。普通に探せば出てくる。
で、本題の向いてるかどうかだけど。特にScheme辺りは、最小主義を推し進めた結果、
少ない要素で多くのことを表現できるのがメリットだと思う。学生も覚えることが少なく済むし、
講師も枝葉の概念をいちいち教えずに済む。これは教育の現場では大きなアドバンテージ。
例えば、この演算子の結合順序は〜、とかは、計算機科学の本質に全然関係ないじゃない?
そういうのを排除して、本質的なアリゴリズムやデータ構造により長い時間を割ける。
教育面でのLispのアドバンテージはそれだけじゃないかな。後は他と似たり寄ったりだと思う。
カリー化とか関数的なアプローチに関しては、Haskellの方が上手く扱えるし、オブジェクト指向は、
CLOSは主流とはスタイルがやや異なるし、全てがオブジェクトでもない。PerlやPythonのように、
ライブラリが豊富なわけでもない。
あとは、上でも触れられているけど、どこに重点を置いた教育をするかで変わってくるだろうね。
即戦力ならJavaやRubyだろうし、より理論を重視するならHaskellやCleanの方が面白いだろうし、
アーキテクチャを強く意識するならCだろうし。特徴を出そうとすると、Lispは選びにくい。
0489デフォルトの名無しさん
2011/01/02(日) 09:58:28Lispは古い言語だけど、最近の言語が取り入れている(取り入れようとしている)要素を、
いち早く(数十年前のレベルで)採用した近代的な言語でもあるのよ。例えばJavaだったら、
クロージャとかtail callの最適化とか。
その辺りを調べてみると、より公平な判断を下せると思う。
知らないものについてあれこれ論じても、建設的な結果は出ないんじゃないかな。
0490デフォルトの名無しさん
2011/01/02(日) 10:08:11あなたが例に挙げているのは易しい言語ばかりです。
大学の教育用言語としてあなたの挙げた言語のみを採用すると、
職業適性のなさに事前に気がつく事ができないかもしれません。
Javaスクールの危険
http://local.joelonsoftware.com/wiki/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
0491487
2011/01/02(日) 10:44:29「教育用」という立場からすれば言語が易しいことは必ずしもデメリットとは言えない。
教育したいのは言語そのものでなく、基礎的なアルゴリズムだったり、問題の定式化だったりするから、言語で手間を書けたくないからね。
ただ、ウィトゲンショタインは言葉の限界が世界の限界であると述べている。 言葉が考え方を縛ってしまうのだ。
(共産主義の国家で表現の規制が行なわれやすいのは、それが思考に方向性を与えるのに有効だからだ。)
例えば Java なら問題をオブジェクト指向で解決しようとする。
Java で教育された者はオブジェクト指向に考え方が制約付けられてしまうわけだ。
一方で、 Scheme 使いなら大抵一度は読む SICP には様々なパラダイムの構築の仕方から書かれている。
問題解決に適切なパラダイムが何かということから考えさせられる。
産業界では Java とかが幅をきかせているけど、 LISP の何でもアリっぷりはチームでの開発には向いていないことがわかっている。
言語自体がある程度の枠組みを持ってないと統制が取れないんだ。 無秩序になる。
それと、チームではたとえ個人の能力を制限してでも全員が一貫した方向性を持った方がうまくいくと言われている。
こういった産業界での事情を考えると、個人の能力を伸ばすのが適切な教育なのか、使える教育なのかということになる。
だから、どんな言語が適切なのかはまずどんな教育をするのかを定義しないと評価不能ってこと。
0492デフォルトの名無しさん
2011/01/02(日) 10:56:240493491
2011/01/02(日) 11:22:00「能力を伸ばす」というのと「一貫した規律にあてはめる」というもの。
前者ならばより自由な言語を選択した方がいい。
後者なら実際に産業界でよく多く使われているものを選んだ方がいい。
>>492 はプログラマとしての最低ラインにポインタや再帰を挙げているけれど、
極端な話をするならそのチームが一貫してポインタも再帰も使わないという規律の中でなら問題にならない。
現実にはそんな規律では仕事にならないんだけどね。
普通の LISP 使い、例えばこのスレにいる人々で「LISP しか使えない」という人はまずいないよ。
LISP がわかって Java がわからんとか BASIC がわからんとか言う奴はいない。
だから、まず個人の能力を充分に高めた上でプロジェクトごとに規約を決めるという運用がだいたいうまくいく方法じゃないかなぁ。
と言うことを考えると LISP って結構良い選択ってことに。
0494デフォルトの名無しさん
2011/01/02(日) 12:01:59その論旨だと、Lispでなくとも、マルチパラダイムの言語ならどれでも良い選択になる。
元の話は、教育言語としてのLisp、って話なんだから、論点がずれまくってるよ。
Lispがどう自由かという話をしないと、良い選択になる理由が読み取れない。
その辺の見解を元の質問者も知りたいだろうし、俺も聞いてみたい訳で。
0495デフォルトの名無しさん
2011/01/02(日) 12:39:08本題のアルゴリズムとか教えるには余計なことに時間を取られずに済むからいいことだよね
教えたいのは言語の枝葉末節じゃなくて「プログラミング」ならね
0496デフォルトの名無しさん
2011/01/02(日) 13:19:450497デフォルトの名無しさん
2011/01/02(日) 13:22:19C言語とかでmallocとfreeの対の関係を覚えさせないと。
なんでLISPでばかばか作りっぱなしで問題ないのか理解しない。
それと教育に使うならLISPじゃなくScheme限定だろう。
LISPは歴史的経緯で変な制約が残ってるし。
Schemeと対比させてLISPを学ぶのが目的ならいいけど、
そうじゃないし。
S式とquoteの問題がある。
これってLISP系独自の概念だから、
なんで括弧に括るの?とか、
引用符の片側ってなんで閉じないの?とか、
まあこれぐらいはそういうもんだ、でいいか。
記法についての問題もある。
前置記法ですよといってもわからないから、
HTMLやXMLのタグと同じですがなと説明するかな。
HTMLってナニと言われたら、 1 + 2 * 3を(+ 1 (* 2 3))と書きます、
これの利点は優先順位がなくなることです、って説明するかな。
LISPは言語のアセンブラです、他の言語はすべて
LISPの概念から作られてます、みたいなホラ吹いても多分騙される。
0498493
2011/01/02(日) 13:32:24俺は最初から他の言語と同程度に良いと述べている。
逆に言えば、LISP が他の選択肢より悪いということはない。
それだけのことだよ。
複雑なトレードオフの関係を知りたいなら >>483 には LISP をまず学んでもらうしかない。
0499デフォルトの名無しさん
2011/01/02(日) 13:34:44逆に情報系学部の一年生ならLisp(Scheme)から入るのはいいと思う。
0500デフォルトの名無しさん
2011/01/02(日) 13:38:30(car (cdr '(a (b) c))
引用符が閉じてませんよ、
さっき説明しただろ聞いてなかったのか。
carて車の免許取れってことですか、
取っといたほうがいいな。
CDRってウケル、今はDVDの時代ですよ、
ああ、そうだね?
つーか括弧も閉じてませんよ、
そう、その言葉が聞きたかった。
carとcdrはちゃんと説明した方がいいね。
(cadr '(a (b) c)))
はあ?cadrってどう発音するんすか、
カドル。じゃあ、cadddrは?カドドドル。
caaaarは?かああああ
0501デフォルトの名無しさん
2011/01/02(日) 13:46:37病院搬送されてPTAで問題になるのが一番怖いかな。
これが本当のモンスターペアレントです。
0502デフォルトの名無しさん
2011/01/02(日) 13:50:110503デフォルトの名無しさん
2011/01/02(日) 13:54:06運動会で順位を付けない時代だから
説明次第でPTAに支持されるな。
そういう配慮をした言語です。とっても安心です。
0504デフォルトの名無しさん
2011/01/02(日) 13:56:180505デフォルトの名無しさん
2011/01/02(日) 13:57:45(+ 1 2 3 4 5 6)とか書けて便利やねん
そのまま計算機に落とせるねん
0506デフォルトの名無しさん
2011/01/02(日) 13:59:160507デフォルトの名無しさん
2011/01/02(日) 14:06:54((lambda (a) a) 1)
じゃあいきなり聞こう、これの答えは何?
はいじゃあ、順番でアキちゃん答えてみて。
えーと・・a?
ぶぶーおしいけどちがいます、わかる人いるかな?
1ですせんせー
あれー?どうしてそう思った?正解です!
サクラが必要だな。
0508デフォルトの名無しさん
2011/01/02(日) 14:08:02> ウィトゲンショタイン
巣にお帰りください
0509デフォルトの名無しさん
2011/01/02(日) 14:12:59なんて答えればいい?
#<closure>?関数自身?
それとも式が不完全ですって言う?
そんな疑問を抱かないように誘導する?
0510デフォルトの名無しさん
2011/01/02(日) 14:20:19(lambda (a) a)がそのまま返る、
つまり式そのものが答えでいいんじゃないの?
義務教育でLISPってどうなんだろう
'a => aのように(lambda (a) a) => (lambda (a) a)
としてしまうと誤解するかな
'(lambda (a) a) => (lambda (a) a)
とは違うわけだし
0511デフォルトの名無しさん
2011/01/02(日) 14:21:28その式は単に引数をそのまま返す関数でしょ。
一応クロージャでもあるだろうけど、あまり適切な例でもないような・・・
0512デフォルトの名無しさん
2011/01/02(日) 14:29:30英語読めませんがな。
(無名関数 (x) x)
しかし、「無名」ってなんとなくNGのような気がするし、
名前を付けなくていいってのは利点でもあるけど、
知能育成の妨げになるような気がする。
義務教育期間はlambda禁止じゃないか。
0513デフォルトの名無しさん
2011/01/02(日) 14:36:470514デフォルトの名無しさん
2011/01/02(日) 14:52:01関数の授業
(define (f a) a)
上のようなfという名前の関数を定義しました、さて
(f akichan)
この答えは判るかな?
それじゃあアキちゃんリベンジ!答えてみて。
え・・a?
おしいけどちがいます。わかる人いるかな?
akichanですせんせー
ちがいまーすakichanは定義されていないので
答えはエラーです引っ掛け問題でしたー
アキちゃんいじめだー
0515デフォルトの名無しさん
2011/01/02(日) 15:03:52初めてプログラムを知るならLispでもいいかもしれんとは思うが(先入観無いから)
電算機概論と平行に進めないとよろしくないので情報専門の学科以外は止めた方がぶなんじゃねぇの?
0516デフォルトの名無しさん
2011/01/02(日) 15:27:430517デフォルトの名無しさん
2011/01/02(日) 15:38:02とくに学生に論文を量産するような学部なら、始めからLISPを教育すべき
0518デフォルトの名無しさん
2011/01/02(日) 15:45:15明らかに問題発言
しかも引っ掛け問題に欠陥児童の名前を使うとか論外
答えはアキちゃんでいい
0519デフォルトの名無しさん
2011/01/02(日) 15:47:41(define akichan 'アキちゃん)とでもしておくべきだろう
0520デフォルトの名無しさん
2011/01/02(日) 15:54:46恒等関数に変数akichanを適用したのなら値はakichanになる
f(x) = x に x0 を適用したら値はf(x0)だ
数学ならそれで終わりでしょう
なぜLispではシンボルakichanのまま計算できないの?とアキちゃんは
疑問に思うに違いないぞ
0521デフォルトの名無しさん
2011/01/02(日) 16:07:03Scheme と Common Lisp でもそのあたりの意味論は違うんじゃないの?
両方をよく知ってる人はちょっと解説してくれんか
0522デフォルトの名無しさん
2011/01/02(日) 16:10:28ごめん、Lisp用語の「シンボル」というつもりで深い意味で言ったのではないので…
俺が言ったのは、単にsymbolic algebraのsymbolだよ
数学ならakichanが何であるかは気にしないし、何でも良い
0523デフォルトの名無しさん
2011/01/02(日) 16:30:10初出のシンボルに束縛されるのはそのシンボルで
(define シンボル 値)として初めてシンボル => 値になるとか
そういう初等レベルLISP
未定義とかは中等レベル以上の概念
0524デフォルトの名無しさん
2011/01/02(日) 16:37:18LISP じゃないけど、 pure なんかのシンボル (変数) の扱いはそんな感じ。
0525デフォルトの名無しさん
2011/01/02(日) 16:41:47遅延評価なら
((lambda (x) x) x0) を x0 までは簡約できるのかなあ
ふつうのLispだとまっさきにx0を評価しようとしてしまう
俺も未定義はアキちゃんには難しいと思った
環境を教えざるを得ないのでλ計算+置換モデルよりむずかしいし
特に数学的でもない
先生はいじわるだ!
そんなことを思ったので>>520を書いた15の春
0526デフォルトの名無しさん
2011/01/02(日) 16:52:43探せば LISP が教育用に不向きという結論の資料だって出てくるだろうし、その逆だって出てくる。 自分で理解せずに偏った資料を提示するのが「説得」だと思ってるなら議論に加わるべきじゃないな。
0527デフォルトの名無しさん
2011/01/02(日) 17:28:160528デフォルトの名無しさん
2011/01/02(日) 17:35:12Schemeが使われていたのは、言語として上とか下とかじゃなくて、
「計算機科学の基礎を教えるコースだから、言語の説明に時間を
取られたくない」、という理由だよ。Schemeの根本的なところなら
最初の授業の前半で済ませられる。
でも現代は、最小限の部品から全部手作りするって時代じゃなくなった。
ロボットを動かして意味のあることをさせようと思ったら有りものの
ライブラリを持ってこないと一学期で終わらない。それがコース変更の理由。
ソースはサスマン。
0529デフォルトの名無しさん
2011/01/02(日) 17:37:090530デフォルトの名無しさん
2011/01/02(日) 17:59:230531デフォルトの名無しさん
2011/01/02(日) 18:09:06基礎を教えるのに、時代が変わると基礎も変わるって明らかにおかしいだろ
そんなものは基礎じゃねぇよ
0532デフォルトの名無しさん
2011/01/02(日) 18:23:56計算の理論が登場したのが1930年末後半だから、計算機科学の基礎らしきモノが出てきてからまだ70年しか経ってない
基礎もまだ日進月歩
0533デフォルトの名無しさん
2011/01/02(日) 18:33:30釘とかネジとかから自作していたのが、
そういうのは出来合いのものを使うようになっただけ。
ttp://d.hatena.ne.jp/leque/20090326/p1
Pythonなのは、単にライブラリがPythonにあったから。
0534デフォルトの名無しさん
2011/01/02(日) 18:41:16時代が変われば、教えなきゃならん基礎も変わる。
いいからサスマンの書いた文章をまずは読んでみろ。
0535デフォルトの名無しさん
2011/01/02(日) 18:50:12基礎よりも初歩といったほうが適切かもしれない理由だから。
0536デフォルトの名無しさん
2011/01/02(日) 18:58:02理論はおいといて歴史が大切だと最初に正直にそう言えば何も問題なかった
0537デフォルトの名無しさん
2011/01/02(日) 19:00:33時代に合わせた教育が必要だから歴史を無視できるわけではないが、「置いといて」はないだろw
0538デフォルトの名無しさん
2011/01/02(日) 19:03:50それを教えりゃいいってものじゃない。
まぁ >>536 はネタなんだろうけど。
0539デフォルトの名無しさん
2011/01/02(日) 20:12:220540デフォルトの名無しさん
2011/01/02(日) 21:39:33先生たちが不機嫌になるのも要するに、お前理論が出てきた経緯を知らないくせに
知ってるふりするなよ、ということを暗に言いたいからなんだろう(自分で
教えとけよと思うけど、うっかり言えない事情もあるんだろ)。
結論としては、学会レベルでまとめて公表しておいてください。
0541デフォルトの名無しさん
2011/01/02(日) 21:56:42だれかサマライズしてくれ
0542デフォルトの名無しさん
2011/01/02(日) 22:32:51明けましておめでとうございます ← 今ここ
0543デフォルトの名無しさん
2011/01/02(日) 23:12:57彼らはいつまで引きずるつもりなんだ。いい加減区切りつけるべきだろ。
0544デフォルトの名無しさん
2011/01/03(月) 00:49:26言語を作った理由って割と後付けっぽいよな。
実際のところは、オモロいパラダイムや機能を思い付いたから作ってみましたって感じだろ。
論文にはその機能で解決できる問題とかを列挙してあったとしても、無理があることも多い。
本当にまっとうに、それがどうしても必要なんだという理由があることはまれなんじゃなかろうか。
そんなことをまとめたところで理解に役立ちそうな気がしない。
ずっと後の世であれば歴史研究の一分野として成立するかもしれんけど。
0545デフォルトの名無しさん
2011/01/03(月) 07:36:48C言語は必要だから作ったといえるだろうな。
(『どうしても必要不可欠』とまではいえないだろうけど)
Erlangもそうじゃないのかな。
でも、それ以外はどうしても必要だから作られた言語なんて思いつかないな。
0546デフォルトの名無しさん
2011/01/03(月) 08:09:030547デフォルトの名無しさん
2011/01/03(月) 09:57:190548デフォルトの名無しさん
2011/01/03(月) 10:59:040549デフォルトの名無しさん
2011/01/03(月) 11:15:53おれは Common Lisp か Clojure で、
すげーシステムを書くぜ
0550デフォルトの名無しさん
2011/01/03(月) 11:50:10そのスレ見てて思い出したんだが
昔の8bitBASICではNEXTの後の変数は省略した方が速くなったんでもっぱら変数なしだったな
0551デフォルトの名無しさん
2011/01/03(月) 12:53:09Lispは必要だから作ったんだろ?
そしたら化けた。
0552デフォルトの名無しさん
2011/01/03(月) 14:13:39それを作る人が教育されなかったからじゃないかな
0553デフォルトの名無しさん
2011/01/03(月) 14:17:45個人的に実験するにはlisp系の言語はとても役に立つんだけど
教育コスト考えると使いにくいんだよね
0554デフォルトの名無しさん
2011/01/03(月) 14:27:16そだね、だけど、現場でCが必要とされるほどの需要がなかった
# 高級アセンブラと高級言語を比べられても… って気はするけど
# ぶっちゃけ、手続き型言語なんて(OOPを含む)アセンブラの拡張
やっと関数を引数にする関数が認められてきた程度
関数を返す関数なんてのは邪道以外の何者でもないのが
現場なんだよおぉ!!!
0555デフォルトの名無しさん
2011/01/03(月) 14:59:09数式をS式で書く実験 → これでプログラム書けね? → LISP誕生
0556デフォルトの名無しさん
2011/01/03(月) 15:01:38,. -ヤ'''カー、
ー―ァ /r⌒|:::|⌒ヾ
_ノ オ{( |0| )} オオオォォォォ!!!!!
__,ヽ,ヾ,_|V|,_ノ、/ ,r-,,=
,゛==ゝ_ViV_ノ~i/ 〃 `ー―-、
/ /⌒`//´⌒c/^^^ ))))))))))
,,―イ {ー''"~{ {~゛`ー`/'`'~/ー--―'
)) ,./ゝ_/∧ゝ_ノ ノ
ー''" |ロ ロ |
0557デフォルトの名無しさん
2011/01/03(月) 15:01:46MLか何かと勘違いしてね?
0558デフォルトの名無しさん
2011/01/03(月) 15:25:470559デフォルトの名無しさん
2011/01/03(月) 15:56:26そうか? LISPの最初の実装こそ、いわばジョークプログラムみたいなもんだったと思うけど。
すくなくとも、ターゲットアプリケーションなんてなかっただろ。
0560デフォルトの名無しさん
2011/01/03(月) 16:26:41lispは仕様が(方向性がというべきか?)固まる前から
「こんなふうにコーディングできるはずだ!」といって
ゼミで机上コーディングが盛んに行われ、討論されていた言語だからなあ。
規模はともかくとして、実行させたいプログラムは
処理系の実装が動き出した段階でたくさんあったんじゃないかな。
0561デフォルトの名無しさん
2011/01/03(月) 17:12:43それでもリスト操作やら述語論理を書けるにしても、表現形式としてはあからさまに不向き。
今なら必ずしも LISP でなくてよいと思うけど、当時にしてみれば全く新しい概念だったには違いない。
0562デフォルトの名無しさん
2011/01/03(月) 17:28:060563デフォルトの名無しさん
2011/01/03(月) 18:14:55たまにはOCCAMの事も思い出してあげてください
CSPの為に作られたんだけど専用プロセッサと相まって話題にはなったが普及はせんかった奴
0564デフォルトの名無しさん
2011/01/03(月) 18:19:32はいはい歴史歴史
0565デフォルトの名無しさん
2011/01/03(月) 18:37:32歴史って、その当時ごくふつうだった概念を扱うんじゃないのか?
0566デフォルトの名無しさん
2011/01/03(月) 18:40:15トランスピューターかよ
昔、8 個使って専用画像処理装置組んだことがある。
量産品は売れなかったけど、試作品はごく一部で公表だったw
0567デフォルトの名無しさん
2011/01/03(月) 19:08:00そそ
大規模な奴だと阪大の先生がCGでがんばってたな〜くらい
でも昨今のマルチコアでちょっと再注目されるかもってかんじ
スレに合わせてLispの話だと純粋にプログラムの事を知らない人が必要にせまられてlispでカスタマイズスクリプト書く時の方が
プログラマが新たにLisp覚えるよりも早く習得するとかいう話が昔あったのだけどだれか出典覚えている人いませんかね?
autocadかemacsのどっちかだったかすらうろ覚えですまん
0568デフォルトの名無しさん
2011/01/03(月) 19:39:11> 純粋にプログラムの事を知らない人が必要にせまられてlispでカスタマイズスクリプト書く時の方が
> プログラマが新たにLisp覚えるよりも早く習得するとかいう話
ストールマン(当然elispの話)がインタビューか何かで喋ってたような記憶が…
「プログラムの事を知らない人」ってのがFSFの事務の女の子だったような記憶も…
0569デフォルトの名無しさん
2011/01/03(月) 23:25:37FF14スレには中国人がみんな作ってるって書いてあった
謎だな
0570デフォルトの名無しさん
2011/01/03(月) 23:27:00Gauche の中の人が関わってたのは FF7 の頃の話だべ。
0571デフォルトの名無しさん
2011/01/03(月) 23:43:45時系列を考えろよ。
Gaucheの中の人がやってたのは、>>570も言ってるけど、確か、FF7とか、壮大にコケたFFの映画。
0572デフォルトの名無しさん
2011/01/04(火) 00:24:39おお、それだと思うちと検索キーワードに追加してみるよ、ありがとう
0573デフォルトの名無しさん
2011/01/04(火) 00:32:10> やっと関数を引数にする関数が認められてきた程度
> 関数を返す関数なんてのは邪道以外の何者でもないのが
> 現場なんだよおぉ!!!
板違いの愚痴かよw
0574デフォルトの名無しさん
2011/01/04(火) 01:51:31プラグインを作ってみたので、Mac な方はお試しどうぞ。
http://code.google.com/p/scheme-indent-xcplugin/wiki/ReadMe
0575デフォルトの名無しさん
2011/01/04(火) 07:48:11アメリカでLispが教育用言語や実用言語として廃れた経緯まとめ
●計算機科学教育の変遷
Javaスクールの危険
http://local.joelonsoftware.com/wiki/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
Why MIT switched from Scheme to Python
http://d.hatena.ne.jp/leque/20090326/p1
●Lisp布教者の主張
普通のやつらの上を行け
http://practical-scheme.net/trans/beating-the-averages-j.html
技術野郎の復讐
http://practical-scheme.net/trans/icad-j.html
●Pythonユーザの反論
PythonとLispの関係について
http://practical-scheme.net/trans/IsPythonLisp-j.html
●Pythonに転向した元Lispユーザ
RedditはなぜLispをやめてPythonを使うようになったのか
http://coreblog.org/ats/japanese-translation-why-reddit-uses-python
How I lost my faith
http://web.archive.org/web/20030520220426/http://www.gembook.jp/page.pys?wiki=How+I+lost+my+faith
0576デフォルトの名無しさん
2011/01/04(火) 09:18:270577デフォルトの名無しさん
2011/01/04(火) 12:17:17用途に合わせてPythonとかも使うようになっただけで、
Lispを使うのを止めた訳じゃないと何度言えば(ry
つい最近もCCLのMLとかTracにいたよ。
0578デフォルトの名無しさん
2011/01/04(火) 12:25:260579デフォルトの名無しさん
2011/01/04(火) 19:21:330580デフォルトの名無しさん
2011/01/04(火) 21:55:37自由だと何をやっても必然性皆無
0581デフォルトの名無しさん
2011/01/05(水) 00:53:31日本語でOK
0582デフォルトの名無しさん
2011/01/05(水) 09:22:57グルー言語に頼らずに管理するのは意外と難しいのかもしれない。
0583デフォルトの名無しさん
2011/01/05(水) 12:10:540584デフォルトの名無しさん
2011/01/05(水) 12:28:46えっと、それはmakeの代わりにperl使うとか、debパッケージみたいなのをpythonで構築するとかいう話ではなく、
ライブラリはCでゴリゴリ書いて、それをLISPやRubyで使うのが気持ちよいプログラミングっていう話?
後者なら、オレも賛成。
これからは速度が非常に重要なときはOpenCLとか使うことになるんだろうし、そのへんはCとかCライクな言語でゴリゴリ書けばよい。
それを関数型言語で優雅にラッピング。これ最強。
0585デフォルトの名無しさん
2011/01/05(水) 14:04:170586デフォルトの名無しさん
2011/01/05(水) 21:49:16意味がわからない
グルーというのはライブラリをくっつけるのだから、マクロは関係ないよね
0587デフォルトの名無しさん
2011/01/06(木) 01:34:24>>585じゃないけど、APIをラップするとき、マクロがあると凄い便利だけど。
FFIでマクロ抜きとか、割と死にたくなる。リソースの管理とか特に。
with-dbみたいなマクロ使わないの?
0588デフォルトの名無しさん
2011/01/06(木) 12:36:550589デフォルトの名無しさん
2011/01/06(木) 12:49:06最近はAPIも統一傾向だし、
OOラッピングが一般的だから、
そういう感覚も薄れてきてるんじゃないのかね。
0590デフォルトの名無しさん
2011/01/11(火) 18:14:34Windows7です。
0591デフォルトの名無しさん
2011/01/11(火) 18:39:000592デフォルトの名無しさん
2011/01/11(火) 18:46:04http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aStandAloneProgram
0593デフォルトの名無しさん
2011/01/11(火) 19:05:27無い。R5RSとSRFIくらいしか使ってないなら別だけど。
それ以外のライブラリの互換性は、Schemeでは無いに等しいから、
マクロ様のお世話になるしかない。いずれにせよ、色々書かないといけない。
C経由も含めると、Chez(商用)、Gambit、Chicken、Larceny、Bigloo、MIT、Stalin(R4RS)、
Ikarus(開発停滞)、Vicare。JITも含めて良いなら、Racket、Mosh(ブランチ)、Ypsilon(trunk)。
とりあえず、何のためにネイティブコンパイルしたいの? 速度?
0594デフォルトの名無しさん
2011/01/11(火) 19:28:01フォルダをあさって特定のファイルをカウントして結果をCSVファイルに書き出すスクリプトをGaucheで書いたんですが、
そのスクリプトを、Gaucheがインストールされていない(勝手にインストールできない)会社のマシンで使いたいです
0595デフォルトの名無しさん
2011/01/11(火) 19:33:50Gauche のバイナリにインストーラはついてるけど、インストール時にやってるのは環境変数の追加程度のはず。
インストール後のフォルダをそのままコピーして持っていってもおおよそ問題ない。
slib を使っている場合なんかだと slib の場所を gauche が見付けられないこともあるが…。 それもちょろっと弄れば大丈夫。
USB メモリか何かに入れていってそこから起動させればいいんじゃないかな。
0596デフォルトの名無しさん
2011/01/11(火) 19:34:43GaucheのWindowsバイナリはどこに展開しても動くはずだから、手っ取り早くやりたいなら
自分のマシンのGaucheのツリーをzipで固めて持ってくとか、usbに入れてゆくとかは?
それさえも出来ないのなら、バイナリ作っても持ち込めないよね。
0597デフォルトの名無しさん
2011/01/11(火) 19:38:090598デフォルトの名無しさん
2011/01/12(水) 09:12:36defmacroを使い続けている
0599デフォルトの名無しさん
2011/01/12(水) 12:44:01define-syntaxで書かれたソースが通る
デメリット
処理系が肥大化する
手間の割にメリットは少ないと思う
0600デフォルトの名無しさん
2011/01/12(水) 14:24:20ハイジニックって性質は出来ることを増やそうというよりも誤りを防止する防壁的
なものだから直接的にこれが出来るあれが出来るというものではない。
0601デフォルトの名無しさん
2011/01/12(水) 17:21:59Applyとかどうすんだろとか、quoteとかどうやったらよかんべとか結局すくれてない。
0602デフォルトの名無しさん
2011/01/12(水) 18:41:21そこは別に悩むところじゃないと思うが… quoteはコンパイル後は単なる定数データだし、
applyは引数積んで関数ポインタcallするだけだろう。
とりあえず単純なVMをターゲットにしてコンパイラ書いてみたらコツがわかるんじゃない?
0603デフォルトの名無しさん
2011/01/12(水) 19:17:03ありがとう、もうちょいがんばってみる。
0604デフォルトの名無しさん
2011/01/12(水) 19:18:17横から質問だけど、例えば外部ファイルからreadでS式を読み込んでapplyとかするプログラムの場合、
そのプログラムはSchemeインタプリタを持ってないといけないんじゃないの?
外部ファイルからのS式がlambdaを持ってた場合、
(apply (lambda (x) x) '(1))とかだったらlambdaをevalしなきゃならないんじゃない?
0605デフォルトの名無しさん
2011/01/12(水) 19:22:50そうだよ。 インタプリタを内臓してる必要がある。
chicken scheme とか見てみれ。
Scheme の議論の中では eval 不要論も大きいし、実際俺は eval なんて使ったこと無いんだよな。
0606デフォルトの名無しさん
2011/01/12(水) 19:23:310607デフォルトの名無しさん
2011/01/12(水) 19:32:40何かレイヤをごっちゃにしてる気がする。S式をapplyすることはできないぞ。
実行時にapplyが見るのはあくまで手続きオブジェクトであって、lambdaから始まるリストじゃない。
(apply (lambda (x) x) '(1)) というプログラムがあった場合、コンパイル段階で
(lambda (x) x) のところは「実行されると『引数をそのまま返す手続きオブジェクト』を返す式」
という内部表現に既に変換されてる。lambdaとかはもはや関係ない。
データとしてのS式と、実行されるプログラムは別の世界にある。
その二つの世界をつなぐのがevalな。
evalは必ずしも「インタプリタ」を持ってる必要はなくて、その場でコンパイルして
動的リンクして実行したっていいわけだが。SchemeでSchemeインタプリタを書くのは
そんなに難しくないから、インタプリタを持つ設計があってもいい。
0608デフォルトの名無しさん
2011/01/13(木) 17:40:20その行で唐突にインタプリタの話になってる。
0609デフォルトの名無しさん
2011/01/13(木) 21:43:35つまりインタプリタという言葉を出してくるなら、すでにevalがあってしかるべき立場じゃないと
おかしいので、循環論法になってるじゃないか、ということだと思う。
話を読む限り「インタプリタ」じゃなくて単純に「解釈方法」とかでもいいんじゃないだろうか。
要は解釈されて保存されるデータの表現方法はどうでもいい、みたいな話じゃない?
0610デフォルトの名無しさん
2011/01/13(木) 23:25:370611デフォルトの名無しさん
2011/01/14(金) 00:20:36emacs lisp その他古い lisp だと
関数はまさに lambda で始まるリストだったりする。
(apply '(lambda () 42) nil) => 42
とか
(defun f ())
(symbol-function 'f) => (lambda nil)
とか。
Common Lisp や Scheme では >>607 のいうとおりだね。
この辺知らずに古い文献読むと混乱すること請け合い。
0612デフォルトの名無しさん
2011/01/14(金) 02:31:14http://groups.google.com/group/comp.emacs/msg/c9442db9331835e4
0613デフォルトの名無しさん
2011/01/14(金) 05:59:46eval自身をSchemeで書いてstalinでコンパイルすれば可能。
evalで実行されるコードにはstalinの超絶最適化は効かないし、既にコンパイルされてるコードの
振る舞いをevalから変えることはできないけど。
Schemeではもともとevalされるコードとevalするコードは相互作用しなくていいことになってる。
0614デフォルトの名無しさん
2011/01/14(金) 11:49:511.evalでS式が「適用式」であれば、
2.引数をevalして、
3.applicableかどうかチェックして、
4..applicableの種類に応じた「適用」を行う。
の1と2がevalで、3と4がapply。
Schemeは3でevalしてからチェックする。
コンパイルするならば、頑張れば2と4だけにできるってことだよね。
4も分岐がなくなることが多いし、2もload命令だけになるかも。
0615デフォルトの名無しさん
2011/01/14(金) 16:44:43データはインタプリタでもアセンブラでも同じだからアセンブラに落とせない。
すべてがデータだと豪語するLispのソースコードの中から、
本当はデータではない部分を見抜いてアセンブラに落とすのは結構むずかしいと思う。
0616デフォルトの名無しさん
2011/01/14(金) 16:56:45マクロはプログラムをデータとして扱うけど、それはコンパイルの前段階の話だから。
0617デフォルトの名無しさん
2011/01/14(金) 17:29:490618デフォルトの名無しさん
2011/01/14(金) 17:38:54eval不要論とか理解できないし
evalがそこらじゅうに散らかってる前提でコンパイルしようとするだろ
0619デフォルトの名無しさん
2011/01/14(金) 17:51:33その後コンパイラの作り方まで説明している本はたくさんあるよ。
0620デフォルトの名無しさん
2011/01/14(金) 17:58:06お勧めの本はどれですか?
0621デフォルトの名無しさん
2011/01/14(金) 23:47:190622デフォルトの名無しさん
2011/01/14(金) 23:50:370623デフォルトの名無しさん
2011/01/15(土) 03:17:000624ひげぽん ◆Ngzcp/NZpA
2011/01/15(土) 09:01:110625デフォルトの名無しさん
2011/01/15(土) 12:22:190626デフォルトの名無しさん
2011/01/15(土) 16:40:46おれも気になります!
もしよろければおしえてください!!
0627デフォルトの名無しさん
2011/01/15(土) 17:46:37構文木→ターゲットマシンのアセンブラにするだけじゃないの?
と、コンパイラを作った事の無い俺が偉そうに語ってみる。
0628デフォルトの名無しさん
2011/01/15(土) 18:23:410629デフォルトの名無しさん
2011/01/15(土) 19:30:510630デフォルトの名無しさん
2011/01/15(土) 19:58:070631デフォルトの名無しさん
2011/01/16(日) 00:26:590632デフォルトの名無しさん
2011/01/18(火) 12:32:39やっぱりGaucheが一番安心か
0633デフォルトの名無しさん
2011/01/18(火) 20:12:180634デフォルトの名無しさん
2011/01/18(火) 20:40:100635デフォルトの名無しさん
2011/01/19(水) 08:55:17どの辺が不便?
Schemeの処理系の中だと、Racketは最上の物のひとつだと思ってるから、興味がある。
0636デフォルトの名無しさん
2011/01/19(水) 23:29:43独自路線自体は悪いとは言わないけど、あえて標準から外れてまでやりたいことのビジョンが見えない。
0637デフォルトの名無しさん
2011/01/20(木) 15:10:57をマクロ展開したら
あらゆる条件組合せのif文の列挙になるような書き方ないかな
0638デフォルトの名無しさん
2011/01/20(木) 16:46:27マイ方言作るためのフレームワーク、結構面白いよ。> racket
0639デフォルトの名無しさん
2011/01/25(火) 13:42:54autohotkey.dll経由で
(http://www.autohotkey.net/~tinku99/ahkdll/)
windowsでキーフックやguiを作成したいのですが、
できるでしょうか?
0640デフォルトの名無しさん
2011/01/26(水) 09:21:15TIOBEの2010年最優秀言語はPython
ttp://www.infoq.com/jp/news/2011/01/python-tiobe-award
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
2010年最優秀プログラミング言語にPython もはやPerlは過去の言語
ttp://hato.2ch.net/test/read.cgi/news/1295935974/
0641デフォルトの名無しさん
2011/01/26(水) 10:11:10Gaucheでできるかどうかというとできるだろうけれど、Windows APIの
ラッパーとかほとんど無いから、自分でstubファイルを書かないとならないと思う。
そのへんはあんまりドキュメント化されてないから、stubファイルと聞いて何か
わからないのなら、茨の道だと思うよ。
0642デフォルトの名無しさん
2011/01/26(水) 11:25:15Gaucheだと、stub書くのが厄介だから、c-wrapper使えるなら使った方が良いと思う。
個人的には、GaucheのFFIは現状では鬼門だと思っているので、Racketの使用を推す。
0643デフォルトの名無しさん
2011/01/26(水) 12:14:07ありがとうございます。racketで試してみます。
0644デフォルトの名無しさん
2011/01/26(水) 13:14:270645デフォルトの名無しさん
2011/01/26(水) 13:57:17Guile、Mzscheme、Chiken なら SWIG でできるらしい。
他の言語にも対応してるから、確認してみてはどう?
0646デフォルトの名無しさん
2011/01/26(水) 14:06:56Guileでできるなら、GuileでできたやつをGaucheに変換できると思う
0647デフォルトの名無しさん
2011/01/26(水) 14:14:49ラッパーって何のラッパーのこと??
0648デフォルトの名無しさん
2011/01/26(水) 14:21:06MFCとかWTLとかじゃね?
0649デフォルトの名無しさん
2011/01/27(木) 11:04:09>もはやPerlは過去の言語
今も現役だと思うんだけど
0650デフォルトの名無しさん
2011/01/27(木) 12:01:18ソース拾ってきてもまちまちだしなあ・・・。
0651デフォルトの名無しさん
2011/01/27(木) 12:11:12Lispってずっと13位辺りなんだな。
それにしても、Java, Cは相変わらず強いな。
0652デフォルトの名無しさん
2011/01/28(金) 05:34:20LISPは亜流も多すぎてどう使ったらよいやらも謎だらけという認識なのさ
0653デフォルトの名無しさん
2011/01/28(金) 08:45:360654デフォルトの名無しさん
2011/01/28(金) 13:26:140655デフォルトの名無しさん
2011/01/28(金) 16:41:00Gaucheは業務に使ってる人いなかった?
0656デフォルトの名無しさん
2011/01/28(金) 16:57:49SBCLは日本語周りについてちゃんと理解できていない。
Gaucheは触ったら負けかなと思っている。
実際のところのGaucheの実用的な評価はどうなんでしょう?
0657デフォルトの名無しさん
2011/01/28(金) 17:00:420658デフォルトの名無しさん
2011/01/28(金) 17:03:13アスキーアートとか読みこませてみればわかるよ
0659デフォルトの名無しさん
2011/01/28(金) 19:35:19r6rs には transcoder があるけど、
定義済みなのは ISO 8859-1, UTF-8, UTF-16 だけだからなぁ。
まぁ、中途半端に日本語対応するくらいなら
(C がそうであるように) 一貫してバイト単位
で見せてくれた方がいいケースもあるだろうし、
実用的っていうのはどういう状況で実用するかによるんじゃないの。
Gauche はいわゆる「スクリプト言語」としては充分に優秀だよ。
0660デフォルトの名無しさん
2011/01/28(金) 19:54:15どうぞ。処理系の特徴、日本語の扱い、選び方など。
これ間違ってるよ、とかあったら指摘するか、適当に修正してね。
http://common-lisp-users.jp/index.cgi?%bd%e8%cd%fd%b7%cf
個人的には、CLならSBCL、SchemeならGaucheかRacket。
WindowsとかMacでも使いたいなら、CLはCLISPかCCL、SchemeはRacket。
使ったことないけど、傍から見てるとChickenも良いと思う。
0661デフォルトの名無しさん
2011/01/28(金) 20:02:08去年の暮れから今年の頭にかけて提案されてる。
ttps://groups.google.com/group/sbcl-devel/browse_thread/thread/e54dd01d5c5b14a1?hl=ja
ttps://groups.google.com/group/sbcl-devel/browse_thread/thread/594f9dd3c2ec858d?hl=ja#
この辺。先行きはかなり不透明。
0662デフォルトの名無しさん
2011/01/28(金) 20:30:04Gaucheに関しては、実用度はかなり高水準。
必要になりそうな基礎のライブラリとかもある程度揃ってる。
正規表現やCL風のキーワード、CL風の引数の処理、CLOSとか、
有用なものを柔軟に取り入れてる。開発者が仕事で使ってるのは伊達じゃない。
弱点は、仕様が完全に固まってなかったり、文書化されてない部分。
デバッグ周りとかC APIとかがそう。あとは、R5RS Schemeだから、
他のScheme処理系とライブラリを共有し辛いとかのデメリットもある。
例えば、CFGのパーサが欲しいとき、BiglooからLALRのパーサを持ってくる、
とかは安直にはできない。コードの修正が必要になる。GaucheにもPEGがあるけど、
まだ非公式だし。とにかく、CLみたいにQuicklisp一発とかは無理。
長所、短所を踏まえた上で、使い所を間違わなければ、非常に強力なツールだと思う。
0663デフォルトの名無しさん
2011/01/28(金) 23:27:350664デフォルトの名無しさん
2011/01/29(土) 11:29:250665デフォルトの名無しさん
2011/01/29(土) 22:45:46俺の勘だとまず間違いない。
0666デフォルトの名無しさん
2011/01/30(日) 00:30:07とりあえず使うわ
0667デフォルトの名無しさん
2011/01/30(日) 04:03:070668デフォルトの名無しさん
2011/01/30(日) 17:54:45SBCL は 3 bit
http://sbcl-internals.cliki.net/tag%20bit
Gauche は 2 bit
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AYAGHG%3AIntroduction
emacs lisp は 3 bit
http://dev.ariel-networks.com/Members/inoue/emacs23.2/
tiny scheme は cons も含め全てのオブジェクトが unsigined int 型の型情報を持っていました。
0669デフォルトの名無しさん
2011/01/30(日) 18:45:29open な処理系ならソース読め
64bit 版 SBCL は low tag 4 bit
64bit 版 clisp は (log most-positive-fixnum 2) => 48.0 なのでおそらく 16bit
0670デフォルトの名無しさん
2011/01/31(月) 00:49:52読んでますがな。
でも、一から読んで理解するのは時間が掛かるので、
ちょっとお力を借りたかった次第です。。。
ちなみに CLISP の tag bit は 2bit でした。
http://clisp.sourceforge.net/impnotes/typecodes.html
bit layout は src/lispbibl.d にあります。
SECDR も Tiny Scheme と同様、tag bit を使用せずに、
型情報を別に持つタイプでした。
0671デフォルトの名無しさん
2011/01/31(月) 01:00:5264bit だと実メモリ搭載量よりアドレス空間が遥かに広いのでレイアウトが楽そうですね。
0672デフォルトの名無しさん
2011/02/01(火) 11:47:29たまに変な日本語コード入力すると落ちる問題は、そろそろ解決してるのかな
昔sbclでwebクローラー作ったらアスキーアート読みこんだとたんに落ちてたんだよなあ
0673デフォルトの名無しさん
2011/02/01(火) 15:31:210674デフォルトの名無しさん
2011/02/02(水) 00:44:08てーか、昔って何時なのか分かんないし、そもそもデータ読んだだけで処理系が落ちる訳?
あるいは、デバッガに落ちてんのを、落ちたとか言ってるの?
CLISPもSBCLも、Unicodeの範囲ならある程度実用的な日本語処理が可能。
本当に処理系の問題なの? 何かFUDっぽくて嫌だなー。
CLスレに書き込んでた人と同一人物じゃないんだろうか。
0675デフォルトの名無しさん
2011/02/02(水) 01:50:430676デフォルトの名無しさん
2011/02/04(金) 00:18:25ruby-electric面白そうだったからlispでもやってみた。
動作はコード読んだほうが早いかも知らん
ぼちぼちドキュメント書きます。使う人がいればだけれども
軽く説明すると
"("かスペース押すとタブかバックタブでS式単位で閉じ括弧置く場所を指定できて、
適当な動作でその動作を入力しつつ抜ける感じ。
スペース2連打でyas/expand、
タブとか使ってくくる範囲選択してyasで展開するとタブで指定していた範囲がその中に入る。
んー、やっぱり読んだほうが早いな
とりあえず暇な人使ってみてください
ちなみにntemacsでしか試してないので本家emacsだとうごかねーよとかあったら教えてください
0677デフォルトの名無しさん
2011/02/04(金) 09:07:060678デフォルトの名無しさん
2011/02/04(金) 11:54:48vi使いの人ってREPL支援とかどうやってるのか知りたいんだけどどこかでvideo配信してないかな?
Cやshスクリプトならviよく使うんだけどLispとかpythonだとemacsから足抜けが永遠にできなそうで少し困ってさ
0679デフォルトの名無しさん
2011/02/05(土) 03:16:350680デフォルトの名無しさん
2011/02/05(土) 09:25:140681デフォルトの名無しさん
2011/02/05(土) 15:20:390682デフォルトの名無しさん
2011/02/05(土) 15:42:50スレ違い
っttp://yuzuru.2ch.net/test/read.cgi/voice/1290190096/701-800
0683デフォルトの名無しさん
2011/02/06(日) 00:59:02実装出来ると言うけど、継続を使って実装するより言語のプリミティブな機能として、
処理系の実装言語で実装しちゃった方が実行効率は良いよね。
あんまりそういうのを気にしない人が使ってるのかな。
0684デフォルトの名無しさん
2011/02/06(日) 01:09:16具体的な実装が継続を使うのか、
もっと効率のよい実装であるのかは問われないけど、
気合の入った実装者ならそれなりに効率的なものにするだろ。
主要な処理系にある限定継続を使えばコルーチンは結構効率的なはず。
プリミティブな機能として実装するのと大差なくなる。
限定継続は今後の議論の行方の中で注目すべき点だと思う。
大域脱出に継続を使うのは豪華すぎると思うけど、
一般に大域脱出は一度きりであって、
そういったケースを検出したら軽量な継続を作るように切り替えるアイデアは存在する。
"call/ioc" でググってみ。
まぁ、ナイーブな実装だと継続は効率悪いんだけど、
色々と効率的な実装について研究はされてるよという話。
0685デフォルトの名無しさん
2011/02/06(日) 01:47:00限定継続って知らなかった。どうもありがとう。
0686デフォルトの名無しさん
2011/02/06(日) 03:57:07Schemeの仕様は効率よりも綺麗さ優先だからな。
まず「正しい」仕様を決めて、それをいかにして効率良く実装できるかを競う。
現実的には、継続みたいな仕組みは既にやり方がわかってる大域脱出とかを
再実装するものじゃなくて、新しい制御フローの仕組みを試してみるための
部品と考えたらいい。大域脱出にしても、動的環境との相互作用のセマンティクスを
変えてみるとか。そういうのは普通の言語では言語の実装に手を入れないと
実験できないけど、SchemeならScheme自身でポータブルに書けると。
それで有用性がわかったら各処理系が効率良いサポートを追加するっていう方針。
例えば限定継続も、(効率は悪いが)call/ccを使ったポータブルな実装がある。
その上でいくつかの処理系は効率の良い内部実装を持っている。
0687デフォルトの名無しさん
2011/02/06(日) 18:09:13>新しい制御フローの仕組みを試してみるための部品と考えたらいい。
なるほど、納得しました。
皆さんには今更の話題で済みません。部分継続って面白いですね。
もう一度 scheme を勉強し直してみます。
0688676
2011/02/06(日) 20:08:33ありがとうございます。
vimあんまり使ったことないけど
「vimならこんなことができるのに」とかあれば教えていただけると幸いです。
yasnippet用のsnippet同じ所に置いたけど見難いな。
ユーザが適当にインストールできるといいな
emacslispにファイル埋め込んで簡単に展開できたりしないかなー
と思ったので、最後にそのための式を書いてみた。
クオートはずしてc-x c-eとかするとインストールされます。
てか、これのためにyasnippetインストールしないといけないから手順的に重いか
そっちのが問題?
0689デフォルトの名無しさん
2011/02/06(日) 22:46:42必須のコア機能は何だろうかってことでCLOSがデザインされたからね。
抽象的なプリミティブはいいから、リッチなライブラリ充実しろって人は、
あまり向いてない言語だと思う。
0690デフォルトの名無しさん
2011/02/06(日) 23:00:24R7RS はリッチ派とミニマリスト派で別れて作業するみたいだけど、
現実のプロジェクトでも採用し易い言語に育つと良いね。
0691デフォルトの名無しさん
2011/02/06(日) 23:01:430692デフォルトの名無しさん
2011/02/06(日) 23:04:02型が無いせいだな
性敵型のLISPが必要だな
0693デフォルトの名無しさん
2011/02/06(日) 23:06:02S式をやめないと
0694デフォルトの名無しさん
2011/02/06(日) 23:06:50リッチ派とミニマリスト派っていうか、コアと上に乗っかる部分、って感じ。
Sussmanとか戻ってきてるよ。
ttp://trac.sacrideo.us/wg/wiki
ttp://trac.sacrideo.us/wg/wiki/WG1BallotSussman
0695デフォルトの名無しさん
2011/02/06(日) 23:50:520696デフォルトの名無しさん
2011/02/07(月) 01:44:170697デフォルトの名無しさん
2011/02/07(月) 01:53:520698デフォルトの名無しさん
2011/02/07(月) 02:12:14C1X と同程度の進歩だが
0699デフォルトの名無しさん
2011/02/07(月) 02:26:50このリストを見てしまうと。凄いよ。策定までの遙かな道のりがリアルに想像できて。
ttp://trac.sacrideo.us/wg/wiki/StandardDocket
0700デフォルトの名無しさん
2011/02/07(月) 02:38:27CLtL3とR7RS largeとC++0xの三つ巴で覇権を争うかと思うと、胸が熱くなるな。変態規格的な意味で。
0701デフォルトの名無しさん
2011/02/07(月) 02:52:130702デフォルトの名無しさん
2011/02/07(月) 03:32:270703デフォルトの名無しさん
2011/02/08(火) 11:59:540704デフォルトの名無しさん
2011/02/08(火) 12:36:53racketはないですよね
Common Lispはあるみたいですが
0705デフォルトの名無しさん
2011/02/08(火) 12:50:1080年代ならともかく、いまどきperlは勘弁してほしい
0706デフォルトの名無しさん
2011/02/08(火) 13:25:330707デフォルトの名無しさん
2011/02/08(火) 15:41:46phpとpythonよりはるかにましだぞ
0708デフォルトの名無しさん
2011/02/08(火) 16:04:500709デフォルトの名無しさん
2011/02/08(火) 16:14:00理由は文法の一貫性。 perl は複雑すぎる。
よくあるケースに短い記法が割り当てられているのはメリットでもあるけど、
習熟に時間がかかることに繋がるデメリットでもある。
メリットとデメリットが表裏一体でメリットだけ取るわけにいかない話だから、
どのあたりで妥協するかっていうトレードオフなんだよな。
でもまぁ、そろそろ perl 4 はフェードアウトしていい頃なんじゃないかとは思う。
0710デフォルトの名無しさん
2011/02/08(火) 16:20:40そういう話題はLLバトロワスレあたりでどうぞ
0711Perl忍者 ◆M5ZWRnXOj6
2011/02/08(火) 17:53:060712Perl忍者 ◆M5ZWRnXOj6
2011/02/08(火) 18:04:20http://perldoc.jp/ここの編集の仕方とか教えろ
0713Perl忍者 ◆M5ZWRnXOj6
2011/02/08(火) 18:05:18* 関数
* モジュール
っていうやつが灰色になってうまくみえてえんだよ
早く教えろ
人のために尽くしたい!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!
0714デフォルトの名無しさん
2011/02/08(火) 18:06:380715デフォルトの名無しさん
2011/02/08(火) 22:49:39Perlの足の軽さとLispのもっさりFFIの感じだと普通にスクリプト実行して十分じゃね
0716デフォルトの名無しさん
2011/02/08(火) 22:54:05Perl で Scheme を実装して、Scheme から Perl の関数を呼び出せる様にすれば
良いだけじゃないの。
或は Perl を Scheme だと思って頑張るという手もある。
0717デフォルトの名無しさん
2011/02/08(火) 23:20:160718デフォルトの名無しさん
2011/02/08(火) 23:24:32lisp-interactive-modeのscratchではC-jで式を評価→表示が出来ていて、私はこれに慣れていました。
slime-modeでも同じことをやりたいと思い以下のようにしてみました。
(define-key slime-mode-map "\C-j" 'slime-eval-print-last-expression)
すると一応出来たのですが、lisp-interactive-modeの場合と違い出力のあとに改行が付きません。
改行が欲しいので以下のようにしてみたのですが、実際にC-jすると引数が間違っていると怒られました。
(defun my-Cj ()
(interactive)
(slime-eval-print-last-expression)
(insert "\n") )
(define-key slime-mode-map "\C-j" 'my-Cj)
(+ 1 8) C-j
my-Cj: Wrong number of arguments: (lambda (string) "Evaluate sexp before point; print value into the current buffer"
(interactive (list (slime-last-expression))) (insert "
") (slime-eval-print string)), 0
slime-eval-print-last-expressionに引数が入っていないようなので以下のように
してみましたが、今度はmy-Cjの引数が間違っていると怒られました。
(defun my-Cj (s)
(interactive)
(slime-eval-print-last-expression s)
(insert "\n") )
slime-eval-print-last-expressionにはどのようにして引数を送れば良いのでしょうか?
lispbox-0.7-clisp-2.37を使っています。お教えください。
0719デフォルトの名無しさん
2011/02/08(火) 23:27:19Perl で Scheme するのは割と楽しそうだよ
http://okmij.org/ftp/Perl/Scheme-in-Perl.txt
ちなみに、Perl で Scheme を書く方法はこっちね
http://billhails.net/Book/
0720デフォルトの名無しさん
2011/02/09(水) 00:18:14one liner 以外は perl で書かないから興味ない
とっとと消えていなくなれ
# 変数の指定の仕方が変態だろう? > perl
0721デフォルトの名無しさん
2011/02/09(水) 00:20:200722デフォルトの名無しさん
2011/02/09(水) 02:05:08それはどっちかっていうと、Emacs Lispの書き方の話じゃないでしょうか。
(defun foo (s)
(interactive (list (slime-last-expression)))
(slime-eval-print-last-expression s)
(insert "\n"))
という感じにしたかったんですか? なら、interactiveの仕組みを調べると良いと思います。
ttp://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp_21.html#IDX1085
ただ、こういう場面でslime-eval-print-last-expressionを呼んで良いかは調べていません。
Emacsで対話的に関数を呼ぶ場合、interactiveはこういう風に使うよ、って話です。
実際、上のコードは、こちらでは結果の前に改行が挿入され、意図した動作になりません。
詳しく調べていませんが、SLIMEが評価にスレッドを使っているのが関係してると思われます。
個人的には、REPLを使うか、C-c C-pで一時バッファに結果を出す方が便利に感じますが、
(コードのバッファを変更せずに済むから)この辺はそれぞれの好みがありますね。
0723デフォルトの名無しさん
2011/02/09(水) 02:26:37(defun eval-print-last-sexp/slime (s)
(interactive (list (slime-last-expression)))
(insert (format "\n%S\n" (slime-eval (car (read-from-string s))))))
手元の環境だとそれっぽく動いてる感じなんですが、いかがでしょうか。
0724Perl評論家
2011/02/09(水) 11:55:23LISPでなにつくったの?
言ってみろや
本当にしょうもなさすぎて 答えられねえのか?
0725デフォルトの名無しさん
2011/02/09(水) 12:21:580726デフォルトの名無しさん
2011/02/09(水) 13:14:28表面的にはjavaだったりするけどね
0727718
2011/02/09(水) 18:42:26丁寧な説明ありがとうございます。たしかにcommon lispというよりemacs lispの話でした。
interactiveを使ってsに値を入れる必要があったんですね。
そのコードを動かすと自分の環境でも改行が入ってからの出力になりました。
スレッドの影響ですか。(sleepを挟んでから改行を挿入してみようか)
>>723
なるほど、受け取って整形してから表示という事ですか。
実際にC-jにそれを割り当てて動かしてみたのですが以下となってしまいました。
EVAL: undefined function SWANK-IO-PACKAGE::+
[Condition of type SYSTEM::SIMPLE-UNDEFINED-FUNCTION]
Backtrace:
0: #<SYSTEM-FUNCTION EVAL>
1: #<COMPILED-FUNCTION SWANK::EVAL-FOR-EMACS-1>
2: #<COMPILED-FUNCTION #:|472 477 (DEFINTERFACE CALL-WITH-DEBUGGER-HOOK (HOOK FUN) ...)-52-3-1-1|>
3: #<COMPILED-FUNCTION SWANK::EVAL-FOR-EMACS>
4: #<COMPILED-FUNCTION SWANK::READ-FROM-EMACS>
5: #<COMPILED-FUNCTION SWANK::HANDLE-REQUEST-1>
0728デフォルトの名無しさん
2011/02/09(水) 18:48:30;=> (+ 1 3)がうまく取れる
(slime-eval '(+ 1 3))
;=> EVAL: undefined function SWANK-IO-PACKAGE::+
slime-evalで+が使えないようなのでそのあたり調べてみます。
0729デフォルトの名無しさん
2011/02/09(水) 19:11:16深く考えずに適当なことを言ったんで、もうちょっと考えて発言すると、
SLIMEはポート経由で処理系と通信して情報をやり取りしていて、
スレッド対応環境では、評価ごとに処理系のスレッドを使って通信してたと記憶してます。
で、その結果を非同期で受け取ったりするので、多分その関係じゃないかと。
考えてみると、あんまスレッドは関係ないですね。非同期なのがポイントであって。
で、そのエラーはパッケージにcl:+がimportされてないのが原因みたいですが、
それって、ちゃんとslime-modeのバッファで実行してます? 他のモードで呼んでませんか?
SLIMEはlisp-modeをフックして、slime-modeっていうマイナーモードも起動するようにするんですが、
その環境じゃないと、slime-evalが現在のパッケージを見付けられなくて、失敗すると思います。
lisp-mode + slime-modeになってるバッファか、slime-evalの第二引数にパッケージを指定してください。
0730デフォルトの名無しさん
2011/02/09(水) 19:14:50要は、SLIME起動後、M-x lisp-modeしてLispモードなバッファで使ってください。
0731718
2011/02/09(水) 19:37:15レスありがとうございます。.emacs上(Emacs-Lisp mode)でやっていました。
(slimeと繋がっているtest.lisp上(Lisp mode)で(slime-eval '(+ 1 3))をするとclispのslime-evalを探しに行くような気がして)
test.lisp上で↓を実行するとこうなりました。
(slime-eval '(+ 1 3))
EVAL: undefined function SLIME-EVAL
[Condition of type SYSTEM::SIMPLE-UNDEFINED-FUNCTION]
M-x describe-functionでslime-evalをすると確かにあるのですが・・。うーん。
.emacsで(slime-eval-print "(+ 1 3)") ;=> 4
test.lispで(slime-eval-print "(+ 1 3)") ;=> EVAL: undefined function SLIME-EVAL-PRINT
.emacsで(slime-eval '(+ 1 3)) ;=> EVAL: undefined function SWANK-IO-PACKAGE::+
test.lispで(slime-eval '(+ 1 3)) ;=> EVAL: undefined function SLIME-EVAL
0732デフォルトの名無しさん
2011/02/09(水) 19:51:48C-jにeval-print-last-sexp/slimeを割り当てたあと、
それをslimeと繋がっているlisp-modeモードなバッファで使えという事ですね。
それをするとEVAL: undefined function SWANK-IO-PACKAGE::+になりました。
test.lisp
(+ 1 3) ;C-jすると EVAL: undefined function SWANK-IO-PACKAGE::+
(defun eval-print-last-sexp/slime (s)
(interactive (list (slime-last-expression)))
(insert (format "\n%S\n" (slime-eval s))) )
こう変えてから
(+ 1 3) ;C-jすると
"(+ 1 3)
"
(defun eval-print-last-sexp/slime (s)
(interactive (list (slime-last-expression)))
(insert (format "\n%S\n" (car (read-from-string s)))) )
こう変えてから
(+ 1 3) ;C-jすると
(+ 1 3)
0733デフォルトの名無しさん
2011/02/09(水) 20:10:11モードラインのモードの部分は、ちゃんと
(Lisp Autodoc [COMMON-LISP-USER clisp])
のようになっていますか? そのバッファでM-x describe-modeすると、
「Enabled minor modes:」の一覧にSlimeは含まれますか?
0734デフォルトの名無しさん
2011/02/09(水) 20:25:23--(Unix)-- test.lisp (Lisp Slime)--L1--Top------------
M-x describe-mode
The major mode is described first.
For minor modes, see following pages.
Lisp mode:
Major mode for editing Lisp code for Lisps other than GNU Emacs Lisp.
(略)
Slime minor mode (indicator( Slime ((slime-modeline-package (: slime-modeline-package) ) slime-state-name))):
SLIME: The Superior Lisp Interaction Mode for Emacs (minor-mode).
とあります。
0735デフォルトの名無しさん
2011/02/09(水) 20:43:08それ処理系と繋がってないです。M-x slimeしてます?
0736718
2011/02/09(水) 20:54:49今まで実行していたコードは実は全て組み込みのEmacs Lispで実行されていたとか・・?
サンプルで試したクロージャなどもうまく動いたのでそれはないと思うのですが。
M-x slimeは起動時にされるようです。起動後にM-x slimeするとCreate an additonal *inferior-lisp*? (y or n)
と表示されy押すと新たにREPLが作られます。lispboxだからうまくいかないのかなぁ。
0737デフォルトの名無しさん
2011/02/09(水) 20:57:44http://common-lisp.net/pcl/windows/lispbox-0.7-clisp-2.37.zip
0738デフォルトの名無しさん
2011/02/09(水) 21:29:45自分でインストールしてみましたが、バージョンFURIIIIIIIIIIIIIIIIIIIIII!!1!
Emacs 21.3に20060110のSLIMEですか。流石にこれは想定外。
取り敢えず、もっと新しいLispboxを使うか、それぞれを新しいものに入れ替えることをオススメします。
0739デフォルトの名無しさん
2011/02/09(水) 21:31:43ttp://common-lisp.net/project/lispbox/
0740デフォルトの名無しさん
2011/02/09(水) 21:37:09他の言語のコード生成の基って具体的にどういうの?
0741デフォルトの名無しさん
2011/02/09(水) 21:45:49>>718は環境全部を晒した方がいいだろうな。
0742デフォルトの名無しさん
2011/02/09(水) 22:00:47(slime-eval
'(+ 2 3)
(slime-current-package))
確かにこれが同じメッセージで失敗しますね。(slime-current-package)も":cl-user"なのに。
+をパッケージ名まで含めてcl:+にすると結果が戻ってくるので、何かしらのバグがあるのか、
現行のバージョンとは仕様が変わっているのか。
どちらにしろ、過去のバージョンを詳しく調べるのも不毛なのでご容赦ください。
Emacs 21.3だと日本語のインライン入力とかUnicodeの取り扱いもできませんし、
そういう意味でも、新しいバージョンにする方が良いと思います。
0743718
2011/02/09(水) 22:00:48>>738,739
古かったんですね・・。新しいのをダウンロードして実行しました。
(defun eval-print-last-sexp/slime (s)
(interactive (list (slime-last-expression)))
(insert (format "\n%S\n" (slime-eval (car (read-from-string s))))) )
(define-key slime-mode-map "\C-j" 'eval-print-last-sexp/slime)
;(define-key slime-mode-map "\C-j" 'slime-eval-print-last-expression)
上を評価した後、(Lisp Autodoc [COMMON-LISP-USER clozurecl])のバッファの(+ 1 8)でC-jすると
Undefined function SWANK-IO-PACKAGE::+ called with arguments (1
8) .
[Condition of type CCL::UNDEFINED-FUNCTION-CALL]
となりました。
M-x describe-modeでは
Enabled minor modes: Auto-Compression Auto-Encryption Blink-Cursor
Eldoc File-Name-Shadow Font-Lock Global-Font-Lock Line-Number Menu-Bar
Mouse-Wheel Show-Paren Slime Tool-Bar Tooltip Transient-Mark
と、なりSlimeが有効に鳴っていると思います。何故うまくいかないんだ・・。
0744718
2011/02/09(水) 22:13:17(defun foo (s)
(interactive (list (slime-last-expression)))
(slime-eval-print-last-expression s)
(sleep-for 0 50)
(insert "\n"))
みなさんたくさんのレスありがとうございました!!!!!111111
0745デフォルトの名無しさん
2011/02/09(水) 22:55:14あー、ごめん。何かこっちでも色々いじってたんでミスってたかも。
(defun foo (s)
(interactive (list (slime-last-expression)))
(let ((r (cadr (slime-eval `(swank:eval-and-grab-output ,s)))))
(insert (format "\n%s\n" r))))
最後に試してみて。多分これでいける。
0746デフォルトの名無しさん
2011/02/09(水) 23:57:01うまく動きました。eval-and-grab-outputの動作はまだよく分かっていませんが、
slime-evalに与える引数に変更が必要だったのですね。
>>744の場当たり的方法ではなくなったのでさっぱりした気持ちになりました。
遅くまでお付き合いありがとうございました。m(_ _)m
0747sasagawa888
2011/02/10(木) 09:37:39荒らすなよカスども
0748sasagawa888
2011/02/10(木) 09:48:01バカか?
なに2chルール守ってんの?
0749デフォルトの名無しさん
2011/02/10(木) 09:59:02キチガイか
ツイッターはキチガイしかいないな
0750デフォルトの名無しさん
2011/02/10(木) 11:51:510751デフォルトの名無しさん
2011/02/10(木) 13:12:430752デフォルトの名無しさん
2011/02/10(木) 13:17:120753デフォルトの名無しさん
2011/02/10(木) 16:02:13いろんな言語の集まり」を目指してるんじゃないのかな。改名もそのためで。
だから「racketで作られた一実装」としてRnRS互換のSchemeというのは
提供され続けると思うけれど、ツールキットたるracket本体は独自に進化するんでないの?
0754デフォルトの名無しさん
2011/02/11(金) 09:31:18うんちく垂れ流してるカスだけど
まつもとひろゆき以下だろ
だったら、かっこつけてLISPやってんじゃねえよカス
所詮ゴミLISPERなのにがんばっちゃって 痛いよ
っでさあ LISPでなにやってんのこのカスは
俺てきにLISPで作りたいものないからさ
つまらなそうだし
0755デフォルトの名無しさん
2011/02/11(金) 09:46:320756デフォルトの名無しさん
2011/02/11(金) 09:56:390757デフォルトの名無しさん
2011/02/11(金) 10:06:35受け狙い
真剣に死ぬかLISPやめろカス
0758デフォルトの名無しさん
2011/02/11(金) 10:07:34かっこ イクナイ!と思ったらLispは絶対に書けない。
上級Lisperは全員「かっこ、こっか、かっこ、こっか」ってブツブツつぶやきながらコーディングしてる。
0759デフォルトの名無しさん
2011/02/11(金) 10:51:09ある伝説的なLispハッカーは、知人のEmacsを後ろから覗き込むと
「確かに見憶えのある記号だが、どうしてもその名前が思出せぬし、
その用途も思い当らない。それは何と呼ぶ記号で、また何に用いるのか」と尋ねたという。
彼が指差していたのは、.emacsに並ぶ無数の括弧の一つであった。
0760デフォルトの名無しさん
2011/02/11(金) 18:36:220761デフォルトの名無しさん
2011/02/11(金) 20:37:180762デフォルトの名無しさん
2011/02/11(金) 21:26:150763デフォルトの名無しさん
2011/02/15(火) 00:16:39と
amb
で検索しても何も出てこない
ないのか
0764デフォルトの名無しさん
2011/02/15(火) 10:54:21http://rosettacode.org/wiki/Amb
"amb operator"で検索しないと。
0765デフォルトの名無しさん
2011/02/15(火) 11:06:29その逆ってどうなのかな?
LISPでBASICだのRubyだのを書いてみた人っている?
0766デフォルトの名無しさん
2011/02/15(火) 12:55:21電卓までだ。
0767デフォルトの名無しさん
2011/02/15(火) 13:03:260768デフォルトの名無しさん
2011/02/15(火) 14:51:04「コンパイラ・スクリプトエンジン」相談室15
にTiny Algol by racketのURL張ったばかり。
0769デフォルトの名無しさん
2011/02/15(火) 15:47:17CLPython - an implementation of Python in Common Lisp
ttp://common-lisp.net/project/clpython/
0770デフォルトの名無しさん
2011/02/15(火) 20:13:10逆は検索すると見つかるのですが
0771デフォルトの名無しさん
2011/02/15(火) 20:17:06うまい人の書いたperlはすぐわかる
言語の違いなんてそんなもの
0772デフォルトの名無しさん
2011/02/15(火) 22:26:07CLpythonでlispy動かすみたいな?
0773デフォルトの名無しさん
2011/02/15(火) 22:48:510774デフォルトの名無しさん
2011/02/16(水) 01:03:500775デフォルトの名無しさん
2011/02/16(水) 02:01:40不可能。
処理系から作るのでない限り。
0776デフォルトの名無しさん
2011/02/16(水) 02:16:320777デフォルトの名無しさん
2011/02/16(水) 02:23:540778デフォルトの名無しさん
2011/02/16(水) 02:28:32だったらコピーしてevalにぶちこんじゃえば同じ事じゃなくて?
0779デフォルトの名無しさん
2011/02/16(水) 02:33:47やっぱ不可能なのか。安心した。
情報サンクス
0780デフォルトの名無しさん
2011/02/16(水) 02:44:32つまりSICPにあるようなインタプリタを作りましょうなわけだが。
>>778
コピーじゃない。
実体は1つ。
0781デフォルトの名無しさん
2011/02/16(水) 02:48:22その発想は無かった。
とりあえず違うから一旦忘れてもう一度読め。
手作業で CPS 変換してみるといいぞ。
第一級継続はこういうものだと簡潔に示すのは無理だし、
だからこそ色んな形で解説したものはある。
理解できないなら別の解説を読めよ。
0782デフォルトの名無しさん
2011/02/16(水) 02:57:170783デフォルトの名無しさん
2011/02/16(水) 02:59:24あまりに Scheme とは通すぎてこんがらがる要素とかないと思うけど。
0784デフォルトの名無しさん
2011/02/16(水) 03:04:300785デフォルトの名無しさん
2011/02/16(水) 03:19:04ambに限らず、具体例から一般化して抽象的に理解はできるけど、いきなり抽象イメージからスタートできないのって、頭が悪いから?
0786デフォルトの名無しさん
2011/02/16(水) 09:50:220787デフォルトの名無しさん
2011/02/16(水) 10:14:23複雑すぎて難しい場合と、単純すぎて難しい場合だとさ
単に難しいっていうと前者を連想しがちだが……
0788デフォルトの名無しさん
2011/02/16(水) 12:11:160789デフォルトの名無しさん
2011/02/16(水) 13:16:350790デフォルトの名無しさん
2011/02/16(水) 14:30:320791デフォルトの名無しさん
2011/02/17(木) 02:47:32セーブはしない。call-with-current-continuationする(現在の継続を引数にして呼ぶ)だけ。
以下を読んでみて欲しい。
ttp://practical-scheme.net/docs/cont-j.html
継続っていう概念は、本当にSchemeのコアになっていて、言語仕様の様々な所で出てくる。
例えば、多値辺りは継続も理解しないと、本質的な理解が出来ない。とても重要な要素。
また、継続自体は計算機科学の一般的な概念だから、理解に時間を割いて損はないと思う。
関数型なら、値を返す代わりに継続を返す、というのは普通にある。遅延評価したいときとか。
より実用的な応用例だと、継続ベースのアプリケーションサーバとか。
0792デフォルトの名無しさん
2011/02/17(木) 03:30:08evalでのレキシカルな環境の扱いは、Schemeだとダークコーナーだった気がする。
R6RSの例だとレキシカルな束縛参照してるけど、詳しい定義規格中にあったっけ?
R5RSだと処理系依存だった覚えがある。とりあえず、制約が付くのは確か。
あとは、その継続と同じ内容の式をどう作るか、ってのも大きな問題になるはず。
lambdaで普通に継続を自分で書き下すならともかく、call/ccを使う複雑なケースだと、
継続と同じ内容の式を用意するのは難しくなってくると思う。
そもそも、継続自体は、ネイティブコードにせよ、バイトコードにせよ、インタプリタにせよ、
コードを処理した段階で既にもう存在しているわけで、それをわざわざS式を組み立てて、
その上でevalするっていうのも、随分迂遠な話だと思うよ。新たに作るものじゃなくって、
継続は既にあるものだから。
0793デフォルトの名無しさん
2011/02/17(木) 03:50:14> call/ccを使う複雑なケースだと、継続と同じ内容の式を用意するのは難しくなってくると思う。
つまり、可能と?
0794デフォルトの名無しさん
2011/02/17(木) 03:52:32FFI経由ならCの関数呼び放題だから、普通に使えると思う。
ttp://docs.racket-lang.org/foreign/index.html?q=FFI
いちいち定義書くのが面倒なんだよボケ、って場合は、SWIG使えば良いと思う。
ただ、SWIGのドキュメントのMzSchemeの項は有り得ん程不親切だけど。
ttp://www.swig.org/Doc1.3/Mzscheme.html
ttp://permalink.gmane.org/gmane.comp.programming.swig.devel/20490
0795デフォルトの名無しさん
2011/02/17(木) 04:00:01同じ動作をする微妙に異なるコードを最低二種類保守する覚悟があって、
かつ移植性を犠牲にし、下手をするとコードの根本的な構造すら変えるリスクを背負い、
低い性能と劣悪な可読性を許容すれば、「似た」ことはできると思うよ。
0796デフォルトの名無しさん
2011/02/17(木) 12:31:150797デフォルトの名無しさん
2011/02/17(木) 20:51:34誰か教えて。
0798デフォルトの名無しさん
2011/02/18(金) 01:20:25> 例えば、多値辺りは継続も理解しないと、本質的な理解が出来ない。とても重要な要素。
それは言いすぎでしょ。
CSPで多値を扱うと美しさを感じることはあるけども。
0799デフォルトの名無しさん
2011/02/18(金) 01:28:14全く同意できない。
>>774はフルセットのSchemeを所望しているわけではないし。
SECDマシンで継続を実装するのはすごく簡単です。
S式でSECDを表現するのも簡単です。
0800デフォルトの名無しさん
2011/02/18(金) 04:31:11現在のSchemeの多値の定義だと、
ttp://www.sci.u-toyama.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj.html#SEC65
ttp://practical-scheme.net/wiliki/wiliki.cgi?R6RS:%E7%BF%BB%E8%A8%B3:R6RS:5.8%20Multiple%20return%20values
言い過ぎじゃないんじゃないかな。
継続理解してないと、(values)って何よ? って話にならない?
0801デフォルトの名無しさん
2011/02/18(金) 04:45:37誤解させたのなら謝るけど、>>778に対するレス。
Schemeで継続を処理する抽象機械を作るのが楽という話と、
evalを継続の代替として使うのが楽という話は違うよね?
0802デフォルトの名無しさん
2011/02/18(金) 05:43:04SECDとか自作evalで作れますよって言う人と話が噛み合ってない
0803デフォルトの名無しさん
2011/02/18(金) 11:00:44表示的/操作的意味論理解してないと、Schemeを理解したと言えない
みたいな話?
0804デフォルトの名無しさん
2011/02/18(金) 16:20:01やはり実用はclだ
0805デフォルトの名無しさん
2011/02/20(日) 14:29:28.72gaucheがなかなか良さそうなので、
gaucheをusbメモリに入れて会社外でも使おうと思うのですが、
(出先のosはwindows xpとwindows7です)
gaucheを持ち運ぶには全ファイルをコピペすればいいのでしょうか?それとも何か特殊な設定を施すのでしょうか?
速さは求めておらず、想定しているのは
既に作成している.scmファイルを実行することだけです。
欲を言えば、gaucheのページに、スクリプトのポータブル化の話がどこかにあったと記憶していますが、
バイナリのサイズが数M程度で収まるなら、できればそうしたいのですが。
よろしくお願いします。
0806デフォルトの名無しさん
2011/02/20(日) 15:15:08.02USBメモリにOSを入れて、OSごとgaucheを持ち運んでる
0807デフォルトの名無しさん
2011/02/20(日) 23:25:28.650808デフォルトの名無しさん
2011/02/21(月) 12:57:41.62Windows版Gaucheはディレクトリツリーをそっくりコピーするだけで動いたはず。
インストーラから入れたならC:\Program Files\Gauche 以下ね。
その下のbin\gosh.exeかbin\gosh-noconsole.exeを起動すれば、
付属ライブラリはそっからの相対パスで探してくれる。
0809デフォルトの名無しさん
2011/02/22(火) 10:34:42.240810デフォルトの名無しさん
2011/02/22(火) 15:20:25.43(setf a #$ x+20*y*b$)
0811デフォルトの名無しさん
2011/02/23(水) 03:21:01.38Lisp は括弧のお化けみたいに言われるけど、初期は括弧とカンマのお化けだったのね。
Lisp I に比べたら Arc なんて括弧が無いに等しいな。
0812デフォルトの名無しさん
2011/02/23(水) 14:13:05.070813453
2011/02/24(木) 02:05:41.05http://www.tohoho-web.com/lng/200001/00010144.htm
0814デフォルトの名無しさん
2011/02/24(木) 02:46:29.040815デフォルトの名無しさん
2011/02/24(木) 14:36:15.230816デフォルトの名無しさん
2011/02/24(木) 14:53:08.810817デフォルトの名無しさん
2011/02/24(木) 15:00:50.860818デフォルトの名無しさん
2011/02/24(木) 15:32:57.870819デフォルトの名無しさん
2011/02/24(木) 15:53:51.320820デフォルトの名無しさん
2011/02/24(木) 18:40:44.39それは勘弁してください
0821デフォルトの名無しさん
2011/02/25(金) 00:53:34.90WiLiKi最新版にcode 要素、kbd 要素、ルビに関係するruby 要素諸々を追加したいのですがやり方が分かりません
公式サイトの「WiLiKi:リファレンスマニュアル」が「WiLiKi リリース0.4用」なので
もしかしたら最新版では要素を追加する機能が何かあるのかもしれませんが
よろしくお願いします。
0822デフォルトの名無しさん
2011/02/25(金) 04:01:47.17(define-reader-macro (ruby base text)
`((ruby (rb ,base) (rp "(") (rt ,text) (rp ")"))))
とか書いとけば
[[$$ruby 補毛 ほげ]]
でruby要素になるけど。
つかWiLiKiで質問したら?
0823デフォルトの名無しさん
2011/02/25(金) 11:40:59.43Gaucheのメーリングリストで聞けばいいと思うよ。
0824デフォルトの名無しさん
2011/02/25(金) 12:25:17.17だけど現時点ではとても整理されているとは言えないコードになってる。
コードの整理が出来てない状況ではドキュメント化は後回しになっても仕方ないだろ。
フォーマッタとかRSS生成とかは単独で使えるようになって欲しいしなぁ。
0825デフォルトの名無しさん
2011/02/25(金) 12:59:33.11とかどっかで言ってなかったっけ? 凄いうろ覚えだけど。
あと、reader/writer両マクロの仕様を変えるかも、みたいな事も言ってた気が。
$$と$がややこしい、みたいな話で。確かにあれは素で間違う。
とりあえず、WiLiKiの要望とかのページに書いとけば、返事もらえると思う。
0826デフォルトの名無しさん
2011/02/25(金) 13:20:26.04ただ、綺麗なコードでは無いにしても実際に明確なトラブルなく動いている (あるいは運用でなんとかできる) ものを修正するのは
重い腰が上がらないということはあるので、そういう要望をもっている人が結構いるというのを認識してもらうという意味ではたまに
むしかえすのもアリかな。
shiro さんのブログが今は WiLiKi ベースの独自システム使ってて、いずれ WiLiKi に盛り込む形でリリースする予定らしい。
そのときに整理するかもしれないな。
0827デフォルトの名無しさん
2011/02/25(金) 16:00:08.950829デフォルトの名無しさん
2011/02/27(日) 19:59:30.11時代の趨勢というやつだな。
svn は全部ディレクトリっていう概念がわかりやすくて簡単だけど、
動作が遅いっているのが致命的だったな。
それさえ改善されれば git より使い勝手のよい場面もありそうなんだが。
0830デフォルトの名無しさん
2011/02/27(日) 21:24:12.05SourceForge - wiliki/WiLiKi/summary
http://wiliki.git.sourceforge.net/git/gitweb.cgi?p=wiliki/WiLiKi;a=summary
0831デフォルトの名無しさん
2011/02/27(日) 21:30:04.79Git、Mercurial、Bazaarの分散三強で、ほとんどのケースをカバーできるだろうし。
0832デフォルトの名無しさん
2011/02/28(月) 14:41:51.820833デフォルトの名無しさん
2011/02/28(月) 16:19:23.41ChickenとかGambit、Bigloo、Ypsilonなんかも基本ひとりみたいだし、
LarcenyとかMoshも二、三人でやってるし、あんまり大勢ではないことが多いと思う。
そもそも、Schemeだと規模も割と小さいし。
Common LispのSBCL辺りは、割と多くの人でやってるっぽいけど。
0834デフォルトの名無しさん
2011/02/28(月) 18:49:14.95sxml まわりのライブラリも既存のものを取り込んでる。
だから全体をひとりで書いてるというわけではないけど、
大半はひとりで書いてるし、方針の決定も(ユーザーの意見は訊きつつも)ひとりの裁量でやってる。
「Gauche の開発者」と言えるのは shiro さんひとりだろうね。
0835デフォルトの名無しさん
2011/02/28(月) 20:03:38.51SBCL は CMUCL が少人数でやっていたのを、もっと皆でワイワイやろうぜっていう
感じで始まった気がする(気のせいかもしれないけど)。
CL だと Clozure も独りっぽいね。
0836デフォルトの名無しさん
2011/02/28(月) 20:33:10.24バランスもよく取れてていいね
0837デフォルトの名無しさん
2011/02/28(月) 20:38:17.39他のClozure Associatesの社員もたまにコミットしてるよ。元々MCLの開発者で作った会社だし。
バグレポートとかすると、大抵前述の二人が対応してくれる。
0838デフォルトの名無しさん
2011/02/28(月) 20:42:20.410839デフォルトの名無しさん
2011/03/01(火) 00:24:23.220840デフォルトの名無しさん
2011/03/01(火) 00:32:34.41ハードルがあまりにも高すぎて何から手をつけてよいのか分からないw
ときたま思うことだけど、純粋なlisper(?)と多言語に精通しているlisperの差はかなり大きい気がする
前者のコードが奇麗なのは勿論だけど、後者の方は組み立て方そのものが何か違う
見ている世界が違う、って感じかなあ
うまく言葉で言い表せないのが残念
0841デフォルトの名無しさん
2011/03/01(火) 00:33:16.510842デフォルトの名無しさん
2011/03/01(火) 01:14:26.66それと「名前」
goto や関数呼出しや大域脱出やその他諸々のフロー制御が継続ひとつで
説明が付くっていうのは自分では到底思い付けないけど、
Scheme を設計した先人はうまいこと抽象化したもんだと思うよ。
継続までいかなくても、 fold とか思い付いた奴は超偉いと思う。
map くらいならまぁ思い付くけど、
fold をひとつのパターンとして抜き出すのは優れた洞察力が必要だろう。
そういう抽象化された世界、メタな世界で考えることができて、
なおかつ低レベル (下層) の現実を忘れないっていうことが出来るようになるには
結局はそれが必要な場面に遭遇したことがあるという経験の積み重ねじゃないかな。
shiro 氏は東大卒ってだけあって天性の才能はあるかもしれないけど、実務で鍛えられた部分は大きいと思う。
数学に王道なしって言うけど、どんな分野でもそうだよね。
0843デフォルトの名無しさん
2011/03/01(火) 01:34:22.310844デフォルトの名無しさん
2011/03/01(火) 14:13:04.31Landinさんもほぼ同時にプラクティカルな視点から同じことを考えていた。
SECDマシンは継続を直接扱うことが出来る抽象機械だから。
その後も継続の研究は続いていて、中にはfirst class objectとしての研究もある。
Schmeの貢献はfirst class objectとして洗練した形で広く提供したこと。
Fold関数は昔から数学であるけど、
APL、BackusのFPの貢献が大きいと思う。
Backusさんはたった一人であんな事掘り下げちゃって凄い。
さすがTuring賞。
0845デフォルトの名無しさん
2011/03/01(火) 18:14:39.56逆に、堂々と出てきて良いはずの関数呼び出しの時はどこかに隠れている。
nonlocalと同じパターン。
今までlocalなんて一言もいわなかったのにいきなりnonlocalの話になる。
できる奴は、授業で習ってないはずの話になぜかついて行ける。
できない奴はここで落ちこぼれる。
0846デフォルトの名無しさん
2011/03/01(火) 18:34:45.360847デフォルトの名無しさん
2011/03/01(火) 21:06:12.610848デフォルトの名無しさん
2011/03/01(火) 21:41:44.24これはわかりやすい
なるほどそうだったのか
0849デフォルトの名無しさん
2011/03/03(木) 12:35:59.47Clojureはあるのに
0850デフォルトの名無しさん
2011/03/03(木) 13:17:45.150851デフォルトの名無しさん
2011/03/03(木) 14:28:10.290852デフォルトの名無しさん
2011/03/03(木) 18:12:46.92LispマシンのCPUコアもそんなもんだぞ
0853デフォルトの名無しさん
2011/03/03(木) 22:38:02.29make を初めたら必要なマクロ (GAUCHE_SIGNATURE とか) が定義されてないことになっててコンパイルできない。
俺の環境のせいかもしれんから一応だれか確認してくれんか?
0854デフォルトの名無しさん
2011/03/03(木) 22:39:24.84環境は Mingw な
0855デフォルトの名無しさん
2011/03/04(金) 00:20:32.52知っている範囲で、KawaやABCLを使ってる人と、Clojure使ってる人の数を比べると良いと思う。
それに、Clojureはもう別のLispだし、SchemeのKawaやCLのABCLとは立ち位置も違う。
あと付け加えるとしたら、Javaと連携したいときって、仕事の場面でのことが多そうだから、
そういうケースだと事例が表に出にくいはず。
0856デフォルトの名無しさん
2011/03/04(金) 01:09:50.79何か勉強になったぞありがとう
やっぱ論文読まなきゃ駄目だな
0857デフォルトの名無しさん
2011/03/04(金) 05:22:09.87config.statusはsubversion版で作られるのと同じなんで、configure自体はうまくいってる。
だが src/gauche/config.h.in の行末がCRLFだと、置換がうまくいかないようだ。
config.h.in の行末をLFに変換してやったら通るっぽい。
gitの設定次第だと思うがよくわからん。
0858デフォルトの名無しさん
2011/03/04(金) 07:29:33.34thx
改行の問題だとは気付かなかった。
0859デフォルトの名無しさん
2011/03/04(金) 19:01:06.81git config core.autocrlf false
これで改行変換が起こらなくなる。
その後に
git checkout .
でワークディレクトリのファイルを更新しなおしてOK
0860デフォルトの名無しさん
2011/03/04(金) 21:55:28.440861デフォルトの名無しさん
2011/03/05(土) 09:51:19.520862デフォルトの名無しさん
2011/03/05(土) 10:19:11.10夢の、現代版 Pinball Construction Set になる予定ということなんだよなぁ
0863デフォルトの名無しさん
2011/03/09(水) 02:21:46.200864デフォルトの名無しさん
2011/03/09(水) 02:34:57.00インタラクティブな環境と言う意味で
あとはこれ
http://swikis.ddo.jp/abee/17
0865デフォルトの名無しさん
2011/03/09(水) 17:36:35.910866デフォルトの名無しさん
2011/03/09(水) 20:53:53.95興味があるなら elisp のスレに行けば?
0867デフォルトの名無しさん
2011/03/09(水) 20:55:11.65いっぱいるよ
emacesnでelisp使えないやついない
というかelisp使えないならemacsにこだわる理由がほとんどないと思えばいい>>今時の編集緩急
0868デフォルトの名無しさん
2011/03/09(水) 21:48:31.640869デフォルトの名無しさん
2011/03/09(水) 22:50:40.230870デフォルトの名無しさん
2011/03/10(木) 15:22:38.28setfはあるよね
0871デフォルトの名無しさん
2011/03/11(金) 11:35:39.27Gaucheと一番互換性が高いのはどれなのでしょうか
0872デフォルトの名無しさん
2011/03/12(土) 01:01:02.71・ 石油と塩の備蓄 ( 仕分けパフォーマンスの生贄 )
・ 防衛費 ⇒ 自衛隊災害救出活動も縮小 ( 日本の自衛・防衛弱体化は民主党の継続悲願 )
・ スーパー堤防 ( 100年に1度の大震災対策は不要 )
・ 災害対策予備費 ( 生活保護枠拡大(母子家庭)の財源化 )
・ 地震再保険特別会計 ( 子ども手当の財源化 )
・ 耐震補強工事費 ( 高校無償化の財源化 )
・ 学校耐震化予算 ( 自民党が推進していた政策 )
・ 除雪費用 ( 蓮舫が東北地方整備局を目の敵に、結果は言わずもがな )
・ 八ッ場ダム ( 「河川は自然堤防のままが環境にやさしい」 )
「二百年に一度の地震に備えてお金を使う必要があるんですか?」
0873デフォルトの名無しさん
2011/03/12(土) 12:22:31.830874デフォルトの名無しさん
2011/03/12(土) 13:58:27.840875デフォルトの名無しさん
2011/03/12(土) 16:33:32.24俺って転載
Dead Over Lambda
0876デフォルトの名無しさん
2011/03/12(土) 20:10:27.40道具としたら不便すぎるelispで作れるってことは、実際何ででも作れるレベルの人だ
0877デフォルトの名無しさん
2011/03/14(月) 03:25:32.06Emacs固有機能のprimitive, bindingが素晴らしい。
0878デフォルトの名無しさん
2011/03/17(木) 07:37:17.180879デフォルトの名無しさん
2011/03/19(土) 08:02:08.76パッケージが無いってのが致命的に駄目言語だと思うんだけど>elisp
0880javascript
2011/03/19(土) 09:35:21.07呼んだ?
0881デフォルトの名無しさん
2011/03/19(土) 15:30:01.44シンボルの命名規則で何とかなってますが?
現実的にかなり大きなライブラリ集を管理できてるわけで。
0882デフォルトの名無しさん
2011/03/19(土) 17:56:00.95世の中パッケージ管理がサポートされてる言語の方が「はるかに:少ないよ
0883デフォルトの名無しさん
2011/03/19(土) 18:57:07.50何とかなってるか?例えば適当に navi2ch から見つけたこんな関数。
(defun navi2ch-multibbs-subject-callback (board)
(navi2ch-multibbs-get-func
(navi2ch-multibbs-get-bbstype board)
'subject-callback 'navi2ch-2ch-subject-callback))
パッケージがあれば多分、一行で書けるぞ?
(defun multibbs-subject-callback (board)
(multibbs-get-func (multibbs-get-bbstype board) 'subject-callback 'subject-callback))
0884デフォルトの名無しさん
2011/03/19(土) 19:31:40.98レベルの低いプログラマの意見は無視させていただきます。
0885デフォルトの名無しさん
2011/03/19(土) 21:37:55.70プロセス毎とかプロジェクト毎にシンボルがぶつからないならここまで問題にならんだろう。
0886デフォルトの名無しさん
2011/03/19(土) 22:09:51.81意外と問題にならないです。>>883はパッケージがあったゆえに、
名前参照が複雑になって問題になったケース
0887デフォルトの名無しさん
2011/03/19(土) 22:22:28.42なしでやってんだからほっとけばいいじゃん
0888デフォルトの名無しさん
2011/03/19(土) 22:31:46.94ifxemacs と書けるほうがちょっとは見易いはず。
0889デフォルトの名無しさん
2011/03/19(土) 22:38:55.31おれはしらん
0890デフォルトの名無しさん
2011/03/20(日) 11:50:50.78運用対処でなんとかするのと同じで
開発運用ユーザが少人数の場合だけじゃないの
0891デフォルトの名無しさん
2011/03/20(日) 21:51:53.15MapReduceみたいな並列計算が必要とされるようになるのかもしれん。
そのときは関数型言語も付随して地位向上といきたいね。
0892デフォルトの名無しさん
2011/03/21(月) 00:09:39.16とっくの昔に並列処理です。
0893デフォルトの名無しさん
2011/03/21(月) 10:08:40.03スマソ。恥じかいた。。
ただ、並列計算の知識を入れていく必要性が今後もっと上がるのは確かな気がする。
銀行に限らず、普通に扱うデータ量がめちゃくちゃ増えているんじゃないかと思うんだ。
0894デフォルトの名無しさん
2011/03/21(月) 10:44:11.56今時はどこでも並列計算はやってるけど、割と泥臭いノウハウの塊みたいだなー。
Google ではフレームワークのレベルで作り込まれててちょっとしたアイデアを試す
のが簡単に並列化できるみたいな話は聞いたことがある。
言語よりもフレームワーク、ライブラリの作り込みで対応できる部分が大きいんじゃないのかな。
並列化に注目が集まってもそれが関数型言語への注目へは繋がらない気がする。
0895デフォルトの名無しさん
2011/03/21(月) 11:12:20.69関数型じゃないですね
googleがそもそも関数型使ってないですし……
0896デフォルトの名無しさん
2011/03/21(月) 11:28:57.89何らかの並列計算ってことなら、現場で使われるようになってもう何十年、ってとこだろ。
Google的なアプローチは、大量のデータから何らかの傾向を抽出するには良いんだけど、
トランザクションを矛盾無くシリアライズしないとならない銀行のシステムとは全く性質が違うと思う。
勘定系は触ったことないけど、でかいデータベースの実装の中身いじってるんで。
Lispで書いてるけど低層は全然関数型っぽくない。
0897デフォルトの名無しさん
2011/03/21(月) 11:46:13.11銀行システムで MapReduce しようとしたら Map できるように切り分けるのが大仕事になりそうな予感。
0898デフォルトの名無しさん
2011/03/21(月) 12:04:14.99並列ソートマシンが想定しているケースを大幅に上回る
口座集中が起きたため。
ワーストケースを見積もって、落ちないように、
あるいは完全に処理できるように投資するかどうかの問題。
プログラミングパラダイム的なことでは解決できない。
まあ窓口閉まってから一気に勘定する業務のあり方を見なおせばいいんだが。
0899デフォルトの名無しさん
2011/03/21(月) 12:11:43.98みずほ側からそういう発表ってあったの?
0900デフォルトの名無しさん
2011/03/21(月) 12:24:27.780901デフォルトの名無しさん
2011/03/21(月) 12:42:49.34> 想定以上の件数に上った」と説明しており
ああほんとだ
0902デフォルトの名無しさん
2011/03/21(月) 12:54:44.12webシステム作った大手開発会社なんてものもあるしね
0903デフォルトの名無しさん
2011/03/21(月) 14:11:02.750904デフォルトの名無しさん
2011/03/22(火) 18:13:17.98textarea も submit ボタンも表示されない
0905デフォルトの名無しさん
2011/03/23(水) 00:58:56.00だんだんと進化しているようだ。
ttp://www.vim.org/scripts/script.php?script_id=2531
ttps://bitbucket.org/kovisoft/slimv/
ttp://img6.imageshack.us/img6/5104/slimvscreenshotx.png
ttp://img21.imageshack.us/img21/3949/slimvants.png
ttp://img18.imageshack.us/img18/5859/slimvcompl.png
0906デフォルトの名無しさん
2011/03/23(水) 15:22:19.25append2という関数の動作がよく理解できません。
もしよろしければ解説を願いいたします。
自分でよんだかぎりでは、
a_ と同じ構造の cons cell list を、新たに取得した cons cell
で構築し、末尾に b_ を接続しているように思われます。
この際 b_ が Atom の場合は終端が .対になる。
以上のような理解でよいのでしょうか?
----以下ソース----
//セルの型
typedef void* cell;
//cons cellの仕様
typedef struct {
cell car_e;
cell cdr_e;
} cons_t;
//機能:
// cons cell を取得し、car に car_、cdr に cdr_ を設定して返す。
cell cons( cell car_, cell cdr_ );
cell append2( cell a_, cell b_ ){
if( NIL == a_ ) return b_;
return cons( CAR( a_ ), append2( CDR( a_ ), b_ ) );
}
0907デフォルトの名無しさん
2011/03/24(木) 00:03:25.800908デフォルトの名無しさん
2011/03/24(木) 00:30:22.770909デフォルトの名無しさん
2011/03/24(木) 18:06:28.99レスありがとうございます。
ソースを実行して動作確認したところ普通に a_ と b_ を接続しているだけでした。
お手数おかけいたしました。
0910デフォルトの名無しさん
2011/03/24(木) 18:28:19.31ループ版があるとか?
それとも二引数のsubrは全部末尾に2付けるとか?
0911デフォルトの名無しさん
2011/03/24(木) 18:56:33.34ほかにも concat2 という関数などもあったので、Cの標準ライブラリと
名前が被るかもしれないと思って 2 をつけたのかもしれないですね。
0912デフォルトの名無しさん
2011/03/24(木) 19:13:49.02不定長引数版のappendはappend2をもとに定義されたりしてないかな。
0913デフォルトの名無しさん
2011/03/24(木) 19:19:21.460914デフォルトの名無しさん
2011/03/24(木) 21:17:38.390915デフォルトの名無しさん
2011/03/25(金) 12:44:38.22ECB
の進化は止まったままなのか
0916デフォルトの名無しさん
2011/03/29(火) 23:10:47.500917デフォルトの名無しさん
2011/03/29(火) 23:37:10.02Gauche-gtkも簡単にwin,linux両方で使えるようになればいいなぁ
0918デフォルトの名無しさん
2011/03/30(水) 00:17:08.75自分でビルドするのが面倒であれば諸々の拡張込みで提供しているこのサイトが便利かも。
http://gigo-ice.org/script/scheme/gauche/gauche-unstable/index.ja.html
スレッド対応パッチを適用していたりもする。
でも、あくまで非公式なものなのでトラブルがあっても泣かない強い人用。
0919デフォルトの名無しさん
2011/03/30(水) 14:53:14.880920デフォルトの名無しさん
2011/03/30(水) 23:00:08.93やっぱmingwじゃ簡単にはビルド出来ないんか
0921デフォルトの名無しさん
2011/03/30(水) 23:29:03.08根本的な部分では問題ないけど、ささいなひっかかりはいっぱい有る。
C の基礎やビルドツールの基本的な使い方くらい知ってればなんとかなるレベル。
面倒ではあるが。
0922デフォルトの名無しさん
2011/04/03(日) 00:20:03.160923デフォルトの名無しさん
2011/04/03(日) 00:40:04.61おお、とうとう lexbind が trunk に merge されたのね。
http://comments.gmane.org/gmane.emacs.devel/138010
これから Lisp 処理系を作る人は elisp 互換でも良いかも。
0924デフォルトの名無しさん
2011/04/03(日) 08:59:54.54これは歴史的だ
0925デフォルトの名無しさん
2011/04/03(日) 09:20:45.49これマジなの?それともエイプリルフールネタ?
0926デフォルトの名無しさん
2011/04/03(日) 09:54:03.91>ここまで lexbind が trunk にマージされた話題無し
>洒落た返信があったんで載せとく
>
>On 01/04/11 18:32, Stefan Monnier wrote:
>> Just a note that the lexbind branch has been merged into trunk,
>
>wow, very cool... waaaiiit...
>
>;;; -*- lexical-binding: t -*-
>(defun april-fools? ()
>(let ((a t)
>(check (let ((a nil)) (lambda () a))))
>(funcall check)))
>
>(april-fools?) => nil
>
>This is great news.
0927デフォルトの名無しさん
2011/04/04(月) 00:58:32.40lexical binding だと check には (lambda nil nil) が入るのか。
なるほど・・・
0928デフォルトの名無しさん
2011/04/04(月) 01:17:25.25評価される時の環境に応じて値が決まるから dynamic binding なのか。勉強になった。
0929デフォルトの名無しさん
2011/04/04(月) 10:32:40.55そうするとelispにもschemeのparameterizeみたいな機構が導入されるの?
(CLispはよく知らない)
0930デフォルトの名無しさん
2011/04/04(月) 22:47:36.61こっちにはちゃんと merge された記録があるのに、
http://article.gmane.org/gmane.emacs.diffs/109480
リポジトリの方は古いまま。
http://git.savannah.gnu.org/cgit/emacs.git/log/
開発用のリポと公開用のリポって時間差があるの?
0931デフォルトの名無しさん
2011/04/05(火) 00:36:11.78バージョン確認したらリポジトリ古くなかったし、スマソ。
0932デフォルトの名無しさん
2011/04/05(火) 00:50:42.480933デフォルトの名無しさん
2011/04/05(火) 01:06:52.63スレ汚しスマソ・・・
0934デフォルトの名無しさん
2011/04/05(火) 02:11:01.69fluid binding はいい加減もう古いよねえ
0935デフォルトの名無しさん
2011/04/05(火) 13:14:40.060936デフォルトの名無しさん
2011/04/05(火) 15:19:45.190937デフォルトの名無しさん
2011/04/05(火) 19:20:12.410938デフォルトの名無しさん
2011/04/05(火) 20:35:11.344/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
0939デフォルトの名無しさん
2011/04/05(火) 22:34:41.20長い時間掛かったけど、ここまで来るのは並大抵のくろうじゃあ無いよね
(setq before (lambda () "before"))
=> (lambda nil "before")
(setq lexical-binding t)
=> t
(setq after (lambda () "after"))
=> (closure (t) nil "after")
0940デフォルトの名無しさん
2011/04/05(火) 22:48:47.41なんで枕?
昔nilシャツってのはあったけど(Tシャツに対抗したらしい)
0941デフォルトの名無しさん
2011/04/05(火) 23:07:00.59今夜はT?それともNIL?
0942デフォルトの名無しさん
2011/04/05(火) 23:12:28.900943デフォルトの名無しさん
2011/04/05(火) 23:14:00.120944デフォルトの名無しさん
2011/04/05(火) 23:26:51.600945デフォルトの名無しさん
2011/04/06(水) 00:43:55.04elisp と CL の違いはここら辺によくまとまってるよ
http://www.gnu.org/software/emacs/manual/html_node/cl/Porting-Common-Lisp.html
http://hyperpolyglot.org/lisp
パッケージとかリーダーマクロとか、違いは色々ある
最近の CL の処理系はネイティブスレッドが使える物も多いしね
それでも基本的な所はかなりの部分で共通しているし、
今回 lexical closure も使える様になったから、これからの人は
Emacs Lisp で Lisp の勉強を始めても良いかもしれないね
0946デフォルトの名無しさん
2011/04/06(水) 02:43:01.77bzr は遅すぎるから早く直って欲しいわあ
http://comments.gmane.org/gmane.emacs.devel/138127
0947デフォルトの名無しさん
2011/04/07(木) 15:01:15.62LISPはアゲアゲだがSchemeは動かず。
0948デフォルトの名無しさん
2011/04/07(木) 16:42:36.990949デフォルトの名無しさん
2011/04/07(木) 23:17:05.850950デフォルトの名無しさん
2011/04/08(金) 00:09:34.000951デフォルトの名無しさん
2011/04/08(金) 02:08:24.760952デフォルトの名無しさん
2011/04/13(水) 14:33:35.690953デフォルトの名無しさん
2011/04/13(水) 15:54:12.69そりゃあ失礼したね色々とw
0954デフォルトの名無しさん
2011/04/13(水) 16:03:37.970955デフォルトの名無しさん
2011/04/13(水) 16:46:06.72以前はコンパイル結果を保存出来なかったようですが、
現在はバイナリを保存しておけるようになったのでしょうか?
0956デフォルトの名無しさん
2011/04/13(水) 17:18:38.720957デフォルトの名無しさん
2011/04/13(水) 17:40:55.710958デフォルトの名無しさん
2011/04/13(水) 19:41:01.98プリコンパイルはだいぶ以前からできてた。
後に仕組がかわったりはしたが。
とりあえず src/precomp を見ろ。
0959デフォルトの名無しさん
2011/04/13(水) 19:44:56.53了解です。
0960デフォルトの名無しさん
2011/04/13(水) 19:57:02.930961デフォルトの名無しさん
2011/04/13(水) 20:04:14.10リアルタイムローグライクで、モンスターのAIとして使ってみたいと思いました。
AIといっても反射型なので単純なものです。
0962デフォルトの名無しさん
2011/04/13(水) 21:37:29.65最近はスクリプト用途を重視するようになってる。
あまりインターフェイスが整備されていないしドキュメントもないので、結構面倒かも。
GC が問題にならないか気になる。
Gauche が使う領域だけが GC 対象になるの?
詳しい人、説明よろ。
0963デフォルトの名無しさん
2011/04/14(木) 08:57:45.57Gaucheでアロケートした領域を指すポインタをアプリ側で保存したい場合、
それがGCに見えるように工夫が要る。Gaucheのハッシュテーブルに登録しておくとか。
ケースバイケース。
このへんの話はGaucheに特別のものではなく、GCのある外部ライブラリを使う場合に
普通に考えるようなことを考えておけばOK。
ちゃんとしたドキュメントは無いけど、メモ的なものはどっかで見たような気がする。
examplesの中だったかな。
0964デフォルトの名無しさん
2011/04/15(金) 17:19:50.540965デフォルトの名無しさん
2011/04/15(金) 17:22:52.36暇つぶしにlispアンチに喧嘩をうってきた。
0966デフォルトの名無しさん
2011/04/15(金) 18:39:08.510967デフォルトの名無しさん
2011/04/15(金) 19:59:22.33声優スレに突撃してアレは痛い痛すぎる
93で返されてるし
0968デフォルトの名無しさん
2011/04/15(金) 20:26:35.55『初めて(/ω\) の人のためのLISP』という本を出したら買うのに
0969デフォルトの名無しさん
2011/04/15(金) 20:34:24.870970デフォルトの名無しさん
2011/04/16(土) 20:02:01.65ttp://trac.sacrideo.us/wg/attachment/wiki/WikiStart/r7rs-draft-1.pdf
0971デフォルトの名無しさん
2011/04/16(土) 20:08:10.38もう何年も経ってるんだよな
0972デフォルトの名無しさん
2011/04/16(土) 20:19:17.74Thanx!
>>971
あっと言う間だね
この調子だとオレSchemeがRnRS対応できる日が永遠に来ない
0973デフォルトの名無しさん
2011/04/16(土) 21:05:14.56recordがR6RSから大幅に簡略化されたり、byte vectorがblobに改名されて再導入されたり、
loadが復活して、レキシカルスコープに外部ファイルを展開するincludeが導入されたり、
libraryがmoduleに改名されたり、差別されてた手続きが適切なモジュール名で復権したり。
取り敢えず、読んで思ったことは、R6RSを黒歴史にしたがっているというか、
後方互換性とか取る気ないだろ、これw
0974デフォルトの名無しさん
2011/04/16(土) 21:24:28.07NOTES Language changes ってところ見たら Revised "5" report からの差分が書いてあった
R6RS 涙目w
0975デフォルトの名無しさん
2011/04/16(土) 22:12:41.47gaucheはどうするんだろうか?
0976デフォルトの名無しさん
2011/04/16(土) 22:27:46.510977デフォルトの名無しさん
2011/04/16(土) 23:07:00.05統一感に興味ない人はPerlでもなんでも得する。
0978デフォルトの名無しさん
2011/04/17(日) 10:14:46.570979デフォルトの名無しさん
2011/04/17(日) 12:51:23.24はやく死ねよ
0980デフォルトの名無しさん
2011/04/17(日) 19:09:36.95R6RS 2007
なのに、
backgroundに、1992までしかでてこないw
0981デフォルトの名無しさん
2011/04/17(日) 19:39:35.30やみくもに機能を追加した感がある
0982デフォルトの名無しさん
2011/04/17(日) 20:46:16.42それと、厳密で網羅的な仕様が欲しいなら、Common Lispを使えば良かった。
しかも、推進した側のPLTは、Racketで違う地平に旅だってしまったという。
0983デフォルトの名無しさん
2011/04/17(日) 22:36:12.06まぁ、今の内に変えないとって感じなのかもしれんが。
0984デフォルトの名無しさん
2011/04/18(月) 05:50:48.70無駄がなくて洗練されてるわ
0985デフォルトの名無しさん
2011/04/18(月) 15:06:47.44レス数が950を超えています。1000を超えると書き込みができなくなります。