Lisp Scheme Part31

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
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/
2デフォルトの名無しさん:2010/09/03(金) 19:44:19
>>1
乙です
3デフォルトの名無しさん:2010/09/03(金) 23:24:38
プログラミング言語 Scala 4冊目
http://hibari.2ch.net/test/read.cgi/tech/1275891974/
4デフォルトの名無しさん:2010/09/03(金) 23:35:52
変なの貼るな

とりあえずClojureのスレ
http://hibari.2ch.net/test/read.cgi/tech/1255533519/
5デフォルトの名無しさん:2010/09/04(土) 04:43:24
フッ… l!..|li|li                   ニ____ 
  |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 ∪
     |   ,、___,    ノニ≡            ; .: ダッ
    キ_二コ/   /三    三          人/!  ,  ;
  ニ     =/__/´三‐     ―_____从ノ  レ,  、

6デフォルトの名無しさん:2010/09/05(日) 00:55:04
(保守っとく)
7デフォルトの名無しさん:2010/09/06(月) 10:59:30
FreeBSDのlang/racket が32bitマシンだとメモリー足りないとか言われてmakeできない
8デフォルトの名無しさん:2010/09/06(月) 14:38:04
WindowsでSchemeを学習だけするってならRacketが一番しっくり来た
CLへの登竜門と考えてればGaucheだのEmacsだのウザったらしい。
9デフォルトの名無しさん:2010/09/06(月) 16:34:48
Emacs使えない人がCommon Lispって茨の道だと思うけどなあ。
IDEがあるAllegroやLispWorksは驚くほど高いよ?
EclipseとCUSP使う手もあるけど、SBCLしか使えないって話だし。

そもそもRacketのエディタ自体がEmacs互換のキーバインドだった気が。
10デフォルトの名無しさん:2010/09/06(月) 16:42:09
>>7
純粋にメモリが足りてない、っていうんじゃないなら、これかなー。

ttp://groups.google.com/group/plt-scheme/browse_thread/thread/a9eba7d1fd272e4b
11デフォルトの名無しさん:2010/09/06(月) 16:43:53
>>9
SBCLしか使えないって何か問題あるの?
そんなに処理系をたくさん使ってなにするの?
12デフォルトの名無しさん:2010/09/06(月) 16:56:43
>>11
SBCLはフットプリントが巨大な、いわゆる重量級の処理系で、
用途によってはマッチしないことがある。
そういうとき、CLISPとかの軽量な処理系に切り替えられない。

あるいは、Cと連携するためにECLを使いたい、
ARM向けに開発したいからClozure CLを使いたい、
SBCL以外の処理系で動作するか確かめたい、
みたいなケースもある。
13デフォルトの名無しさん:2010/09/06(月) 17:13:32
>>12
Thread関係Windowsでも使えるようになったかってのが一番でかかったりするんだけど、どうなった?
Thread使えないとhenchentootとかで遊べないのよ
14デフォルトの名無しさん:2010/09/06(月) 17:50:36
>>13
SBCLのWindowsでのスレッドサポートならお察しください。
Windowsでスレッドを使えるCommon Lispの処理系があるか、という意味なら、
CLISP、Clozure CL、ECL、商用処理系をご利用ください。
15デフォルトの名無しさん:2010/09/06(月) 18:52:43
とりあえずWindowsのEmacsライクエディタが使いにくいのと汚いので
仮想Linux上でEmacs使ってみるのもいいよ
16デフォルトの名無しさん:2010/09/06(月) 22:27:04
emacsはあれほどlispベースなのに、なぜ対応するかっこに飛ぶショートカットキー
が標準になってないんだろう。
viですらあるのに。
17デフォルトの名無しさん:2010/09/06(月) 22:52:42
>>16
何故そう思ったんだ?

18デフォルトの名無しさん:2010/09/06(月) 22:52:52
対応するかっこにdでも意味ないから
19デフォルトの名無しさん: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は順調に育っよい子
20デフォルトの名無しさん:2010/09/06(月) 23:38:21
対応する括弧に合わせるとハイライトされるとかがいいのにね
21デフォルトの名無しさん:2010/09/06(月) 23:39:24
>>19
> (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 になっている。
22デフォルトの名無しさん: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ってことですか
23デフォルトの名無しさん: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))))))))
24デフォルトの名無しさん:2010/09/07(火) 00:38:22
>>16
C-M-b、C-M-fは?
25デフォルトの名無しさん:2010/09/07(火) 00:53:12
%だけで移動できるようにしてるviの方が不思議。
そんなに使用頻度高いのだろうか。
26デフォルトの名無しさん:2010/09/07(火) 02:31:21
>>25
viは移動コマンドを編集のときに組み合わせるんで、
移動用に使用頻度が低くても、編集用に無いと困るんですよ。
d%とかy%とか。df)とかだとネストしてると無理なので。

この辺、編集コマンドが独立してるEmacsとは思想が違います。
27デフォルトの名無しさん:2010/09/07(火) 03:52:47
S式単位に対する操作が最初からあるEmacsはいいよね。
Vimならテキストオブジェクトで設定できそうだけどどうやるんだろ。
28デフォルトの名無しさん:2010/09/09(木) 20:56:06
こんなのあるんだな
ttp://d.hatena.ne.jp/Dubhead/20100312/p1
こんな風に評価できるとこだけ評価するlispなんて面白そう
29デフォルトの名無しさん:2010/09/10(金) 02:18:03
面白そうとか言う前に
やって面白いか試すんだ
30デフォルトの名無しさん:2010/09/10(金) 19:57:58
グサッ
31デフォルトの名無しさん:2010/09/11(土) 20:48:42
定数伝播と何が違うの
32デフォルトの名無しさん:2010/09/12(日) 12:09:07
土人にアスピリンが良く効いた、みたいな話じゃないの?
33デフォルトの名無しさん:2010/09/13(月) 00:42:44
上のリンクみてMaximaの優先順位のことを思い出した。
Maximaの演算子は
右側への結合性と左側への結合性とで分けて定義できる
どういうルールなのかまで把握出来てないが
あいつらは、かなりへんてこりん
34デフォルトの名無しさん:2010/09/13(月) 07:24:51
maxima言語的に変だけど一通り必要なものそろってるから便利だよ
35デフォルトの名無しさん:2010/09/13(月) 10:53:27
36デフォルトの名無しさん:2010/09/13(月) 15:22:52
37デフォルトの名無しさん:2010/09/13(月) 20:37:51
sick pee
38デフォルトの名無しさん:2010/09/13(月) 23:35:36
血尿とか?
39デフォルトの名無しさん:2010/09/14(火) 02:17:31
40デフォルトの名無しさん:2010/09/15(水) 22:26:09
DrRacket使ってみたけど分かりやすくてワロタ
WindowsでのScheme学習なら最高かもしれん
41デフォルトの名無しさん:2010/09/16(木) 00:41:42
PLTは教育用にも使われてるだけはある。
あとあの無駄に豊富なドキュメント群。
速度もそこそこでライブラリも多い方。
加えて日本語の扱いも問題ないとくれば。
42デフォルトの名無しさん:2010/09/16(木) 03:41:34
日本語問題なかった?
euc, utf sjis
全部いけた?
43デフォルトの名無しさん:2010/09/16(木) 08:43:20
>加えて日本語の扱いも問題ないとくれば。

これは日本語の扱いさえよくなれば〜
って意味でしょ
44デフォルトの名無しさん:2010/09/17(金) 01:40:29
ttp://docs.racket-lang.org/guide/encodings.html
ttp://docs.racket-lang.org/reference/bytestrings.html

何度も何度も出してる気がするが、上記参照。
EUC-JPでもUTF-8でもShift_JISでも好きなの使え。iconv使ってるから。
ああ、でもIDEの方は知らん。Shift_JISで多少引っ掛かったりするかもね。
45デフォルトの名無しさん:2010/09/17(金) 12:55:50
SXPathがperlとかからXPath使うのと比べてそんなに優位なように見えない
継続でも使って探索すると便利なのだろうか
46デフォルトの名無しさん:2010/09/17(金) 13:54:16
わざわざS式に直してるのにリストとして処理しないのはアホすぐる
47デフォルトの名無しさん:2010/09/17(金) 23:17:09
>>45
SXPath使うならPerlでXPath使うのと変わらんでしょ。
SXMLの利点は>>46も言ってるように、リストとして好き放題処理できること。
再帰でトラバースするもよし、部分木をmapやfoldで処理するもよし。
48デフォルトの名無しさん:2010/09/18(土) 01:49:27
sxpath には普通の関数を混ぜて書ける。
単に XPath をS式で表現しただけじゃないんだよ。
49デフォルトの名無しさん:2010/09/18(土) 01:54:17
SBCLのWindows版のスレッド対応が少し進んだ模様。
I/O周りでハングすることがあるとか言ってるけど、
そのうちマトモに動くようになることを期待。
http://clgtk2.wordpress.com/2010/09/16/related-project-sbcl-win32-threads/
50デフォルトの名無しさん:2010/09/18(土) 04:33:33
どんだけ時間掛けるんだよ
SBCLの面子は無能ばっかりなのかよほどメンテがし辛いのか
51デフォルトの名無しさん:2010/09/18(土) 08:01:37
>>50
そこまで言うなら、オマイが手伝ってやれよ。
52デフォルトの名無しさん:2010/09/18(土) 08:07:25
人は、自分と同じ人生を歩めない
だから、自分は自分の人生を生きていくのね・・・
53デフォルトの名無しさん:2010/09/18(土) 11:44:06
LISPを勉強すればSchemeへの移行は楽になりますか?
54デフォルトの名無しさん:2010/09/18(土) 11:53:34
>>53
単に「Lisp」と言ったときには Scheme を含むLisp 系言語全部のことがある。
文脈によっては CommonLisp のこともある。
マッカーシが論文に書いたやつのことだったりもする。

お前が言う Lisp とは何だ。
55デフォルトの名無しさん:2010/09/18(土) 12:02:53
>>54
一方言としての実装のことです。
56デフォルトの名無しさん:2010/09/18(土) 12:05:47
>>53
なります。
57デフォルトの名無しさん:2010/09/18(土) 12:08:33
defineは動的束縛と思っていいですよね?

(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))
58デフォルトの名無しさん:2010/09/18(土) 12:12:07
>>57
いいえ。
59デフォルトの名無しさん:2010/09/18(土) 12:23:31
本当ですか?
let 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になります
60デフォルトの名無しさん:2010/09/18(土) 12:40:44
defineは全てletrec相当と思ってください
61デフォルトの名無しさん:2010/09/18(土) 12:43:41
>>59
Schemeでもこうすれば30になる。

(define a 10)
(define (f x) (+ a x))
(let () (define a 20) (f a))
62デフォルトの名無しさん:2010/09/18(土) 12:55:59
>>56
レスどうも。参考になります。
63デフォルトの名無しさん:2010/09/18(土) 12:58:19
>>60 どういう意味でしょうか
OCamlで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はどうなのかなと思って書いたコード
自信が無いので聞いてみました
64デフォルトの名無しさん:2010/09/18(土) 12:59:31
R5RS では既に define された変数に再度 define すると set! と同じ意味であることになってる。
R6RS では明確に禁止されている。
65デフォルトの名無しさん:2010/09/18(土) 13:05:56
R6RS ではトップレベルでの定義と式は letrec* と同じ意味であることになってる。

(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)))

と同じ意味になる。
66デフォルトの名無しさん:2010/09/18(土) 13:11:13
let*とletrec*の違いって判る?
67デフォルトの名無しさん:2010/09/18(土) 13:11:33
>>64
なるほど、ありがとうございます。
先のhaskell etcも、同じく同じものを二度定義するのはエラーなので
「インタプリタ」という但し書きを付けてます
インタプリタで同じ変数を何度も定義出来ないのは不便すぎますしね

最初のコードでコメントアウトしてある
(set! a (+ a 10))ですが
これと入れ替えても動的束縛される結果になるので
defineの動作は動的束縛のように見えます
(自分の環境はR5RSです)

>>65
とても参考になります。
R6RSの処理系入れてないので
この動作を頭の中で考えてみます
68デフォルトの名無しさん:2010/09/18(土) 13:12:27
>>66 わかってないのでこれから調べますw
69デフォルトの名無しさん:2010/09/18(土) 13:32:58
全てのlet〜はlambdaとset!に置き換えられるから、
その展開形を見ると一発で判るんだがな。
let系が全部マクロで実装されてて、
macroexpandできる処理系が手元にあればいい。
70デフォルトの名無しさん:2010/09/18(土) 13:43:36
let rec*の箇所読みましたが、
そもそも<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インタプリタは実際の所、一貫してますね
71デフォルトの名無しさん:2010/09/18(土) 13:54:28
72デフォルトの名無しさん:2010/09/18(土) 14:56:29
全然関係ないけど

(letrec ((a b) (b 3)) a)
(letrec ((a (list a b)) (b 3)) a)

これらはエラーなんだけど、
ちゃんと意味解析のエラーではじく処理系ってあるかいな?
特に後者のケースで。
手抜き処理系だと良くて実行時エラーか、
評価順序の関係でエラーにならなかったりする。
73デフォルトの名無しさん:2010/09/18(土) 18:56:14
>>72
oeditのマクロ
74デフォルトの名無しさん:2010/09/19(日) 05:04:03
>>73
実行時エラーっぽいけどちゃんとエラーにはなるね
内部的にunboundな属性でも持ってるんだろうか
75デフォルトの名無しさん:2010/09/19(日) 09:50:54
>>63
そのコードは意味的にこれと同じ
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 で禁止にしたのは良い選択だと思う。
76デフォルトの名無しさん:2010/09/19(日) 11:08:22
てことは、HaskellやOCamlのインタプリタの関数定義での動作を
動的束縛と考えるのは変ですね
インタプリタで定義した順に、inでスコープが作られているって考えると
全て静的束縛で説明出来るわけか
77デフォルトの名無しさん:2010/09/20(月) 12:38:17
>>75をlambdaに直したやつ
((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
78デフォルトの名無しさん:2010/09/20(月) 23:39:42
http://twitpic.com/2dwbre

Lispだと「リスプラス」とでもなるのかなw
79デフォルトの名無しさん:2010/09/22(水) 22:07:52
飲みlispってたので、サブタイトル思いついた
carで出会って、cdrで深まり、consする
80デフォルトの名無しさん:2010/09/22(水) 22:13:57
lisplusplusplusplus
LiS#
81デフォルトの名無しさん:2010/09/22(水) 22:59:27
もっと面白いこと書けよ
82デフォルトの名無しさん:2010/09/22(水) 23:02:39
人間ってよ血液型何種類か知ってる?4種類だろ。

じゃ馬。馬は何種類か知ってる?3兆wwwwwwwwwwwwwwwwww

ちなみにゴリラはみんなB型だってwww少なくねwwwww 全部自己中だよゴリラwwwwww

ゴリラってよ、あれ通称ってこと知ってんだろ。

あれの本名、つまり学名ってなんだか知ってる?知ってる?

ゴリラ・ゴリラだってwwwww

まんまじゃねえか。まんまじゃねえかおい。それがローランドゴリラだとなんだか知ってる?

ゴリラ・ゴリラ・ゴリラだってwwwwwwwwwちょwwおまwwwww
83デフォルトの名無しさん:2010/09/23(木) 00:53:29
そういうテンションで毎日を過ごせたらなあ
84デフォルトの名無しさん:2010/09/23(木) 02:37:21
なごんだ
85デフォルトの名無しさん:2010/09/23(木) 07:54:55
ウマの血液型って人類総数より多いのか
86デフォルトの名無しさん:2010/09/23(木) 08:46:55
つまり彼はチャーチ数について語りたかったのでは
87デフォルトの名無しさん:2010/09/24(金) 08:13:02
88デフォルトの名無しさん:2010/09/24(金) 12:19:32
sxml shtmlがあるならslatexはないのか?
89デフォルトの名無しさん:2010/09/24(金) 14:11:41
gladeみたいなやつ希望
もちろんwindowsで使えるやつ
90デフォルトの名無しさん:2010/09/24(金) 21:11:47
>>87
まるちうざい
91デフォルトの名無しさん:2010/09/24(金) 21:44:15
「あと、たとえば『はじまりすぷ』みたいに、『○○りすぷ』って言葉を繋げる遊びが
Twitterとかでも流行っています(笑)」

とりあえず括弧の使い方がなってない
92デフォルトの名無しさん:2010/09/24(金) 21:46:42
鳴ってないとは言うけど、自然言語をS式に出来るの?
93デフォルトの名無しさん:2010/09/24(金) 22:47:34
おわりすぷ
94デフォルトの名無しさん:2010/09/24(金) 23:37:04
もっと面白いこと書けよ
95デフォルトの名無しさん:2010/09/25(土) 00:46:50
96デフォルトの名無しさん:2010/09/25(土) 02:12:25
LISPかschemeで型推論が入れた処理系ありませんか
97デフォルトの名無しさん:2010/09/25(土) 06:23:51
PLTにtyped schemeとかいうのがあったような気がする
98デフォルトの名無しさん:2010/09/26(日) 00:02:22
型推論じゃないけれど、ここはおもしろ系がそろってる。
http://groups.csail.mit.edu/mac/users/dae/
99デフォルトの名無しさん:2010/09/26(日) 00:26:50
おまけじゃなくて、そういう実装ってのはないんですかね
100デフォルトの名無しさん:2010/09/26(日) 00:29:20
何のために型推論するの?
101デフォルトの名無しさん:2010/09/26(日) 02:14:34
そこに型推論があるから(キリッ
102デフォルトの名無しさん:2010/09/27(月) 14:53:43
readable Cに変換するのに型推論あるとすごいうれしい
103デフォルトの名無しさん:2010/09/27(月) 15:47:51
Gmbit−Cが最速ってことでいいのか?
stalin遅い
104デフォルトの名無しさん:2010/09/27(月) 19:41:23
そういやchickenって今どうなってんだっけ?
105デフォルトの名無しさん:2010/09/28(火) 03:02:41
>>104
それなりに堅実に発展してるよ。
http://gazette.call-cc.org/
106デフォルトの名無しさん: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"))はエラーとか
107デフォルトの名無しさん: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)) ; エラー:リストでない

こういう風に実行前に検出するとか
まあこの例では定数畳み込みやってたら判ることだろうけど
108デフォルトの名無しさん:2010/09/28(火) 13:59:02
maximaでクロージャーできない
109デフォルトの名無しさん:2010/09/29(水) 01:04:41
f(a):=lambda([],block([],a:a+1,a));b:f(0);b();b();b();
を実行するとa+1,a+2,a+3みたいになってしまうのな

久しぶりにmaximaスレを探してみれば、
シミュレート版も数学版もDAT行きか
110デフォルトの名無しさん:2010/09/29(水) 12:41:09
鯖が飛んだんじゃなかったっけ?
111デフォルトの名無しさん:2010/09/29(水) 20:29:15
流れ読まずにすみません。
LittleとSeasonedの間には結構ギャップありますよね?
焦らずに巻末の推薦図書読んだ方が良いのかな。
112デフォルトの名無しさん:2010/09/30(木) 00:26:40
型推論と言えば、Qi
http://lispuser.net/commonlisp/qi.html
113デフォルトの名無しさん:2010/09/30(木) 00:32:16
114デフォルトの名無しさん:2010/09/30(木) 17:06:32
sxm shtml slatex
C in Sexp

次は何がくるんだろな
115デフォルトの名無しさん:2010/10/01(金) 19:49:14
sumimさんナイスw
rubyはlispじゃないよな
116デフォルトの名無しさん:2010/10/02(土) 19:48:16
ひょっとしてGaucheってSnow Leopard で動かない機能が結構あったりする?
c-wrapperがmacportで動かない
117デフォルトの名無しさん:2010/10/02(土) 21:24:45
>>116
http://blog.livedoor.jp/naoya_t/archives/51324267.html#more

修正は必要ながら、根本的な部分は問題ないはず。
動かなかったとしても Gauche の側の責任ではないな。
118デフォルトの名無しさん:2010/10/03(日) 02:12:49
>>117
他の人も動いてないことがわかってよかったです
危うくいろいろ再インストールするとこだった
119デフォルトの名無しさん:2010/10/04(月) 05:00:40
>>116-118
MacでGaucheの挙動が変なのはMacのgccの独自機能が原因らしい
Macのgccには関数プログラミングの機能が強引に組み込まれてるそうな
120デフォルトの名無しさん:2010/10/04(月) 08:23:52
GCDがなんかやらかすのか
121デフォルトの名無しさん:2010/10/05(火) 17:42:14
必須 feature ってわけじゃないんだけど、CommonLisp の loop で
C のループ系構文の continue 相当の動作ってさせられないものかな?
named ラベルで go しようとしてもできないし。
122デフォルトの名無しさん:2010/10/06(水) 13:51:39
全然書き込みないな
また規制か
123デフォルトの名無しさん:2010/10/06(水) 15:06:05
>>121 そういうのは継続で出来ると思う
gaucheには最初から入ってるけど、これは使えないかな
(define-syntax let/ec
(syntax-rules ()
[(_ name body ...)
(call-with-current-continuation (lambda (name) body ...))]))
124デフォルトの名無しさん:2010/10/06(水) 18:24:10
>>123
CommonLisp の loop って書いてんのになんで gauche の話になってんの
125デフォルトの名無しさん:2010/10/06(水) 18:31:24
loopで画像みたいなx y 配列内を、周辺3x3走査しながらまわすのめんどくさいな
126デフォルトの名無しさん:2010/10/06(水) 19:00:44
質問です。

Schemeではネームスペースはどのように作るものなのでしょうか?
127デフォルトの名無しさん:2010/10/06(水) 19:16:14
Javaのパッケージのような名前空間を作るもののことを探してるんじゃないかと思うが、
標準はない。
128デフォルトの名無しさん:2010/10/06(水) 19:35:21
レスありがとうございます。

ずばりC++やJavaのようなネームスペースをつくりたとおもっておりました。
標準ではないとのことですが、自作できるという事で良いのでしょうか・・・?
129デフォルトの名無しさん:2010/10/06(水) 19:46:52
個々の処理系にあるシステムを使うのがいいと思う。
たとえばGaucheではモジュールと呼んでいる。
130デフォルトの名無しさん:2010/10/06(水) 19:49:55
なるほど、ありがとうございます。
131デフォルトの名無しさん:2010/10/06(水) 20:00:04
そういえば、R6RSでモジュール性を導入するために構造的な操作的意味論を
採用したはずだけど、具体的にどうやってモジュラな処理系にしてるんだ?
132デフォルトの名無しさん:2010/10/06(水) 20:34:56
あれもしかしてR6RSには名前空間の機能があったっけ?
133デフォルトの名無しさん:2010/10/06(水) 22:18:12
>>128
前スレで、名前空間的なものを作るマクロが話題になってたから参考にしてみれば?
↓この周辺
http://www.nihongodeok.net/thread/hibari.2ch.net/test/read.cgi/tech/1270897776/#message_980
134デフォルトの名無しさん:2010/10/07(木) 01:32:09
まあありゃただのお遊びですがね
階層化もないし空間自体ないし省略もできない
135デフォルトの名無しさん:2010/10/07(木) 11:55:45
http://d.hatena.ne.jp/higepon/20100823/1282571102
UCL Package

がGaucheでも動くことはあるのだろうか
136デフォルトの名無しさん:2010/10/08(金) 10:55:36
UCL は R6RS が前提だからなー。
Gauche が R6RS モードを実装すればそういうこともあるんじゃね?
137デフォルトの名無しさん:2010/10/09(土) 01:39:24
>>121
continueそんなに使いたいときある?
unless節じゃ駄目なの?
138デフォルトの名無しさん:2010/10/09(土) 03:21:56
名前空間を使いたければCommon Lispを使えば良いじゃない。

>>132
importで同様の処理ができる。インポートする束縛にprefixを付けたり、renameしたり。
R6RS libraryが実質的な名前空間。
139デフォルトの名無しさん:2010/10/11(月) 03:56:57
http://karetta.jp/article/blog/oneline/008183
を実行しようとしたら、
*** ERROR: Autoloaded symbol ~$ is not defined in the module gauche.procedure

とエラーが出る。
(hash-table-keys (module-table mod))
のリストに ~$ が含まれることが問題っぽいのだが、対処法が分からない。
どうしたら良いだろ?
140デフォルトの名無しさん:2010/10/11(月) 09:38:56
>>139
たぶんこれと関係がある。
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche:Bugs#H-2vmko8525la0k
svn trunk では改善されてるはず。
141デフォルトの名無しさん:2010/10/11(月) 12:49:13
>>140
無事動きました、超サンクス。

「~$」って検索できない文字だから困ってたんだよね。
142デフォルトの名無しさん:2010/10/11(月) 12:51:21
と思ったけど、アレ? クラス名が出ない……

まこっから先は自分で何とかします。ども。
143デフォルトの名無しさん:2010/10/11(月) 14:03:46
月、car、水、木、金、、
144デフォルトの名無しさん:2010/10/11(月) 14:36:09
引磬の音 car ん
145デフォルトの名無しさん:2010/10/11(月) 19:51:11
あ〜ん、そこはダメ、eq〜〜〜
146デフォルトの名無しさん:2010/10/11(月) 20:22:10
cdrらねぇこと書いてんじゃねぇぞ
147デフォルトの名無しさん:2010/10/11(月) 20:28:11
eqの早すぎじゃなイcar
condはもっと我慢するでゲソ
148デフォルトの名無しさん:2010/10/12(火) 11:08:02
書いたラ、ムダだった。 せっか cdr ったのに。 思わず car っときた。
メシを quote したら cond は饅頭しかなかった。 甘い unquote 皮の比率が絶妙。
149デフォルトの名無しさん:2010/10/12(火) 11:15:13
何?この流れ
150デフォルトの名無しさん:2010/10/12(火) 12:07:20
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))

S式の閉じ括弧の枚数を数えるプログラム教えてください。

仕様は
・閉じ括弧が現れたらその後ろに))))) ; 枚数
 のようにコメントを入れる。
・既存のコメントやインデントは残す。
・開き括弧と対応してなくても動く。
です。
151デフォルトの名無しさん:2010/10/12(火) 12:11:54
宿題は自分でやろうな。
152デフォルトの名無しさん:2010/10/12(火) 13:04:38
括弧を「枚」で数えるのが新しいと思った。
153デフォルトの名無しさん:2010/10/12(火) 13:34:42
いちまーい、にまーい
154デフォルトの名無しさん:2010/10/12(火) 13:58:17
無理なんですね。
判りました。
155デフォルトの名無しさん:2010/10/12(火) 14:15:31
コード=データなのになあ・・・
156デフォルトの名無しさん:2010/10/12(火) 15:48:04
>>149
例の声優グループがそんなこと言ってたりしたら・・・
157デフォルトの名無しさん:2010/10/12(火) 16:19:54
「閉じ括弧」というのは「連続する閉じ括弧」ってこと?
こういうのはどうなんの? どこにコメント入れるの?
(define (hoge huga) hage)
括弧が対応してなければ、S式とは言えない。 冒頭の「S式の閉じ括弧」に矛盾する。
「動く」というのはどう動けばいいの? エラーとして報告する動作でもいいの?
使うプログラミング言語は何がいいの? このスレだから Lisp 系を想定してはいるんだろうけど。
158デフォルトの名無しさん:2010/10/12(火) 17:03:13
その辺はよきにはからえ、よ・・・
159デフォルトの名無しさん:2010/10/12(火) 17:06:04
あー、(define (hoge huga) hage) の場合はね、

(define (hoge huga) hage) ; 2枚 ぴったりです
define (hoge huga) hage) ; 2枚 1枚多いです
(define ((hoge huga) hage) ; 2枚 1枚少ないです
でいいよ?
160デフォルトの名無しさん:2010/10/12(火) 17:09:53
行単位で括弧の数を数えるだけなのか
161デフォルトの名無しさん:2010/10/12(火) 17:47:20
えらく行志向の仕様だな。改行フリーなのに。
162デフォルトの名無しさん:2010/10/12(火) 18:19:56
仕様の説明もまともにできないんじゃ
プログラムも書けないよな
163デフォルトの名無しさん:2010/10/12(火) 18:20:33
自分が何を聞きたいのかまで他人任せのアホは放置でいいよ
164デフォルトの名無しさん:2010/10/12(火) 18:29:11
行単位とは書いてないけど・・・?
165デフォルトの名無しさん:2010/10/12(火) 18:32:14
そもそもお前ら放っておくと
くらだん駄洒落しか書かねーんだもん
ネタ提供してやってんだから
御託並べずにさっさと書けっての
166デフォルトの名無しさん:2010/10/12(火) 18:34:50
だったらもう少し面白いネタをたのむ。
167デフォルトの名無しさん:2010/10/12(火) 18:37:11
よーし、お父さんがんばっちゃうぞー
168デフォルトの名無しさん:2010/10/12(火) 18:41:51
>>166
まてまて、ネタの質にまで言及するならお前が提供しろよ
お門違いなんだよ
もう答えなんかとっくに出来てんだよこっちは
数分でできるだろこんなの
お前らどんだけできるの?って所を俺に見せつけてやろうよ
前向きに考えろよクズどもが
169デフォルトの名無しさん: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)
170デフォルトの名無しさん:2010/10/12(火) 21:29:23
>>159
じゃあこれは?
(define (hoge
huga) hage)

こうなるのか?
(define (hoge ; 0枚 2枚少ないです
huga) hage) ; 2枚 2枚多いです

171デフォルトの名無しさん:2010/10/12(火) 21:41:16
>>169
ちがうよー
こんなとこで目的を履き違える無能を晒してどうするの

>>170
ちがうよー

・閉じ括弧が現れたらその後ろに))))) ; 枚数
 のようにコメントを入れる。

の文章読めないの?
アホなの?
172デフォルトの名無しさん:2010/10/12(火) 21:48:40
バカなの?
173デフォルトの名無しさん:2010/10/12(火) 21:50:24
別にいじわる問題とかじゃないからね?

(define (hoge
huga) hage) ; 2枚 ぴったりです

(define (hoge
huga) ; 1枚 1枚少ないです
hage) ; 2枚 ぴったりです
174デフォルトの名無しさん:2010/10/12(火) 21:53:05
2chにコピペで貼るには重い。それにもう自分で答え書いたんでしょ?いいじゃんそれで。
175デフォルトの名無しさん:2010/10/12(火) 21:53:27
meadow をお使いの方はおられませんか?
「プログラミング Gauche」 を参考にして、meadow をインストールしたのですが、M-C-f, M-C-b 等での S 式単位のカーソルの移動ができません。
(scheme-other-window は実行できます。)
これは、そういうものでしょうか?それとも手を加えれば S 式単位のカーソルの移動もできるようになるのでしょうか?
176デフォルトの名無しさん:2010/10/12(火) 21:55:06
いじけるなよもー
codepadとか知らんのか?
情弱とか言わせんなよもー
177デフォルトの名無しさん:2010/10/12(火) 22:05:47
>>171
閉じ括弧が無い場合はわかった。
じゃあ↓このケースはこれでいいか?

(define (hoge huga) ; 1枚 1枚少ないです
hage) ; 2枚 ぴったりです
178177:2010/10/12(火) 22:07:34
おっといきちがい。 >>173 のケースで大体理解した。
179デフォルトの名無しさん:2010/10/12(火) 22:08:15
で、言語は Scheme でいいのか?
R5RS 範囲内ならいいか?
180デフォルトの名無しさん:2010/10/12(火) 22:16:00
複数の式にまたがる場合についての仕様も曖昧じゃね?
これでいいの?

(define (hoge huga) ;; 1枚 1枚少ないです
hage) (define (hoge huga) ;; 2枚 1枚少ないです
hage) ;; 2枚 ぴったりです
181デフォルトの名無しさん:2010/10/12(火) 22:17:44
>>176
俺はコードがあるスレのほうがらしくて好きだから書いただけで
お前のためにやった訳じゃない
お前が書いたコードを張るならも一つ書く
そうすれば仕様も曖昧じゃないし、みんなコードを書いてくれるさ
さもなければお前はcons
182デフォルトの名無しさん:2010/10/12(火) 22:25:04
>>179
LISP系ならなんでもいいよ

>>180
そんな書き方する馬鹿は知らんけど
その理解で合ってるよ>>177-178

>>181
もういいよお前は
183デフォルトの名無しさん:2010/10/12(火) 22:25:48
>>175
meadowは使ってないけど
M-C-f forward-sexp
M-C-b backward-sexp
にあたる機能があるならキーバインド設定で使えるんじゃないかな?
M-x(Alt+xね)のあとにforwardとか自分で打ってタブで補完してみたら、あれば出る

関数があるなら.emacs相当のファイルを設定すればいけると思う
外してたらごめん
184デフォルトの名無しさん:2010/10/12(火) 22:30:24
(define (^q^)
(display " 〜|")
(display "〜")
(newline)
(display " ((")
(display " ))"))
185デフォルトの名無しさん:2010/10/12(火) 23:01:08
S式ではなく文字列を読み込んで閉じ括弧を数えるのか?
なんかどっかの自称天才デベロッパーがlispのreadの作り方を知ろうとしてるように見えるな
186デフォルトの名無しさん:2010/10/12(火) 23:09:04
カウントのスタートは一番外側の開き括弧からだと思っていた。
>>180 がテストケースとして OK なら、仕様をまとめると
「最後に遭遇した一番外側の開き括弧からの閉括弧の数と、
それを除いた現在行の閉じ括弧の数を足したものを行の最後にコメントとして付け加える。
但し、閉じ括弧が存在しない行については例外とする。」
ってことでいいかな。
187デフォルトの名無しさん:2010/10/12(火) 23:12:24
>>186
最後に遭遇した最も外側の開き括弧から (それ自体を含む) 開き括弧の数に対して閉じ括弧がいくつ不足するか?
ってのも必要だったな
188デフォルトの名無しさん:2010/10/12(火) 23:20:17
(define ('A`))
189デフォルトの名無しさん:2010/10/12(火) 23:40:24
>>184
俺への問いかけですか?なんか怖いなー
エスケープ処理とかはセルフサービスでお願いしますよ

>>185
readってあんま関係ないだろこれ
何いってんの?

>>186-187
1行にまとめるなら、
開きと閉じ括弧両方カウントして、閉じがある行で枚数コメ挿入ね
190デフォルトの名無しさん:2010/10/13(水) 00:57:30
>>189
> 1行にまとめるなら、
> 開きと閉じ括弧両方カウントして、閉じがある行で枚数コメ挿入ね

それじゃ説明になってないだろうが…。
「カウント」とは何をカウントするのかってことで >>180 のケースを説明しようとしてるのに。
191デフォルトの名無しさん:2010/10/13(水) 01:07:09
何かこういう人定期的に来るね。
ネタ提供とか嘯くなら、思春期の子みたいに無駄に煽るの止めようよ。
ゲハとかじゃないんだから、そんな殺伐とさせてどうすんのよ。

確かにああいう駄洒落しか書き込まないのは、俺もどうかと思うけど。
QuicklispとかiSchemeとか旬の話題色々あるのにさ。
192デフォルトの名無しさん:2010/10/13(水) 01:24:24
ちんこ(笑)の煽りに付き合う必要なし
haskellは諦めたのか?
193デフォルトの名無しさん:2010/10/13(水) 02:22:48
煽ったら答えがすぐ出てくるという話を信じてるんだろうさw
194デフォルトの名無しさん:2010/10/13(水) 02:24:52
質問者は名前欄に何か入れろ

相手をする奴は最後まで面倒を見ろよな
レスアンカーつけて
195デフォルトの名無しさん:2010/10/13(水) 12:35:28
手元のエディタでSchemeのシンタックスハイライトしたくて仕様読んでるんだけど、
> <peculiar identifier> ==> + | - | ...
の ... って、文字通りドット3つの並びと解釈するんですかね?
196デフォルトの名無しさん:2010/10/13(水) 12:45:32
はい
ドット3つの並びです
197デフォルトの名無しさん:2010/10/13(水) 14:07:30
そのへんの書き方って微妙だよな。
マクロのパターンの書き方のところはこんな風になってる。

(<パターン> ...)
(<パターン> <パターン> ... . <パターン>)
(<パターン> ... <パターン> <省略符号>)
#(<パターン> ...)
#(<パターン> ... <パターン> <省略符号>)

ここでの ... は文字通りの ... ではなくて繰り返しの意味で、
<省略符号> の方が字句としては ... だったりする。
198デフォルトの名無しさん:2010/10/13(水) 14:51:47
<letter> → a | b | c | ... | z ってのもあるし、まぁまぎらわしいといえばまぎらわしい
199デフォルトの名無しさん:2010/10/13(水) 14:58:48
ネタはいらない。後で過去ログ検索するときゴミが増える
200デフォルトの名無しさん:2010/10/13(水) 15:06:42
>>197
繰り返し? ということは、
<peculiar identifier> は [+-]+ ?
201デフォルトの名無しさん:2010/10/13(水) 15:19:24
>>200
いやいや。 <peculiar identifier> は >>195 の解釈でいいんだよ。
202デフォルトの名無しさん:2010/10/13(水) 15:22:04
>>150
Gauche用。

(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)))))))))

文字や文字列のリテラルとかコメント中に括弧が有った場合も括弧として
認識してしまうんだけど、とりあえずもうめんどくさくなったからここまでで投下するわー。
203デフォルトの名無しさん:2010/10/13(水) 18:56:05
(define a 1234)

では、正しいのはどれ?

(1)「aが1234を束縛している」
(2)「1234がaに束縛されている」
(3)「1234がaを束縛している」
(4)「aが1234に束縛されている」

(1)(2)が正しいように思い込んでる。
204デフォルトの名無しさん:2010/10/13(水) 19:02:35
>>202
いいよいいよー
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))
205デフォルトの名無しさん:2010/10/13(水) 19:03:39
((= state STATE_DQUOTE_ESC)
(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))
206デフォルトの名無しさん:2010/10/13(水) 19:04:33
で、こんなもの(>>204-205)作って何をするのかっていうと・・・

'((((((((((((((((((((((((((((((((((((
おまえは今まで使った括弧の枚数を覚えているのか?)))))))))))))))))))))))))))))))))))) ; 157枚 ぴったりです

とかで遊ぶだけですおwwww
207デフォルトの名無しさん:2010/10/13(水) 20:05:19
>>203
束縛が作られてもオブジェクト (値) の側は他の束縛を作ることもできるのに対し、
変数にとってはその束縛が唯一無二のものだってことを意識すると
「オブジェクトが変数を束縛している」ってことに納得できる。

R5RS だと 3.1 あたりに記述があるね。
「誤用しがちだけど、別に大して混乱もしないよ」ってことも書いてあるからぶっちゃけ気にしないで問題ないと思う。
208デフォルトの名無しさん:2010/10/13(水) 20:16:16
>>206
地味に便利だな。
209デフォルトの名無しさん:2010/10/13(水) 20:20:19
>>207
つまり、>>203の(1)(2)(3)(4)全部おkってこと?
210デフォルトの名無しさん:2010/10/13(水) 20:43:17
>>209
正しくは (3) (4) だけど、(1) (2) の言い方をしても誤解する余地はあんまり無いよって話。
211デフォルトの名無しさん:2010/10/13(水) 20:53:22
えー?
212デフォルトの名無しさん:2010/10/13(水) 21:05:06
束縛を受動的と捉えた場合(3)(4) ; 2枚 ぴったりです
束縛を能動的と捉えた場合(1)(2) ; 4枚 ぴったりです
213デフォルトの名無しさん:2010/10/13(水) 21:28:34
結局 <peculiar identifier> は正規表現だとどうなるんでしょうか?
214デフォルトの名無しさん:2010/10/13(水) 23:08:23
>>213
こんな感じか?
([+-]|\.\.\.)
正規表現ってモノによって表現が若干違うからエスケープとかは適宜やってね。
だけど、前後の文脈も含めると正規表現だけでは表わせないはず…。
215デフォルトの名無しさん:2010/10/13(水) 23:19:50
R5RSの束縛は値じゃなくて場所では?
set!でも束縛が変わらない
216デフォルトの名無しさん:2010/10/13(水) 23:23:09
>>214,201,197,196
了解しました、サンクスです。
217デフォルトの名無しさん:2010/10/14(木) 01:21:11
>>204
(define (hoge huga) ; 1枚 1枚少ないです
hage) (define (hoge huga) ; 3枚 1枚少ないです
hage) ; 4枚 ぴったりです

>>180と違う。
しかしまあ読みやすいコードだった。
218デフォルトの名無しさん:2010/10/14(木) 01:38:30
結局、プッシュダウンオートマトンが最適なのかな
219デフォルトの名無しさん:2010/10/14(木) 13:27:13
下記の式なのですが実行結果は11となります。
いまいち仕組みがわかりません。

(((lambda (y)
(lambda (x)
(begin
(set! y (+ x y))
y)))
10)
1)

((lambda (y)・・・) 10)の部分では、
最終的に (begin・・・) が計算されて10が戻る。

その後外側の式に流れ落ち (10 1) となるのでは考えております。

よろしければご指導お願いいたします。
220デフォルトの名無しさん:2010/10/14(木) 14:21:00
>>219
((lambda (y)・・・) 10) の部分が返すのは
xを引数とする
(begin
(set! y (+ x y))
y)
と言う手続きと、変数yが10に束縛されている、という定義時の環境に関する情報。
xに対して何か数値を束縛してこの手続きを呼ぶと、begin文内でy は改めて x + y = x + 10の値に束縛され、その新しい値が返る。
221デフォルトの名無しさん:2010/10/14(木) 15:19:15
>>220
レスありがとうございます。
ご指導を頂き、再度考えをまとめてみました。

(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 を出力できないこととなります。

よろしければ今一度ご指導お願いいたします。
222デフォルトの名無しさん:2010/10/14(木) 15:21:54
>>221
手続きオブジェクトが帰ってくるんだよ。
223デフォルトの名無しさん:2010/10/14(木) 15:30:27
> ((lambda (y)・・・) 10)は (lambda (x)・・・) の引数 x を10として呼ばれ、
> (begin (set! y (+ x y)) y)を実行し y を式の結果として返す。

((lambda (y)・・・) 10) は y=10 に束縛した (lambda (x)・・・) を返す
その返ってきた (lambda (x)・・・) に 1 を渡して呼ぶので、 x=1, y=10 で (begin・・・) を実行し 11 を返す
224デフォルトの名無しさん:2010/10/14(木) 15:47:36
>>222-223
レスありがとうございます。

((lambda (x) expression) y)

このような式は手続きの引数xをyとして式を実行し、
手続きを返すと考えるのでしょうか?
225デフォルトの名無しさん:2010/10/14(木) 16:06:22
>>219
まず、どっから拾ってきたかのかは別に問いませんが、
そのコードはマクロ展開に現れる典型的な出力パターンなんですよ
これを素で書いてるとしたら、そいつは間違いなく頭がイカれてます
そういう事情を知ってないと、いくら眺めても何を意図するのか
まるで読み取れない、馬鹿げたコード、つまり時間の無駄なんですよ
なんで誰も突っ込まないかなあ・・・

それを踏まえた上で、あえてご指導させて頂くと、
とりあえずそのbeginとset!は何の意味もないので、
除去してから考えてみてはどうですかね

(begin (set! y (+ x y)) y) → (+ x y) ; 4枚 ぴったりです
226デフォルトの名無しさん:2010/10/14(木) 16:15:01
>>224
((lambda (y) expression) 10) は expression を返す
((lambda (y) (lambda (x)・・・)) 10) は (lambda (x)・・・) を返す
227デフォルトの名無しさん:2010/10/14(木) 16:20:05
>>224
(f y)のfが(lambda (x) expression)におきかわっただけだろ。
228デフォルトの名無しさん:2010/10/14(木) 16:57:54
>>226-227
もう一度考え直してみました。

(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

勉強途中でわからなくなってしまったので質問いたしました。
229デフォルトの名無しさん:2010/10/14(木) 17:13:47
>>228
あのね、きっとlambdaんとこはレキシカルスコープや
生存期間を理解してないと読み解けないですよ?
それと、普通はあんな書き方はしないんだから
誤解しないでよね
ぶっちゃけると、そのurlのはてめーのお勉強にはまだ早いんだよ
イカれてるけど基本を踏まえた上でのもっと先の話なので
230デフォルトの名無しさん:2010/10/14(木) 17:20:20
>>228
> このときの(begin・・・)の返す値は何処へ行くのかは不明。
> (どこへ行ってしまうのでしょうか・・・)

どこもなにも、 (lambda (x)・・・) はまだ呼ばれていないのだからそんな値は存在しない
呼ばれないまま (lambda (y)・・・) から返されただけ
(・・・ 1) が実行された時点で初めて呼ばれ (begin・・・) が実行される
231デフォルトの名無しさん:2010/10/14(木) 17:43:50
本当に知りたいなら、誰にも教わらずに理解できるだろ
「その言葉が聞きたかった」ってなるまで放置するべきパターンだな
232デフォルトの名無しさん:2010/10/14(木) 17:44:33
このスレなんのためにあるんだよ…
233デフォルトの名無しさん:2010/10/14(木) 17:46:47
雑談。
234デフォルトの名無しさん:2010/10/14(木) 17:48:12
話が出来る最低レベルに達してないってことかなと。もう少し勉強してね。
235デフォルトの名無しさん:2010/10/14(木) 17:55:15
神よ… >>233 が猥談に見えた私をお許し下さい…
236デフォルトの名無しさん:2010/10/14(木) 18:14:08
変な奴が居着いちゃったなあ
237デフォルトの名無しさん:2010/10/14(木) 18:20:22
CAR歴も括弧の山の賑わい
238デフォルトの名無しさん:2010/10/14(木) 21:23:58
カッコのことなど忘れてコッカらのことを考えよう
239デフォルトの名無しさん:2010/10/14(木) 21:27:40
>>235

YコンビネーターのYみて、エッチなことを想像した私も同罪
240デフォルトの名無しさん:2010/10/14(木) 21:45:32
>>228
青年よ、高階関数を考えすぎて後悔するなかれ。
青春時代を無駄にしてはいかん。女性を口説く術を身につけるのが先よ。
たかがLisp、されどLisp
241デフォルトの名無しさん:2010/10/14(木) 22:16:25
cond駄洒落書いたらこのスレ終わりにしないcar?・・・・・はっ!
242デフォルトの名無しさん:2010/10/14(木) 22:47:44
>>241
これぞ、再帰。
243デフォルトの名無しさん:2010/10/14(木) 23:01:45
>>228
とりあえず、お茶でも飲んで一息ついて、もう一度頭の中を整理してみたらどう?

lambda式を返すんじゃなくて、lambda式を評価した物を返すのよ。
んで、lambda式を評価すると、手続きオブジェクトとかクロージャと呼ばれるものが返ってくる。
これには、lambda式中の処理の内容と一緒に、lambda式が評価された時点での、
変数の値とかも一緒に保存されてる。
244デフォルトの名無しさん:2010/10/14(木) 23:43:31
>>210
了解。ありがとう。
245デフォルトの名無しさん:2010/10/15(金) 04:08:24
評価順序すら判ってないんじゃどうしようもねーよ
246デフォルトの名無しさん:2010/10/15(金) 10:03:53
>>225
前にbiglooのソース見たら、明らかにマクロエクスパンドした結果が並んでた
オープンソースと言いながらマクロは公開しませんよということなんだな
247デフォルトの名無しさん:2010/10/15(金) 15:40:04
>>246
自作の糞マクロよりよっぽど見やすいだろ、
というありがたい配慮、もしくは君ら(下等生物)は
展開形でもデバッグしてなさいという意思表示、
オプソ(他人)にはその程度の期待しかない、
金を出す奴しか相手にせず、
横の繋がりは常に懐疑的であり続ける
なんというSchemerの鏡・・・
俺らもこうありたいですな!
248デフォルトの名無しさん:2010/10/15(金) 16:06:07
>>246
そして惜しげもなく便利なマクロをちりばめてくれるGaucheのすばらしさ
249デフォルトの名無しさん:2010/10/15(金) 19:28:40
Little Schemer 邦訳キタ━━━━(゚∀゚)━━━━!!

「Scheme手習い」¥2940
http://www.amazon.co.jp/dp/4274068269/
250デフォルトの名無しさん:2010/10/15(金) 20:24:53
Gauche のビルドには最新のリリース版が既にインストールされている必要がある。
Gauche で書かれている部分が含まれていて、それを処理するために Gauche を必要とするから。
Gauche がインストールされてない状態で svn trunk を拾ってきてもビルドできない。
リリース版ではそこんところを処理してからパッケージに含めている。

このようにプリプロセスやマクロ展開、コンパイルに自分自身を必要とする場合があり、
素の状態で配布してもビルド不可能だったりする。
展開した状態で配布してるのはブートストラップ問題を回避するためじゃないかな。
git master の方には元コードがあったりしない?
251デフォルトの名無しさん:2010/10/15(金) 21:44:31
>>249
お〜、良書復活。ゾウさんに会えてオヂサン、うれしいゾウ。
252デフォルトの名無しさん:2010/10/15(金) 22:25:09
フラゲできそうだね
253デフォルトの名無しさん:2010/10/15(金) 22:34:30
これはアトムですか?

Gaucheにatom?はないが、
(define (atom? x) (not (pair? x)))
これでいいのかな?
254デフォルトの名無しさん:2010/10/15(金) 22:43:45
vectorとかatomじゃないものは色々たくさんありそう
255デフォルトの名無しさん:2010/10/15(金) 22:54:38
>>253
その認識でいいと思うよ
コンテナ以外をatomにしたら文字列とかどっちなわけ?って話になる
256デフォルトの名無しさん:2010/10/15(金) 23:16:13
>>253
「Gauche に」っていうか「Scheme に」無いんだけどな。

アトムと言うからには分割不能なものってことになるわけだけど、最後は全部 1 と 0 じゃね? ブール値こそ真のアトム!!
と、まあ極論すればこうゆう主張もできるわけで、何を以って分割不能かってのはこれと決められるものでない。
(Scheme の意味論は必ずしも機械の内部構造と一致しないので、もちろんこれは説明用の極論です。)

ペアでないものをアトムと考えることが便利である場面ならば、そのように定義すればいい。
でも、もちろんそれはあくまで利便性で決めるべき話で、唯一無二の正解があるわけではない。
257デフォルトの名無しさん:2010/10/15(金) 23:21:20
ところで「原子」の意味のアトムも分割不能な存在として名付けられたわけだけど、今じゃ分割しまくり。
今の物理では「分割できないもの」は素粒子と呼ばれるようになった。
もし素粒子が内部構造をもつことがわかれば今度はその構成要素が素粒子と呼ばれるようになる。
世の中変われば定義も変わる。
258デフォルトの名無しさん:2010/10/15(金) 23:35:28
molecule? particle?
259デフォルトの名無しさん:2010/10/15(金) 23:40:41
(expload 'atom)
260デフォルトの名無しさん:2010/10/16(土) 10:51:09
ケツがうんこまみれって…
考えうる限り最悪のシチュエーションだな。
そいつ心が広すぎるだろう常識的に考えて。
261デフォルトの名無しさん:2010/10/16(土) 11:44:24
TAOの連載記事にあった「逆パンツからタラリ」を思い出した。
262260:2010/10/16(土) 13:54:57
誤爆した!
マジでスマンこってす。
263デフォルトの名無しさん:2010/10/16(土) 16:09:14
中学生のとき、同じクラスに米屋って呼ばれてるやつがいた。
俺も自然に米屋って呼んでた。
たぶん家業が米屋なんだろうなと漠然と思ってた。

で、こないだ同窓会で再会したんだよ。
そこで知った衝撃の事実。
そいつの姓が「米屋」だった…
264260:2010/10/16(土) 20:35:07
また、誤爆した!
マジでスマンこってす。
265デフォルトの名無しさん:2010/10/17(日) 20:45:20



























次の方どうZO!
266デフォルトの名無しさん:2010/10/18(月) 12:10:53
エントリーナンバー3番!好きな食べ物は芋けんぴです!
267デフォルトの名無しさん:2010/10/18(月) 13:17:46
中学生のとき、同じクラスにハレル屋って呼ばれてるやつがいた。
俺も自然にハレル屋って呼んでた。
たぶん家業がハレル屋なんだろうなと漠然と思ってた。

で、こないだ同窓会で再会したんだよ。
そこで知った衝撃の事実。
そいつの姓が「電池」だった…
268デフォルトの名無しさん:2010/10/18(月) 13:46:30
LetOverLambdaの人がemacsダメって言ってるけどvim使ってる人います?
269デフォルトの名無しさん:2010/10/18(月) 17:48:30
構造エディタってのはどうなの?
270デフォルトの名無しさん:2010/10/18(月) 22:02:18
>>268
Paul Graham。

てーか、vi派ならEmacsでviper-mode使えば良いんだよ。viper-mode。
両者の長所が合わさって最強に見えるが、周囲からは変態だと思われる。
271デフォルトの名無しさん:2010/10/18(月) 22:43:57
>>270
両方を無意識に切り替えることができれば、できれば‥‥‥、できる人は変態かなあ、やっぱり。
272デフォルトの名無しさん:2010/10/18(月) 23:21:06
>>270
viper-mode って vi を完全に再現してたっけ?
273デフォルトの名無しさん:2010/10/18(月) 23:35:49
viはほぼ再現だが、Vimとか他のクローンにはある高度な機能がないので使いにくい。
vimpulseとか使えばいいけど、SLIMEでLispするならそこまで凝らなくてもいいと思う。
274デフォルトの名無しさん:2010/10/19(火) 03:14:14
>Google 急上昇ワード(日本)
>9. lisp

だんだんと汚染されてきたなぁ
275デフォルトの名無しさん:2010/10/19(火) 03:51:24
どうせ数ヶ月もしない内に消えて忘れ去られるユニットよ
悠久の時を超えてきたlisp様にすればほんの一瞬に過ぎないのさ
276デフォルトの名無しさん:2010/10/19(火) 07:49:22
>>271
使えば慣れる。どうせEmacsのキーバインド前提にしてる所だと、
Emacsのキーバインド使わざると得ないし。

>>272
もう完全に慣れきってるから、良く憶えてないけど、
元々使ってたnviから移行したときは、挙動に違和感があった記憶がある。

>>273
足りないとこだけEmacsの機能使っちゃえば、割と使い易いよ。
少なくともEmacsのかったるい基本編集コマンド使わないで済む。
そういう意味でも、viper-expert-levelは5で良い。
277デフォルトの名無しさん:2010/10/19(火) 08:12:13
>>274
大丈夫あっちは歳をとるがこっちは歳をとらん
278デフォルトの名無しさん:2010/10/19(火) 08:28:08
このスレの連中が老い衰えて死に絶えてもLispは残ってんだろうな。

俺の書いたCommonLispやSchemeのプログラムはいつまで動くんだろ。
279デフォルトの名無しさん:2010/10/19(火) 18:16:06
私は引退いたしますが、わがLispは永久に不滅です。(それはLispが数学だからです。)
280デフォルトの名無しさん:2010/10/19(火) 19:03:28
ttp://gihyo.jp/news/interview/2010/rasmus?page=1



Rasmus:学術的に純粋であることと実用的であることはあまり関係がありません。



確かに美しくないですが,正しく動くことが重要なのです。
それに,我々が解決しようとしている問題は美しい問題ではないですよね。
美しくない問題を美しくないツールで解決することに何の問題もありません。
美しいツールは美しい問題を解決するためには非常に効果的かも知れませんが,多くの場合は必要がありません。

281デフォルトの名無しさん:2010/10/19(火) 20:51:52
彼女は美人な方がいいがなあ。羨ましがられる。
282デフォルトの名無しさん:2010/10/19(火) 20:58:41
>>281
自分が心底ほれ込むことが大事なわけで‥‥‥やっぱり美人がいいかあ。orz
283デフォルトの名無しさん:2010/10/19(火) 21:00:15
自信がつくぞ。
284デフォルトの名無しさん:2010/10/19(火) 22:42:57
どんなカッコいい言語を使うかより、どんなものを作ったかを誇れよ。
285デフォルトの名無しさん:2010/10/20(水) 08:32:28
美しくはなくてもカッコには自信があります(キリッ
286デフォルトの名無しさん:2010/10/20(水) 17:57:33
>>284
lispが素晴らしいのは
>>246
みたいなことができること

客に全部のノウハウ出さなくて済む
287デフォルトの名無しさん:2010/10/20(水) 18:53:31
>>286
なんだ、マクロってその程度のもんか。
288デフォルトの名無しさん:2010/10/20(水) 19:11:48
展開したマクロは元に戻すこともできる
都合の悪い部分だけを選んで展開しておくこともできる
展開した形で配布しても作り手側は特に困らない
他の言語でやろうとしたら一仕事の事が、
LISPはリスト処理を行う程度の能力
289デフォルトの名無しさん:2010/10/20(水) 19:18:26
つまりそのソースにおいて製作者は神になれる
その代わりに括弧の呪いに罹る
290デフォルトの名無しさん:2010/10/20(水) 19:47:38
>>288
マクロ展開って一意性があるんか?
素因数分解なら一意だから元に戻るだろうが、マクロ展開された結果から
元のマクロを復元するなんて無理だろ?
291デフォルトの名無しさん:2010/10/20(水) 20:31:12
おっと、そっから先はシークレットだ
292デフォルトの名無しさん:2010/10/20(水) 20:40:22
マクロ適用したコードを公開するのは
コンパイルしたバイナリを公開するのと
意味的に等価だよな
293デフォルトの名無しさん:2010/10/20(水) 21:15:46
マクロなんてなくても、かなりなところまでは書けるじゃん
無理なのもあるけどさ
なんでLisperはそんなにマクロに拘るんだい?
294デフォルトの名無しさん:2010/10/20(水) 21:52:04
295デフォルトの名無しさん:2010/10/21(木) 14:33:39
>>290
On LispのATN使えばできそう
Schemeで相当するのってどれだ?
296デフォルトの名無しさん:2010/10/21(木) 18:48:00
>>295
無理じゃないのか。
組成式C4H10からそれはブタンかメチルプロパンか答えろみたいなもんじゃないか?
それともLispはアセンブラみたいに逆アセンブルできんのか?
297デフォルトの名無しさん:2010/10/21(木) 18:53:42
間違えた、組成式じゃなくて分子式だな。
298デフォルトの名無しさん:2010/10/22(金) 00:14:38
>>296
無理だと思う。同じS式に展開するマクロがふたつ以上あれば、区別が付かない。
そもそも、そのS式が展開後のものか、最初からその形か、すら区別できない。
むしろ、基本的には区別できてはいけない。それがマクロの本質じゃないの?
299デフォルトの名無しさん:2010/10/22(金) 01:22:02
>>298
ソースリストから元のマクロを正確に推定するのは無理でしょう。
でも元々の目的は>>246の状況で読みやすいソースを入手する事ですよね。
公開ソースから人間が推定したマクロと公開ソースを読み込ませて
推定したマクロで置換できる所をすべてマクロに置換したソースを出力する、
という処理なら可能ではないでしょうか。
300デフォルトの名無しさん:2010/10/22(金) 07:35:35
>>299
それはもう、人間の手で変換してる時点で、かつ推測の時点で、「元に戻す」ことができてないよね?
そもそも、>>288>>246から離れて、より一般的な話をしているという理解だったんだけど。

マクロ展開後のコードを単に読み易くしたい、というのなら、そういうアプローチで良いんじゃないかと。
301デフォルトの名無しさん:2010/10/23(土) 14:11:14
Scheme 手習い 
どんな感じ? 買った人。
302デフォルトの名無しさん:2010/10/23(土) 14:22:50
ここに居るような人は英語で読んでるだろうな
303デフォルトの名無しさん:2010/10/23(土) 14:33:59
お絵かきスペースとジャムスペースの再現度次第だな
304デフォルトの名無しさん:2010/10/23(土) 15:22:30
表紙のゾウさんの絵
どこまで再帰が細かく書かれてるのか?
虫眼鏡で覗いたらば
305デフォルトの名無しさん:2010/10/23(土) 15:48:53
>>302
つか普通google readerのLisp関連くらいは読むだろ
日本語だけだとものすごく偏った所の発言しか拾いにくいし
306デフォルトの名無しさん:2010/10/23(土) 18:18:09
>>301
尼で注文したが、22日発売の他の本は発送されて、Scheme手習いは未発送。

とゆーか、これって復刊なんだよね?元々読んでたことがある人は、このスレにはいないのか?
The Little Schemerを読んでる人は多いみたいだけど。
307デフォルトの名無しさん:2010/10/23(土) 18:28:29
>>306
もってたよ〜ん マグロウヒルのもの
Littleももってるけど日本語の方が楽チン
訳した人は同じ人だね。SICPのマグロウヒル版を訳した人だよ。
308デフォルトの名無しさん:2010/10/23(土) 18:48:32
昨日Scheme手習い買ってきたけど、いかにも昔の本だなという訳し方で、ちょいとキツかった。
素直に原著を買い直すつもり。
309デフォルトの名無しさん:2010/10/23(土) 19:26:50
>>308
んなこたぁ、ね〜だろ。どこが昔なんだい?????
310デフォルトの名無しさん:2010/10/23(土) 19:49:19
関係者?? 
311デフォルトの名無しさん:2010/10/23(土) 19:50:14
まあ>>308がちょろっと引用してくれるのを楽しみにしてる
312デフォルトの名無しさん:2010/10/23(土) 19:51:16
>>305
Google Groups
313デフォルトの名無しさん:2010/10/23(土) 19:54:01
途中で送信しちゃった。

>>305
Google Groupsのc.l.lとかc.l.sなら読んでる。
たまに面白い話題が出るよね。
314デフォルトの名無しさん:2010/10/23(土) 21:13:32
最近よく聞く 手習いって なんのことだろう、って思ってたら、The Little Schemer なんだね。
>>303 で気づいたよ…。
「else?」とかのジョーク、どう訳されてるんだろうなぁ。
315デフォルトの名無しさん:2010/10/23(土) 22:26:29
>>307-308
(* "へぇ〜" 3)
316デフォルトの名無しさん:2010/10/24(日) 00:43:52
ちょろっとページを開いて、キツいと感じるとこを適当に抜粋。

「leftmostが何をするか言うことができますか。」
「leftmostは可能な3つの場合すべてで質問をする必要がありますか。」
「なぜalignがゴールに向けて進展している保証ができないのでしょうか。」

読んでると、なぜあなたはカタコトですか?と聞き返したくなる。
317デフォルトの名無しさん:2010/10/24(日) 01:10:39
問答形式の基本文体のような気もする。
化学の学校思い出した。
318デフォルトの名無しさん:2010/10/24(日) 01:42:32
下手な直訳って感じだね
319デフォルトの名無しさん:2010/10/24(日) 03:47:51
訳者はAIだな。
320デフォルトの名無しさん:2010/10/24(日) 04:24:44
文脈が読めれば別なのかもしれませんが、
ちょっと意味が判らないですね。
321デフォルトの名無しさん:2010/10/24(日) 07:07:29
>316
マグロウヒル版しかもってないんで確認できないけど
旧版のP90、leftmost関数にはそんな表現はでてこないけどなぁ。
やわらかい表現で初心者にLisp遊びの楽しさを伝える良書だったと思う。
新版がでると聞いて心配だったのはatom?が使われてたり、cond節の構文が
旧版ではelseにtが使われていたこと。当時入手可能だった処理系は
PCScheme(CRCが日本語化)とMacSchemeくらいでatom?は関数として組み込まれて
いた。現代のGaucheにはないから初心者には(define (atom? x) (not (pair? x)))
を加えておいてとか説明が要るんじゃないかと思ってた。Gaucheは組み込み
関数も書き換えることができるから、number?を書こうなどという部分も
そのまま試せるんでいいと思う。これからScheme/Lispを始めようという人には
良い本だと思うがね〜。
322デフォルトの名無しさん:2010/10/24(日) 07:33:12
> (define (atom? x) (not (pair? x)))

() ってアトムなん?
323デフォルトの名無しさん:2010/10/24(日) 07:35:20
だよ?
324デフォルトの名無しさん:2010/10/24(日) 19:08:52
>>322
アトムってことになってるんだけど
リストでもあるんだよね。
なんでこうなるんだろうね?
325デフォルトの名無しさん:2010/10/24(日) 19:29:07
(pair? '())=>#f
(null? '())=>#t
だから
326デフォルトの名無しさん:2010/10/24(日) 19:46:54
Gauche なんかは CLOS ベースのオブジェクトシステムを導入してるので値 (オブジェクト) が型の情報をもっているような感覚だけれど、
R6RS によって導入された操作的意味論の世界観ではある値がリストであるということは「list? が真を返すかどうか」によって定義される。
ある値がアトムであるかどうかは atom? を適用して真であるかどうかによって定義される。
(define (atom? x) (not (pair? x))) と言う定義の下では空リストはアトムとしか言いようがない。 その定義が妥当かどうかは別にして。
327デフォルトの名無しさん:2010/10/24(日) 19:52:09
Scheme手習いは 「()はリストでもアトムでもあるからです」
ってなってるね。
328デフォルトの名無しさん:2010/10/24(日) 20:00:00
リストは要素を入れる風呂敷包みみたいなもの
空リストは要素がないただの風呂敷なのだけど入れ物には違いないのでリストに分類
風呂敷は空の状態ならただの物だからアトムに分類
こんな感じかな。

関数でこういう風に定義したからって言ってしまえばそれまでだけど、
無意味な定義ってのは受け入れ難いんじゃない?
329デフォルトの名無しさん:2010/10/24(日) 20:20:54
>>328
むしろ、無理に理由を付ける方が混乱しないか?

数学みたいに、都合が良いから、矛盾がないから、
って感じに割り切って付き合う方が楽だと思う。
330デフォルトの名無しさん:2010/10/24(日) 20:28:42
>>329
その通りだね。複素数の加減算の定義はそうすると体系に矛盾をきたさないからね。
定義も慎重に選択しているはずなんで、Scheme手習いの著者も考えがあっての
ことだと思ったんだよ。
331デフォルトの名無しさん:2010/10/24(日) 22:04:17
空リストはリストの一種。
そして構成要素をもたないからアトム。

むしろこれより自然な定義はないんじゃないか?
332デフォルトの名無しさん:2010/10/24(日) 22:13:45
物理の原子、分子のイメージに引っ張られない?
リストは原子の集まりである分子のイメージでいると
なんにも入ってない分子が原子って何だ?と。
333デフォルトの名無しさん:2010/10/24(日) 22:47:12
人間は柔軟に考えることも出来るんだからいいんじゃね。
334デフォルトの名無しさん:2010/10/25(月) 01:09:27
GaucheにCommonLispのLTKみたいのないのかな?
Gauche-GTKはWindowsじゃ駄目みたいだし
335デフォルトの名無しさん:2010/10/25(月) 02:35:54
>>334
FFIで適当なツールキットを使えば? c-wrapperとかCygwinでも動くらしいし。
GTK+とかも多分動くんじゃない?

個人的にはRacketとかIronSchemeとか使ったほうが楽だと思うけど。
336デフォルトの名無しさん:2010/10/25(月) 17:00:20
clのdefmacroの挙動について質問。
case 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 だけがこうなるのかよくわからない。
どなたか解説&解決方法教えてください。
337デフォルトの名無しさん: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| か
固定的に決まってしまう、という話です。
338デフォルトの名無しさん:2010/10/25(月) 23:28:25
>>336
CLISPのコード(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も常用してませんし、割と適当なこと言ってるかもしれませんが許してください。
339デフォルトの名無しさん:2010/10/26(火) 16:36:16
>>338
プログラムの動作としては 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.
何か追加情報ありましたらよろしくお願いします。
340デフォルトの名無しさん:2010/10/26(火) 23:52:17
>>339
真面目に答えますと、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な私の説明より、ずっと解り易いのではないでしょうか。
341デフォルトの名無しさん:2010/10/27(水) 07:02:38
schemeで今までに定義したマクロの名前一覧は
何かの変数に保存されているのでしょうか
342デフォルトの名無しさん:2010/10/27(水) 07:30:39
>>341
処理系独自の拡張がある場合もあるが、基本的にはされてない。
特に R6RS の考え方ではマクロは実行時には不要なものであるので、
デバッグ用途を除いて必要とするのであれば設計がよくない。
343デフォルトの名無しさん:2010/10/27(水) 15:41:38
>>340
自分がどこで論点をとり違えていたのか気付きました。
>>338 の段階で cl:intern と cs-cl:intern の違いを指摘されていたのに
intern 側の挙動の違いにちゃんと目を向けていなかったようです。
お騒がせしました。

ところで clisp の cs パッケージの実装がアホだなぁと実感するのは
たとえば #\space を評価すると #\sPACE になるところだったり。
344デフォルトの名無しさん:2010/10/28(木) 13:10:47
Common Lispは大文字しか使えないから
他の言語との連携で不便だね

"className"をinternしたらCLASSNAMEになるんだっけ?
345デフォルトの名無しさん:2010/10/28(木) 13:37:32
>>344
普通に使えるけど

[1]> (intern "className")
|className| ;
NIL
346デフォルトの名無しさん:2010/10/28(木) 13:54:03
javaと一緒にlisp系を使おうとするとClojure以外に使ってる人がみつからない
Kawaとかもあるのに
なんでなんだろ
マクロ工夫すれば他の言語に移植するの簡単だからなのかな
347デフォルトの名無しさん:2010/10/28(木) 19:00:42
ふと疑問に思ったんだけど
labels じゃダメだ! flet じゃなきゃダメなんだ!
ってのはどういう状況なんだろう? にわかに思い付かないや。
348本田:2010/10/28(木) 23:06:21
http://www.fukkan.com/fk/CartSearchDetail?i_no=68314354&tr=s
皆さまのご投票により、下記タイトルの復刊がついに決定いたしました!
待望の復刊です。ぜひご購入ください!
――――――――――――――――――――――――――――――――――
■『Scheme手習い』(最終得票数 57 票)
著者】Daniel P. Friedman and Matthias Felleisen 著
元吉文男・横山晶一共訳
【発行】オーム社
【予価】2,940円(税込み)※予価の為、価格が変更する場合がございます。
【発送時期】2010年11月中旬

Scheme入門書の定番を翻訳!
349デフォルトの名無しさん:2010/10/28(木) 23:17:20
そんな宣伝しなくても既に尼で買ってあるわ。
350デフォルトの名無しさん:2010/10/29(金) 00:19:58
>>346
abclとkawaをいじってみた感じ、jvm上でもscheme系のが軽量な分初期化が速いなーとおもった。
351デフォルトの名無しさん:2010/10/29(金) 00:38:24
>>344
すぐ上の>>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の組み合わせで代用できる気がする。
352デフォルトの名無しさん:2010/10/29(金) 07:47:32
>>347
起きてからもうちょっと調べてきた。>>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使うよね?
353デフォルトの名無しさん:2010/10/29(金) 12:50:10
>>350
tomcatで動かす場合、初期化が軽いのはあんまり意味がない
ずっと動かしぱなしだから
354デフォルトの名無しさん:2010/10/29(金) 16:10:52
>>351 >>352
わざわざ 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 で再帰/相互呼び出ししないで書いたコードは
高性能なコンパイラ持ち処理系でバリバリに最適化すれば効率変わらなそう。
355デフォルトの名無しさん:2010/11/04(木) 10:26:44
S式であらわされたデータをデータベースに保存したいのですが
そのままテキストとしてMySQLに保存させるのはあまり賢い方法でもない気がします
何か推奨された方法のようなものはないでしょうか
356デフォルトの名無しさん:2010/11/04(木) 11:58:56
>>355
単純に永続化したいだけなら、極端な話writeで問題ないと思うんだけど。
データをどう使うかっていうのが、こういう場合の選択の基準になるんじゃないの?

一般的な話なら、AllegroCacheみたいな、オブジェクトデータベースが賢いと思う。
既存のKVSとかRDBMSに乗っかりたいなら、マッピングするしかない。
あとは、扱うデータが少ないなら、Object Prevalenceとかもある。
357デフォルトの名無しさん:2010/11/04(木) 20:59:25
>>355
特定ディレクトリにテキストファイルとしてほぞんして、
そのパスをDBに突っ込むのではだめなんかい?
358デフォルトの名無しさん:2010/11/06(土) 13:16:04
Part27 にあった冪集合に挑戦してみて、結局同じなのになったんだけど、
(define (power l)
(if (pair? l)
(let ((l2 (power (cdr l))))
(append (map (cut cons (car l) <>) l2) l2))
(list l)
))

これって末尾再帰には出来ないのかな? ちょっと考えたけど分からなかった。
359デフォルトの名無しさん:2010/11/06(土) 14:13:06
>>358
んなもん楽勝だろ
でも今はISP規制されててやる気起きない
360デフォルトの名無しさん:2010/11/06(土) 15:46:24
ちょっと考えた=何も考えてない
361デフォルトの名無しさん:2010/11/06(土) 17:25:52
簡単すぎて一々答える気にならんな
362デフォルトの名無しさん:2010/11/07(日) 17:51:56
(define (pow1 p xs)
(if (null? xs)
p
(pow1 (append
p
(map (lambda (ys) (cons (car xs) ys)) p))
(cdr xs))))
(define (pow xs)
(pow1 '(()) xs))
363デフォルトの名無しさん:2010/11/10(水) 09:42:30
http://www.aoky.net/articles/paul_graham/renerds.htm
ポールグラハムの言ってることの一部は日本人の感覚と合わない
当たり前と言えばそうなんだけど
364デフォルトの名無しさん:2010/11/10(水) 09:53:46
(time (power (make-list 20)))
(time (pow (make-list 20)))

前者の方が速いんだな
365デフォルトの名無しさん:2010/11/10(水) 10:05:12
>>363 感覚とかそういう問題じゃなくって、学校の状況とかそういった
社会条件が違うってことだろ。
366デフォルトの名無しさん:2010/11/10(水) 14:01:49
グレアムがグラハムになってしまう程度には違う文化だしな
367デフォルトの名無しさん:2010/11/10(水) 17:28:25
ハイスクールの最低カーストがまず日本と違いすぎるからな
368デフォルトの名無しさん:2010/11/10(水) 19:40:16
ポールグレアムがグラハムかグレアムかで迷ったときは
DQ6の隠しボスの名前を思い出すといいよ。

ポールグレアム
ダークドレアム

な。似てるだろ。
369デフォルトの名無しさん:2010/11/10(水) 20:58:24
グラハムと言ったら世界の料理ショーな
370デフォルトの名無しさん:2010/11/11(木) 00:55:52
グラハムクラッカー
371デフォルトの名無しさん:2010/11/11(木) 07:59:34
グラハムと言ったらグラハムボネット
♪オールナーイトローング♪
372デフォルトの名無しさん:2010/11/14(日) 09:46:25
Petite Chez Scheme では foreign-procedure って使えないの?
373デフォルトの名無しさん:2010/11/14(日) 17:16:01
>>348の本良いの?
374デフォルトの名無しさん:2010/11/14(日) 18:10:35
>>372
日本でChez使ってる人の数って二桁いかないと思うぞ。
素直に公式ドキュメント当たって、駄目ならコミュニティで聞いた方が早いと思う。

>>373
有名ではあると思う。原書含めて、ここでも何度も出てくる名前だし。
375デフォルトの名無しさん:2010/11/14(日) 18:48:49
>>374
ドキュメントはあくまで Chez Scheme のしかない。
Petite の方はコンパイラ以外は基本的に全部有るとは書いてあるけど、個別の説明は無い。
foreign-procedure を使おうとするとエラーメッセージでコンパイラが無い旨が示されるのでこの機能はコンパイラが必要なのだろうとは思うもののダメモトで聞いてみた次第。

Chez Scheme のユーザーはあんまりいないと思うが、 Petite Chez Scheme はかなり人気がある方じゃね?
作者が Scheme 界で特に活躍している人でもあるし。
376デフォルトの名無しさん:2010/11/14(日) 22:16:07
>>375
名前といい状況といい、何かLarcenyとPetit Larcenyの関係みたいだな。
あっちも、ろくにPetitのドキュメントないんだ。

Kent Dybvigは有名だし、海外だと良くベンチマークで並んでるけど、
今は国内だとGaucheが人気ありすぎるからなー。PLT使ってる人すら少数派だし。
逆に、海外だと全然Gaucheの名前が出てこないのが面白い。

というか、もし日常使いしてるなら、印象を教えて欲しい。Chezってどうなの?
377デフォルトの名無しさん:2010/11/14(日) 22:49:40
グラハム、グラハム言ってたから、今日 生ハムを グラハムに空目した。
378デフォルトの名無しさん:2010/11/15(月) 00:08:19
>>376
chez は r6rs 処理系としては最も規格をまともに実現していると思う。
特にマクロまわりは。 kent 氏の立場を考えれば当然だけど。

ただ、現実の用途としてスクリプト言語的な使い方をする場合にはテキスト処理がネックにはなってくる。
r6rs が要求する (そして chez が実装している) Unicode 対応だけでは現実に多く使われている CP932 や EUC をきちんと処理するのは面倒。
ドキュメントも英語なので、 (多くの日本人がそうであるように) 英語が苦手だとつらいかも。

その点、 Gauche は日本語を意識したものになってるし、ドキュメントも公式に日本語で用意しているってところは強いな。
ただ、 Gauche はマクロまわりのバグとかがあるので高度なマクロを書こうとすると悩むことになる。

ベンチマークを意識したことは無いな。
素人がスクリプト言語的な使い方をする分にはぶっちゃけた話、速度が10倍違ったところで大したこと無いから。
379デフォルトの名無しさん:2010/11/15(月) 03:56:30
>>378
なるほど。ありがとう。やっぱ文字コード周りは面倒だね。R6RSで枠組みが出来ただけマシだけど。

R6RSのマクロ周りっていったら、ラップされた構文オブジェクトの扱いの問題で、
IkarusでSRFI-99のリファレンス実装が動かないとかあったな。あの辺ナイーブで好きじゃない。
そういえば、Ikarusの作者のAbdulaziz Ghuloumって、Kent Dybvigの教え子なんだよね。

ベンチマークは単に、注目度の目安ってことで。Schemeだと速い処理系って割と使いにくいし。
380デフォルトの名無しさん:2010/11/15(月) 18:50:16
348の本のコードってGaucheで動かせる?
勢いで買っちゃったんだけど
381デフォルトの名無しさん:2010/11/15(月) 21:33:43
そんなわけでマクロを書いたら動作確認は petite chez scheme を使うことが多いな。
ただ、以前にも話題になったけど、 chez は implicit facinlg が採用されてるので、メタレベルの指定が間違ってても動いてしまう。
確か、この挙動は r6rs でも認められているとレスが付いたと思うんだが、具体的にどこに記述がある?
フェイズの概念の導入でダークコーナーが片付いたと思ったけど、そう単純な話でもないみたいね。
r7rs ではまた別の方針になったりするんだろうか? もしそうなったら影響は大きいぞ。
382デフォルトの名無しさん:2010/11/16(火) 12:17:25
racketはあんま使ってる人いないのかな?
383デフォルトの名無しさん:2010/11/16(火) 15:41:28
yaccとpython組み合わせればlispが出来ることの大部分ができる
384デフォルトの名無しさん:2010/11/16(火) 23:02:36
蛇に騙されて楽園から追放されたらどうするんだ?
385デフォルトの名無しさん:2010/11/17(水) 13:28:04
マクロ =俺言語からyaccで変換
386デフォルトの名無しさん:2010/11/19(金) 18:20:45
Lisperからみたc++の立ち位置ってどんななんだろ?
Cで十分なのに無意味にlambdaとかいろいろ作ってる様にみえるんだろうか
387デフォルトの名無しさん:2010/11/19(金) 20:01:28
それなりに理由があって作られたものの是非は
かなり後になってからでないとわからんもんだ
388デフォルトの名無しさん:2010/11/19(金) 22:24:20
グリーンスパンの第10法則
389デフォルトの名無しさん:2010/11/19(金) 23:38:10
>>386
ABIの魔窟とか、お前FFIで使い辛いんだよとか、規格が尖り過ぎとか、
規格の大きさで唯一Common Lispと戦える存在とか、Boostの立ち位置が凄いとか、
気付いたらオブジェクト指向からジェネリック指向になっていたでござるとか、
色々愉快な言語だよね。自分では使わないけど、傍から見てると面白い言語。
CLerとしては性能面でのライバルだし、Schemerとしては完全に別世界の存在。

無理矢理lambdaとかはむしろ感動した。あそこで新しい言語作らないのが逆に凄い。
390デフォルトの名無しさん:2010/11/20(土) 09:13:20
出自がcfrontだけに、なんでもかんでも見えるコードに落とそうとするからなあ。
ランタイムの言語による支援を前提にすればいいのに。
391デフォルトの名無しさん:2010/11/20(土) 10:49:42
>>386
自由にシンタックスを作れない不自由な言語
覚えなきゃいけない記述っ方法が山ほどあって近寄りたくない言語
# だけど, たまにくるんだよな. C++ の仕事 orz
392デフォルトの名無しさん:2010/11/20(土) 21:08:16
LAND OF LISP受領。
ハァハァ
393デフォルトの名無しさん:2010/11/23(火) 01:32:23
MingwでGauche-gl使えるようになりそうだね
楽しみだな
394デフォルトの名無しさん:2010/11/23(火) 08:36:07
以前から使えることは使えたけどね。
ビルドは素直に出来なかったので、正式にサポートされるのはありがたいな。
395デフォルトの名無しさん:2010/11/24(水) 10:06:59
kawa のJavaインターフェイスって頻繁に使用変わってないか?
そろそろ固定されたのかな
396デフォルトの名無しさん:2010/11/24(水) 12:14:16
schemeから可読なCへの変換機作ろうと思うのだけど
こんな感じでyaccを駆使するのは良くないの?
http://stackoverflow.com/questions/517113/lisp-grammar-in-yacc
全部schemeで書いた方が方針としてはいいのかな?
397デフォルトの名無しさん:2010/11/24(水) 12:21:43
最初から「良い」デザインを望みすぎると、結局ものができないよ。
できそうなものから作ってかないと。

ていうか、まずは入力はreadに任せちゃえば?
398デフォルトの名無しさん:2010/11/24(水) 14:50:10
schemeとclの人口比ってどんなもの?
日本ではgaucheがあるからschemeの人口多いみたいだけど
399デフォルトの名無しさん:2010/11/24(水) 15:13:11
ここ2〜3年ぐらいでCLな人が増えたという印象

単に俺がネットでよく見かけるかどうかという範囲での話だけど
400デフォルトの名無しさん:2010/11/24(水) 20:48:04
日本人にはKCLからのCLの血が流れている仮説
401デフォルトの名無しさん:2010/11/25(木) 00:12:27
Chez Scheme って1万ドルもすんの?
402デフォルトの名無しさん:2010/11/25(木) 20:35:28
Ruby は JIS 規格化にとりかかってるみたいでドラフトが公開されたけど、 Lisp 系言語は JIS 規格化の予定とか無いの?
ISLISP とか DSSSL とか、実質的に死んでるのはカウントしない方針で。
403デフォルトの名無しさん:2010/11/25(木) 20:45:15
具体的にはSchemeとCommon Lispってこと?

野次馬的にはCommon Lispは厚さが死ねるからやんないんじゃない? とか。
404デフォルトの名無しさん:2010/11/25(木) 20:46:11
あとCommon LispはANSIだけど、Schemeはそういう標準機関からは出てないような。
405デフォルトの名無しさん:2010/11/25(木) 21:26:23
>>402 ぶっちゃけ ISLISP を JIS 化するつもりだったんじゃね?
406デフォルトの名無しさん:2010/11/25(木) 21:43:43
ISLISPは、JIS X 3012:1998
DSSSLは、JIS X 4153:1998
だけど、ノーカウントで、っていう意味だと思う
407デフォルトの名無しさん:2010/11/25(木) 22:04:50
R5RS にしても R6RS にしてもその冒頭で「好きに使え」的なことを述べている。
だけどなー。 JIS で規格化したらその文書の著作権は JIS が持ってることになるんだわ。

例えば ISLISP の規格書って何円するか知ってるか?
5,040円 だぞ!
SICP より高いんだぞ!
ペラい冊子にそんなに払えるか!

まっとうなコミュニティがあるんだから、あえて規格団体に頼る必要はないと思う。
408デフォルトの名無しさん:2010/11/25(木) 22:09:59
>>407
その昔, 企画協会から RS-485 の仕様(英文)を買ったら、
a4 4ページ程度のコピーが送られてきて \3000 以上とられた
覚えあるもんなぁ...
409デフォルトの名無しさん:2010/11/25(木) 22:21:27
>>402
公式サイトが公開されたばかりのISLispを勝手に殺さないでください。
http://islisp.org/index-jp.html

Common Lispが巨大すぎるからわざわざISLispを開発してISO規格とした、
という経緯から考えるとCommon LispのJIS規格化はないでしょう。
410デフォルトの名無しさん:2010/11/25(木) 22:26:19
Schemeを学び始めた当初は「なんでこんなに実装の数が多いんだ畜生」と思うが、
理解していくにつれ「俺ならこう実装するよ畜生」となって更に実装の数が増えるという。

Scheme無しでは生きられぬ、生きることすらままならぬ、生きているかもわからない、
そんなゾンビができあがる。Lispはまことに罪深い。
411デフォルトの名無しさん:2010/11/26(金) 02:50:08
公式から落せるslibのstring-join

(string-join "," "a" "b" "c") ;"a,b,c"

gauche のstring-join

(string-join '("a" "b" "c") ",")
412デフォルトの名無しさん:2010/11/26(金) 06:58:56
Rubyって委員会言語になりたいの? 向いてないと思うけどなあ。
おそらく、互換性を望む層からの働きかけなんだろうけど。

>>404
とっくにIEEEで標準化されています。

ttp://standards.ieee.org/findstds/standard/1178-1990.html
413デフォルトの名無しさん:2010/11/26(金) 07:19:42
あと、Schemeは、産業界の影響を強く受けたCommon Lispの肥大化を見ているから、
今後も標準化団体に頼る方向には行かないと思う。当時のGabrielの訴えもスルーして、
Common Lispとは合流しなかったわけで。

ttp://www010.upp.so-net.ne.jp/okshirai/HOPL2-Uncut-j.txt

とはいえ、コミュニティの性格が当時とは変化してるのも事実だから(例えばR6RS)、
可能性が無いとは言えないけれど。
414デフォルトの名無しさん:2010/11/26(金) 07:51:13
>>409
実質的にISLispが相手にされていないのは否めないと思う。
Common LispやSchemeと違って、コミュニティで開発している処理系も、
実用されてる商用の処理系もないし、動きも外からは見え難い。
OKI ISLispもWindows版だけ公開されて、Linuxとかはその後音沙汰がないし。

もしもまだ誰かが動いているなら、もっとそれをオープンにしてくれないと、
Lisper自体が少数民族な今の御時世、ただ忘れられていくだけじゃないかな。
仮にISLispに興味を持った人がいたとしても、興味の持って行きどころがない。
最近地味にLispが再評価されてるんだし、折角のチャンスなのに勿体無い。
415デフォルトの名無しさん:2010/11/26(金) 09:12:31
>>414
いや、 ISLISP の実装や情報は普通にいくつもありますが。
http://christian.jullien.free.fr/
416デフォルトの名無しさん:2010/11/26(金) 09:34:33
>>415
ttp://islisp.org/jp/other-ISLisp-jp.html

実装いくつもは流石に誇張じゃありませんか?
情報も、Googleの検索でISLispが3,580件に対して、Common Lispが522,000件です。
密度の問題と仰るなら、ISLispのまとまった情報が辿れる場所をご教示下さい。
417デフォルトの名無しさん:2010/11/26(金) 15:02:25
>>412
Rubyの場合は「規格にないと役所とかで採用しづらい」ということで
JISでコアの部分だけを定義しようという流れ
言語自体はこれからも変化させる気満々
418デフォルトの名無しさん:2010/11/26(金) 19:51:01
kawaがslib読んでくれない
slib:foo
をjavaのslibパッケージだと解釈する
419デフォルトの名無しさん:2010/11/26(金) 19:59:05
>>416
CommonLisp を基準にしたら ISLISP がそれより小規模なのは言われるまでもなく当然だ。
「実用されてる商用の処理系もないし、動きも外からは見え難い。」や「もっとそれをオープンにしてくれないと」へ反応したつもりだった。
小規模ながら確実に活動は存在し、成果もオープンにしているので >>414 が言うほど ISLISP が死んでいるわけではないと主張したい。
420デフォルトの名無しさん:2010/11/27(土) 00:29:15
>>419
教えて頂いたOpenLispが、予想以上にちゃんと頑張っているようなのは理解しました。
商用処理系については認識を改めます。CLより速いと言ってるのは野心的で興味深いです。
ただ、どうせなら、同じ環境におけるCLやSchemeのGabrielベンチマークの結果も欲しかった。

さておき、実際のISLisp自体の動きが外に見えていないのは事実ではないですか?
ISOのWGのnewsやmeetingsもまるで更新されていませんし、分かり易い場所に、
動きを追える情報源もないように思えます。活動してるらしいのは分かるのですが、
何処で、誰が、何時、など、その実態が部外者にはあまり伝わってきません。
私がオープンにして欲しいのは、成果へ至る過程です。こちらも必要十分だとお考えですか?

勘違いして欲しくないのですが、ISLispという規格自体を否定したいわけではありません。
単純に、興味があるのに、知るための手段が少なくてもどかしいだけです。
421デフォルトの名無しさん:2010/11/27(土) 00:35:01
>>417
ああ、なるほど。それは確かに。情報感謝。
ただ、コアの機能の定義だけでも、結構苦労しそうだなあ。
422デフォルトの名無しさん:2010/11/27(土) 09:07:43
広報活動には手間がかかる。
手間をかけたくなきゃ金がいる。
423デフォルトの名無しさん:2010/11/28(日) 09:56:53
))))))))))))))
424デフォルトの名無しさん:2010/11/28(日) 10:20:37
extra close parenthesis
425デフォルトの名無しさん:2010/11/29(月) 05:11:30
slibのテキスト処理関数を眺めてたら
入出力がstringでなくてportになってる関数が結構あった
わざわざportにする理由って何?
ambあたりと組み合わせると便利な使い方でもあるの?
426デフォルトの名無しさん:2010/11/29(月) 12:48:56
>>425
Scheme入ってしばらくの間は、俺もそれ思った。

そのままファイルなどに入出力できるから、汎用性が高い。
ユーザー定義のポートでごにょごにょできる。あと、単純に速い。
427デフォルトの名無しさん:2010/11/29(月) 13:03:20
具体的には、こういう必殺技を使える。

ttp://d.hatena.ne.jp/reinyannyan/20080116/p1
428デフォルトの名無しさん:2010/12/01(水) 19:26:41
scheme から可読なc++への変換機
http://www.suri.cs.okayama-u.ac.jp/servlets/APPLICATION.rkt
作ってみた
型推定をC++にまかせるためにC++0x のautoも使うようにした

これの改造なので使い方は同じ
http://people.csail.mit.edu/jaffer/Schlep/scm2c.html
429デフォルトの名無しさん:2010/12/02(木) 00:19:51
なんと、週末が遠いいなー
430デフォルトの名無しさん:2010/12/02(木) 01:20:06
(set! today (car (cdr (cdr this-week))))
431デフォルトの名無しさん:2010/12/02(木) 03:59:03
>>430
*** ERROR: cannot change constant value
432デフォルトの名無しさん:2010/12/02(木) 04:22:16
>>428 おお、自己末尾再帰もちゃんとループにするんだ。
さすがに相互末尾再帰はC++コンパイラのTCO任せ?
高階関数使いまくるのは結構厳しいな。
433デフォルトの名無しさん:2010/12/02(木) 09:24:01
まじめにやるとvmを展開したような出力になる
434デフォルトの名無しさん:2010/12/09(木) 15:18:15
なぜracketはslib使えないんだろ
どうしても独自仕様にしたい理由でもあるんだろうか
435デフォルトの名無しさん:2010/12/09(木) 20:27:45
なんかshiroさんがイカ娘に侵略されてるでゲソw
436デフォルトの名無しさん:2010/12/09(木) 20:42:38
Schemeの継続について教えてください。
(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 のローカルな変数値を保存するという
こどなのでしょうか?表示の便宜上行頭に全角スペースを使っています。
437デフォルトの名無しさん:2010/12/09(木) 21:22:49
>>436
doのマクロを展開すると再帰呼び出しっぽい形になって
counter=5の時点の環境を保存しているはず。
438デフォルトの名無しさん:2010/12/09(木) 21:38:56
再帰呼び出しと継続による環境の保存とは無関係だと思ふ
439デフォルトの名無しさん:2010/12/09(木) 23:45:09
>>438
関係あるよ。
変数が破壊的に変更されれば破壊されたままになる。
このへんが少し関係あるかも。
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme:generator%E3%81%A8do%E3%81%A8while
440デフォルトの名無しさん:2010/12/09(木) 23:52:28
doは名前付きletと同等の扱い、ってのはまいったなあ
おまいらdoなんて使ってないよな?
441436:2010/12/10(金) 02:10:06
>>437->>440
ありがとうございます。
do や let で繰り返す場合には,1回の繰り返しが起こる度に (前回の束縛関係
を上書きするのではなく) 毎回全く新しい環境が作られて、1回の繰り返し処理
が完了したらその環境は (継続が生成して保存されない限り) 捨てられるという
理解で良いでしょうか?もしそうだとすると、このような挙動は再帰呼び出しに
よる繰り返しで一般的なものなのでしょうか。つまり再帰による繰り返しでは
一般に、異なる繰り返し回が共通して同じ局所変数を見ているものではなくて、
毎回別の局所変数を見ているのだ、と。
442デフォルトの名無しさん:2010/12/10(金) 07:38:41
そうだよ
443デフォルトの名無しさん:2010/12/10(金) 10:43:06
クロージャーはclassでメンバー変数に状態もたせてメンバー関数に処理させるのと何が違うんだ
444デフォルトの名無しさん:2010/12/10(金) 12:01:19
>>443
本質的には同じ。
http://www.ibm.com/developerworks/jp/opensource/library/itm-progevo3/index.html
でも、メモリの確保と解放をを考えなくてよいというメリットはある。
だけど、 GC を用意しないといけないというデメリットと表裏一体でもある。
445デフォルトの名無しさん:2010/12/10(金) 12:40:38
let over the lambda の2章がちょうどその説明だった
http://letoverlambda.com/index.cl/guest/chap2.html
446デフォルトの名無しさん:2010/12/10(金) 18:48:38
theは無かった…
447デフォルトの名無しさん:2010/12/10(金) 18:59:51
ダグは何を思って「ラムダ以上みましょう」と書いてるんだろう 国内でもタイトルは普通に Let Over Lambda なのに…
448デフォルトの名無しさん:2010/12/10(金) 19:06:30
機械翻訳がおもしろかったのでネタとして、じゃないの?

昔、英語版を用意してないwebページの定型句だった "sorry, japanese only" を、
「哀れな日本人専用」とするみたいな。
449436:2010/12/11(土) 00:45:13
>>442
ありがとうございました。再帰呼び出しの際には前の環境を
上書きすると思っていたので継続について混乱していました。
450デフォルトの名無しさん:2010/12/11(土) 02:45:21
(define (concat lst)
(if (null? (car lst))
(concat (cdr lst))
(append (car lst) (concat (cdr lst)))))

これどこが悪いのか分からない…(´・ω・`)助けて偉い人
451デフォルトの名無しさん:2010/12/11(土) 03:01:59
再帰が終わる条件がないような気がする
452デフォルトの名無しさん:2010/12/11(土) 03:05:22
リストのnull要素を捨てる?
とりあえずappend使うなら
(append (list (car lst)) (concat (cdr lst)))
453デフォルトの名無しさん:2010/12/11(土) 05:39:14
これがエラーになるのってracketぐらい?
エラーメッセージは
else: not allowed as an expression

(let ((x 4))
(cond ( (> x 0 )
(cond ((< x 10 ) 30)
(else 100))
(else 5))))
454453:2010/12/11(土) 05:47:59
括弧の場所が間違ってただけだった
455450:2010/12/11(土) 15:15:29
450です
(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さん
 あ(・∀・)り(・∀・)が(・∀・)と(・∀・)う!
456デフォルトの名無しさん:2010/12/11(土) 18:23:42
clispでlabelsとか使ったときにdisassembleについて質問。
たとえば、
> (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するには
どうすれば良いんでしょ?
457デフォルトの名無しさん:2010/12/11(土) 23:47:21
>>456
1. labelsのスコープの中でdisassembleを仕込む。
2. 外側の関数を呼び出す。
458デフォルトの名無しさん:2010/12/12(日) 10:22:53
>>457
(rec x 0) の部分で (disassmble 'rec) あるい (disassemble 'sum-rec) しても
Undefined function 言われるだけだなぁ
459デフォルトの名無しさん:2010/12/12(日) 11:21:40
>>458
(disassemble #'rec)
460デフォルトの名無しさん:2010/12/12(日) 13:30:55
>>459
おおう、いつも function じゃなくて quote してたんで盲点でした
461デフォルトの名無しさん:2010/12/12(日) 20:07:02
Gauche 0.9.1 キタ
462デフォルトの名無しさん:2010/12/12(日) 23:02:24
ttp://practical-scheme.net/gauche/download-j.html
に無いと思ったらSourceForgeの方にあった
ビルドしてみよー
463デフォルトの名無しさん:2010/12/13(月) 12:23:11
schemeの構文オブジェクトがよくわからない
schemeの構文オブジェクトに相当するものはCommon Lispにはないの?
464デフォルトの名無しさん:2010/12/13(月) 12:41:46
quote evalとdelay forceが同じに見えてくる
465デフォルトの名無しさん:2010/12/13(月) 13:28:23
>>463
構文オブジェクトって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
466デフォルトの名無しさん:2010/12/13(月) 14:58:18
>>464
式を評価する文脈 (環境) が違う。
467デフォルトの名無しさん:2010/12/13(月) 23:19:26
λ計算の勉強をきっかけにschemeに入門して
チャーチ数とかで遊んでる若輩趣味グラマなんですが、質問です。

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組カッコが増えますが。
468デフォルトの名無しさん:2010/12/13(月) 23:42:06
LISPの仕様でたまたま無引数が許されるだけであって、
原則として1関数1引数の世界の話だからじゃないの
469デフォルトの名無しさん:2010/12/14(火) 00:20:41
そうだね。 λ計算では常に引数は一個。
と言うか、λに値を与えて呼び出すのではなく、値にλを適用するっていうイメージ。
(λ計算の世界では「値」もλなわけだが。)

Haskell とかだとカリー化があるからそのへんよくわかると思う。
例えば、
hoge a b = a + b
という定義は
hoge a = (\b -> a + b)
と同じなので、引数が2個以上みたいに書いても構文糖に過ぎず、
Haskell の世界では1引数の関数しかない。

まぁ、要するにλ計算のλと Lisp 系言語の Lambda は同じものではないってこと。
関数をオブジェクト (値) として扱うという思想の根源にはλ計算があるのは間違いないけど、同一視はできないよ。
470デフォルトの名無しさん:2010/12/14(火) 03:12:28
ありがとうございます。納得しました。
これまで計算機科学は齧ってすらいない素人の独学なので気付けませんでした。
lambdaとかコンビネータである程度遊んだから、真面目に聖書から勉強してみるかな。
471デフォルトの名無しさん:2010/12/14(火) 11:07:37
Gaucheはマックでcffiが動かない問題を解決できたのだろうか
472デフォルトの名無しさん:2010/12/14(火) 22:37:02
9 Programming Languages To Watch In 2011

Go (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/
473デフォルトの名無しさん:2010/12/15(水) 10:59:58
http://d.hatena.ne.jp/camlspotter/20101212/1292165692
こんな感じのLisp批評はないものか
474デフォルトの名無しさん:2010/12/15(水) 23:31:37
Gauche-glに続いてGauche-gtkもWindowsで簡単に動くようになればいいな
475453:2010/12/18(土) 13:44:44
クラスと構造体が処理系ごとに違いすぎる
せめてGaucheとRacketの間をマクロで変換できたらなあ
476デフォルトの名無しさん:2010/12/18(土) 14:02:09
gauche.record使えばかなり近いんでない?
477デフォルトの名無しさん:2010/12/20(月) 21:21:42
R6RSのレコードか、SRFIのレコードはないんだっけ?

そんなにRacketのレコードって独自色強かったっけ。
マクロで融通できないくらいに。
478デフォルトの名無しさん:2010/12/22(水) 19:28:13
なんで声優板にLispのスレがあんねんと思ったら…。
時代は変わってんな。
479デフォルトの名無しさん:2010/12/22(水) 20:17:03
LISPのイベントでCommon Lisp講座を開催したらプログラマの間で伝説になるな
480デフォルトの名無しさん:2010/12/23(木) 09:02:53
LISPのイベントに「くあっどぴゅあ」のヒロインのようなシャツを着て参加するとか
481デフォルトの名無しさん:2010/12/23(木) 09:24:11
>>479
まず、LISP が Common Lisp にどこまで適合してるかが問題だ。
482デフォルトの名無しさん:2010/12/23(木) 12:22:02
>>478
テンプレに入れるべき
483デフォルトの名無しさん:2011/01/02(日) 00:58:29
別板なのですが、「教育用言語としてlispは素晴らしい」と主張している人がいます。
なんか正月早々ものすごく必死です。
私は .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
がソースだと主張して譲る気配がありません。

何か客観的に説得する材料とかアンケートとか、資料があったらご教示ください。
単純にググっても、あんまりいい資料が出て来なかったので(探し方が下手と言われそうですが)。
484デフォルトの名無しさん:2011/01/02(日) 01:07:04
新年早々張り切ってるねw
あなたの存在自体が、「教育用言語としてlispは素晴らしい」という主張があり得ないことを
雄弁に物語っている。しっかり戦ってきてください。
私も絶対にあり得ないと確信する。
485デフォルトの名無しさん:2011/01/02(日) 01:10:07
>>483 「どのあたりの層を対象に教育?」によって提示する資料は異なると思うんだが…
486デフォルトの名無しさん:2011/01/02(日) 01:16:07
>>483
そんな話を正月早々おおまじめにこのスレにふってどうする。
まぁ、面白半分でオレの意見を述べる。


LISPが教育用言語として不向きなところ:
- 見た目がとっつきにくい。
- フォンノイマン型計算機の基本的な構造は手続き的なので、「まずは手続き型」というのにも一理ある。
- 就職に有利ではない。Excelのマクロでも書けたほうがマシ。

LISPが教育用言語として向いているところ:
- マルチパラダイム。これだけで、いろいろなプログラミングパラダイムのさわりを導入できる。
- 大学での計算機科学の入門教育用言語としてはかなり実績がある。


実装の多様さは問題にならないだろう。
本当に教育用に向いているなら、教育用LISP国内統一仕様でも作ればよろしい
(Scheme R5RSとかをそのままで良いと思うが)。


LISPのマクロは他の言語と比べて独特だし、原理的には存在しなくかまわないものなので、とくに重視する必要はないと思う。
487デフォルトの名無しさん:2011/01/02(日) 01:25:56
>>483
万能の解はない。 教育用として素晴らしい点もあればそうでない点もある。
LISP にはおよそプログラミング言語というものにある全ての概念を表現できる可能性があるので、ひととおりの概念を教え込めるというメリットはある。
ただ、あまりにも何でもアリというのは教える立場からすると方向を決め難くてやりづらいというデメリットもある。

LISP は派生言語が多いというのは >>486 は問題にならないと述べているけれど、これはメリットにもデメリットにもなると思う。
emacs lisp と Common Lisp なんてダイナミックスコープとレキシカルスコープという根本から違うからな。
これは言語のあり方について示せる機会でもあるけど、混乱を生む元だとも言える。

事実としてかつては MIT での教育 (教養過程) に Lisp の方言であるところの Scheme が用いられていた。
(ただ、今では Python に切り替えれられているとのこと。)
国内でも多くの学校で実績がある。

教える側・教えられる側の素養によっても、あるいは時代背景によっても良い選択が何かというのは違ってくる。
仮に数値的に全体的な傾向があったとしても、アンケートなり何なりの取り方によっても変わる。
そんなのに客観的な要素を持ち出したって無駄だよ。
英語の方がユーザーが多いから日本語は英語より劣ってるとか言うようなもので馬鹿げてる。

個人的な見解だが、他の言語と同程度には教育用に適していると思う。
488デフォルトの名無しさん:2011/01/02(日) 09:40:14
>>483
Lispは、向いてるかどうかは別としても、教育関連では割と大御所だと思うよ。
以前のMIT以外にも、国内でもScheme使ってる(使ってた)所はある。普通に探せば出てくる。

で、本題の向いてるかどうかだけど。特にScheme辺りは、最小主義を推し進めた結果、
少ない要素で多くのことを表現できるのがメリットだと思う。学生も覚えることが少なく済むし、
講師も枝葉の概念をいちいち教えずに済む。これは教育の現場では大きなアドバンテージ。
例えば、この演算子の結合順序は〜、とかは、計算機科学の本質に全然関係ないじゃない?
そういうのを排除して、本質的なアリゴリズムやデータ構造により長い時間を割ける。

教育面でのLispのアドバンテージはそれだけじゃないかな。後は他と似たり寄ったりだと思う。
カリー化とか関数的なアプローチに関しては、Haskellの方が上手く扱えるし、オブジェクト指向は、
CLOSは主流とはスタイルがやや異なるし、全てがオブジェクトでもない。PerlやPythonのように、
ライブラリが豊富なわけでもない。

あとは、上でも触れられているけど、どこに重点を置いた教育をするかで変わってくるだろうね。
即戦力ならJavaやRubyだろうし、より理論を重視するならHaskellやCleanの方が面白いだろうし、
アーキテクチャを強く意識するならCだろうし。特徴を出そうとすると、Lispは選びにくい。
489デフォルトの名無しさん:2011/01/02(日) 09:58:28
あとは、流石に古典BASICとかと比べられると悲しい。

Lispは古い言語だけど、最近の言語が取り入れている(取り入れようとしている)要素を、
いち早く(数十年前のレベルで)採用した近代的な言語でもあるのよ。例えばJavaだったら、
クロージャとかtail callの最適化とか。

その辺りを調べてみると、より公平な判断を下せると思う。
知らないものについてあれこれ論じても、建設的な結果は出ないんじゃないかな。
490デフォルトの名無しさん:2011/01/02(日) 10:08:11
>>483
あなたが例に挙げているのは易しい言語ばかりです。
大学の教育用言語としてあなたの挙げた言語のみを採用すると、
職業適性のなさに事前に気がつく事ができないかもしれません。

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
491487:2011/01/02(日) 10:44:29
あえて他の言語との比較はしなかったのだけれど、 >>490 が「易しい言語」を持ち出しているのでそのことにも触れよう。
「教育用」という立場からすれば言語が易しいことは必ずしもデメリットとは言えない。
教育したいのは言語そのものでなく、基礎的なアルゴリズムだったり、問題の定式化だったりするから、言語で手間を書けたくないからね。

ただ、ウィトゲンショタインは言葉の限界が世界の限界であると述べている。 言葉が考え方を縛ってしまうのだ。
(共産主義の国家で表現の規制が行なわれやすいのは、それが思考に方向性を与えるのに有効だからだ。)
例えば Java なら問題をオブジェクト指向で解決しようとする。
Java で教育された者はオブジェクト指向に考え方が制約付けられてしまうわけだ。

一方で、 Scheme 使いなら大抵一度は読む SICP には様々なパラダイムの構築の仕方から書かれている。
問題解決に適切なパラダイムが何かということから考えさせられる。

産業界では Java とかが幅をきかせているけど、 LISP の何でもアリっぷりはチームでの開発には向いていないことがわかっている。
言語自体がある程度の枠組みを持ってないと統制が取れないんだ。 無秩序になる。
それと、チームではたとえ個人の能力を制限してでも全員が一貫した方向性を持った方がうまくいくと言われている。
こういった産業界での事情を考えると、個人の能力を伸ばすのが適切な教育なのか、使える教育なのかということになる。

だから、どんな言語が適切なのかはまずどんな教育をするのかを定義しないと評価不能ってこと。
492デフォルトの名無しさん:2011/01/02(日) 10:56:24
どんな屁理屈をこねようとポインタや再帰を理解できないダメプログラマを擁護する理由にはならない。
493491:2011/01/02(日) 11:22:00
つまり、「教育」にはふたつの側面がある。
「能力を伸ばす」というのと「一貫した規律にあてはめる」というもの。

前者ならばより自由な言語を選択した方がいい。
後者なら実際に産業界でよく多く使われているものを選んだ方がいい。

>>492 はプログラマとしての最低ラインにポインタや再帰を挙げているけれど、
極端な話をするならそのチームが一貫してポインタも再帰も使わないという規律の中でなら問題にならない。
現実にはそんな規律では仕事にならないんだけどね。

普通の LISP 使い、例えばこのスレにいる人々で「LISP しか使えない」という人はまずいないよ。
LISP がわかって Java がわからんとか BASIC がわからんとか言う奴はいない。
だから、まず個人の能力を充分に高めた上でプロジェクトごとに規約を決めるという運用がだいたいうまくいく方法じゃないかなぁ。
と言うことを考えると LISP って結構良い選択ってことに。
494デフォルトの名無しさん:2011/01/02(日) 12:01:59
>>493
その論旨だと、Lispでなくとも、マルチパラダイムの言語ならどれでも良い選択になる。
元の話は、教育言語としてのLisp、って話なんだから、論点がずれまくってるよ。

Lispがどう自由かという話をしないと、良い選択になる理由が読み取れない。
その辺の見解を元の質問者も知りたいだろうし、俺も聞いてみたい訳で。
495デフォルトの名無しさん:2011/01/02(日) 12:39:08
言語がシンプルで憶えなきゃいけないことが少ないってのは
本題のアルゴリズムとか教えるには余計なことに時間を取られずに済むからいいことだよね
教えたいのは言語の枝葉末節じゃなくて「プログラミング」ならね
496デフォルトの名無しさん:2011/01/02(日) 13:19:45
計算機科学の講義と、プログラマー養成講座じゃ向いてる言語かなり違うと思うぞ。
497デフォルトの名無しさん:2011/01/02(日) 13:22:19
GCのある言語はよくない気がする。
C言語とかでmallocとfreeの対の関係を覚えさせないと。
なんでLISPでばかばか作りっぱなしで問題ないのか理解しない。

それと教育に使うならLISPじゃなくScheme限定だろう。
LISPは歴史的経緯で変な制約が残ってるし。
Schemeと対比させてLISPを学ぶのが目的ならいいけど、
そうじゃないし。

S式とquoteの問題がある。
これってLISP系独自の概念だから、
なんで括弧に括るの?とか、
引用符の片側ってなんで閉じないの?とか、
まあこれぐらいはそういうもんだ、でいいか。

記法についての問題もある。
前置記法ですよといってもわからないから、
HTMLやXMLのタグと同じですがなと説明するかな。
HTMLってナニと言われたら、 1 + 2 * 3を(+ 1 (* 2 3))と書きます、
これの利点は優先順位がなくなることです、って説明するかな。
LISPは言語のアセンブラです、他の言語はすべて
LISPの概念から作られてます、みたいなホラ吹いても多分騙される。
498493:2011/01/02(日) 13:32:24
>>494
俺は最初から他の言語と同程度に良いと述べている。
逆に言えば、LISP が他の選択肢より悪いということはない。
それだけのことだよ。
複雑なトレードオフの関係を知りたいなら >>483 には LISP をまず学んでもらうしかない。
499デフォルトの名無しさん:2011/01/02(日) 13:34:44
まあ会社の新人にLispは教えない。普通はC。
逆に情報系学部の一年生ならLisp(Scheme)から入るのはいいと思う。

500デフォルトの名無しさん:2011/01/02(日) 13:38:30
リスト処理の授業
(car (cdr '(a (b) c))
引用符が閉じてませんよ、
さっき説明しただろ聞いてなかったのか。
carて車の免許取れってことですか、
取っといたほうがいいな。
CDRってウケル、今はDVDの時代ですよ、
ああ、そうだね?
つーか括弧も閉じてませんよ、
そう、その言葉が聞きたかった。
carとcdrはちゃんと説明した方がいいね。
(cadr '(a (b) c)))
はあ?cadrってどう発音するんすか、
カドル。じゃあ、cadddrは?カドドドル。
caaaarは?かああああ
501デフォルトの名無しさん:2011/01/02(日) 13:46:37
括弧が一杯あって気持ち悪いって言われて
病院搬送されてPTAで問題になるのが一番怖いかな。
これが本当のモンスターペアレントです。
502デフォルトの名無しさん:2011/01/02(日) 13:50:11
男ならカッコつけろよ
503デフォルトの名無しさん:2011/01/02(日) 13:54:06
>これの利点は優先順位がなくなることです、って説明するかな。

運動会で順位を付けない時代だから
説明次第でPTAに支持されるな。
そういう配慮をした言語です。とっても安心です。
504デフォルトの名無しさん:2011/01/02(日) 13:56:18
どうしてこういう話題になると馬鹿ばっかり湧くんだろう
505デフォルトの名無しさん:2011/01/02(日) 13:57:45
じゃあ数学もS式でやったらええねん
(+ 1 2 3 4 5 6)とか書けて便利やねん
そのまま計算機に落とせるねん
506デフォルトの名無しさん:2011/01/02(日) 13:59:16
N88BASIC(86)で行つながりに気づかずデバッグで悩むところから始めるべき
507デフォルトの名無しさん:2011/01/02(日) 14:06:54
lambdaの授業
((lambda (a) a) 1)
じゃあいきなり聞こう、これの答えは何?
はいじゃあ、順番でアキちゃん答えてみて。
えーと・・a?
ぶぶーおしいけどちがいます、わかる人いるかな?
1ですせんせー
あれー?どうしてそう思った?正解です!
サクラが必要だな。
508デフォルトの名無しさん:2011/01/02(日) 14:08:02
>>491
> ウィトゲンショタイン
巣にお帰りください
509デフォルトの名無しさん:2011/01/02(日) 14:12:59
(lambda (a) a)の答えは何?と聞かれたら、
なんて答えればいい?
#<closure>?関数自身?
それとも式が不完全ですって言う?
そんな疑問を抱かないように誘導する?
510デフォルトの名無しさん:2011/01/02(日) 14:20:19
>>509
(lambda (a) a)がそのまま返る、
つまり式そのものが答えでいいんじゃないの?
義務教育でLISPってどうなんだろう
'a => aのように(lambda (a) a) => (lambda (a) a)
としてしまうと誤解するかな
'(lambda (a) a) => (lambda (a) a)
とは違うわけだし
511デフォルトの名無しさん:2011/01/02(日) 14:21:28
「答え」に何を求めてるか知らないけど、
その式は単に引数をそのまま返す関数でしょ。

一応クロージャでもあるだろうけど、あまり適切な例でもないような・・・
512デフォルトの名無しさん:2011/01/02(日) 14:29:30
そもそもlambdaって何?
英語読めませんがな。
(無名関数 (x) x)
しかし、「無名」ってなんとなくNGのような気がするし、
名前を付けなくていいってのは利点でもあるけど、
知能育成の妨げになるような気がする。
義務教育期間はlambda禁止じゃないか。
513デフォルトの名無しさん:2011/01/02(日) 14:36:47
λλλλ...
514デフォルトの名無しさん:2011/01/02(日) 14:52:01
名無しはタブーってありそうな話だな。

関数の授業
(define (f a) a)
上のようなfという名前の関数を定義しました、さて
(f akichan)
この答えは判るかな?
それじゃあアキちゃんリベンジ!答えてみて。
え・・a?
おしいけどちがいます。わかる人いるかな?
akichanですせんせー
ちがいまーすakichanは定義されていないので
答えはエラーです引っ掛け問題でしたー
アキちゃんいじめだー
515デフォルトの名無しさん:2011/01/02(日) 15:03:52
どうでもいいけどなぜにアキちゃん?

初めてプログラムを知るならLispでもいいかもしれんとは思うが(先入観無いから)
電算機概論と平行に進めないとよろしくないので情報専門の学科以外は止めた方がぶなんじゃねぇの?
516デフォルトの名無しさん:2011/01/02(日) 15:27:43
アキちゃん飲み込み悪すぎだろwww
517デフォルトの名無しさん:2011/01/02(日) 15:38:02
教育というよりも、研究向きの言語であることは確か
とくに学生に論文を量産するような学部なら、始めからLISPを教育すべき
518デフォルトの名無しさん:2011/01/02(日) 15:45:15
「アキちゃんが定義されていない」は
明らかに問題発言
しかも引っ掛け問題に欠陥児童の名前を使うとか論外
答えはアキちゃんでいい
519デフォルトの名無しさん:2011/01/02(日) 15:47:41
もちろん問題の整合性も考慮するなら、始めから
(define akichan 'アキちゃん)とでもしておくべきだろう
520デフォルトの名無しさん:2011/01/02(日) 15:54:46
それがエラーになるのはLispだからじゃないの

恒等関数に変数akichanを適用したのなら値はakichanになる
f(x) = x に x0 を適用したら値はf(x0)だ
数学ならそれで終わりでしょう

なぜLispではシンボルakichanのまま計算できないの?とアキちゃんは
疑問に思うに違いないぞ
521デフォルトの名無しさん:2011/01/02(日) 16:07:03
シンボルと識別子の混同はよくない。
Scheme と Common Lisp でもそのあたりの意味論は違うんじゃないの?
両方をよく知ってる人はちょっと解説してくれんか
522デフォルトの名無しさん:2011/01/02(日) 16:10:28
>>521
ごめん、Lisp用語の「シンボル」というつもりで深い意味で言ったのではないので…

俺が言ったのは、単にsymbolic algebraのsymbolだよ
数学ならakichanが何であるかは気にしないし、何でも良い
523デフォルトの名無しさん:2011/01/02(日) 16:30:10
quoteがないシンボル => シンボルなLISPがあったっていいじゃない
初出のシンボルに束縛されるのはそのシンボルで
(define シンボル 値)として初めてシンボル => 値になるとか
そういう初等レベルLISP
未定義とかは中等レベル以上の概念
524デフォルトの名無しさん:2011/01/02(日) 16:37:18
>>523
LISP じゃないけど、 pure なんかのシンボル (変数) の扱いはそんな感じ。
525デフォルトの名無しさん:2011/01/02(日) 16:41:47
>>523
遅延評価なら
((lambda (x) x) x0) を x0 までは簡約できるのかなあ
ふつうのLispだとまっさきにx0を評価しようとしてしまう

俺も未定義はアキちゃんには難しいと思った
環境を教えざるを得ないのでλ計算+置換モデルよりむずかしいし
特に数学的でもない
先生はいじわるだ!
そんなことを思ったので>>520を書いた15の春
526デフォルトの名無しさん:2011/01/02(日) 16:52:43
既に流れが変わってるけど >>483 は良い燃料になったな。 元の議論がどのスレか分からないから想像だけど、紹介されたウェブサイトは根拠というより資料として提示したんだろう。 LISP だけを取り上げてるわけでもないみたいだし。
探せば LISP が教育用に不向きという結論の資料だって出てくるだろうし、その逆だって出てくる。 自分で理解せずに偏った資料を提示するのが「説得」だと思ってるなら議論に加わるべきじゃないな。
527デフォルトの名無しさん:2011/01/02(日) 17:28:16
簡単だよ。教育用にLispは素晴らしいという人物自身がLispで教育した人間を示せばいいのさ。
528デフォルトの名無しさん:2011/01/02(日) 17:35:12
MITのコース6.001 (電気電子、計算機科学選考必修の入門授業) で
Schemeが使われていたのは、言語として上とか下とかじゃなくて、
「計算機科学の基礎を教えるコースだから、言語の説明に時間を
取られたくない」、という理由だよ。Schemeの根本的なところなら
最初の授業の前半で済ませられる。
でも現代は、最小限の部品から全部手作りするって時代じゃなくなった。
ロボットを動かして意味のあることをさせようと思ったら有りものの
ライブラリを持ってこないと一学期で終わらない。それがコース変更の理由。
ソースはサスマン。
529デフォルトの名無しさん:2011/01/02(日) 17:37:09
計算の理論から教育する場合はLISPの方が楽じゃね?
530デフォルトの名無しさん:2011/01/02(日) 17:59:23
>>529 lamda 計算ベースの言語なら何でもええんちゃう?
531デフォルトの名無しさん:2011/01/02(日) 18:09:06
>>528
基礎を教えるのに、時代が変わると基礎も変わるって明らかにおかしいだろ
そんなものは基礎じゃねぇよ
532デフォルトの名無しさん:2011/01/02(日) 18:23:56
>>531
計算の理論が登場したのが1930年末後半だから、計算機科学の基礎らしきモノが出てきてからまだ70年しか経ってない
基礎もまだ日進月歩
533デフォルトの名無しさん:2011/01/02(日) 18:33:30
>>531
釘とかネジとかから自作していたのが、
そういうのは出来合いのものを使うようになっただけ。

ttp://d.hatena.ne.jp/leque/20090326/p1

Pythonなのは、単にライブラリがPythonにあったから。
534デフォルトの名無しさん:2011/01/02(日) 18:41:16
>>531
時代が変われば、教えなきゃならん基礎も変わる。

いいからサスマンの書いた文章をまずは読んでみろ。
535デフォルトの名無しさん:2011/01/02(日) 18:50:12
>>531
基礎よりも初歩といったほうが適切かもしれない理由だから。
536デフォルトの名無しさん:2011/01/02(日) 18:58:02
時代が大切なら、理論と言わず歴史を教えればいい
理論はおいといて歴史が大切だと最初に正直にそう言えば何も問題なかった
537デフォルトの名無しさん:2011/01/02(日) 19:00:33
>>536
時代に合わせた教育が必要だから歴史を無視できるわけではないが、「置いといて」はないだろw
538デフォルトの名無しさん:2011/01/02(日) 19:03:50
時代背景は教える側が考慮すべき要因だろ。
それを教えりゃいいってものじゃない。
まぁ >>536 はネタなんだろうけど。
539デフォルトの名無しさん:2011/01/02(日) 20:12:22
そのロボット制御用のライブラリをSchemeで実装すればいいのに。
540デフォルトの名無しさん:2011/01/02(日) 21:39:33
歴史的背景がわからないもんで理論がわからない、というのは確かにあると思う。
先生たちが不機嫌になるのも要するに、お前理論が出てきた経緯を知らないくせに
知ってるふりするなよ、ということを暗に言いたいからなんだろう(自分で
教えとけよと思うけど、うっかり言えない事情もあるんだろ)。

結論としては、学会レベルでまとめて公表しておいてください。
541デフォルトの名無しさん:2011/01/02(日) 21:56:42
話の流れを追えなくなった
だれかサマライズしてくれ
542デフォルトの名無しさん:2011/01/02(日) 22:32:51
>>541
明けましておめでとうございます ← 今ここ
543デフォルトの名無しさん:2011/01/02(日) 23:12:57
関係ないけど、>>483のリンク先にprologがない。
彼らはいつまで引きずるつもりなんだ。いい加減区切りつけるべきだろ。
544デフォルトの名無しさん:2011/01/03(月) 00:49:26
言語が登場した経緯の中に他の言語の影響が見られることはあるけど、
言語を作った理由って割と後付けっぽいよな。
実際のところは、オモロいパラダイムや機能を思い付いたから作ってみましたって感じだろ。
論文にはその機能で解決できる問題とかを列挙してあったとしても、無理があることも多い。
本当にまっとうに、それがどうしても必要なんだという理由があることはまれなんじゃなかろうか。
そんなことをまとめたところで理解に役立ちそうな気がしない。
ずっと後の世であれば歴史研究の一分野として成立するかもしれんけど。
545デフォルトの名無しさん:2011/01/03(月) 07:36:48
>>544
C言語は必要だから作ったといえるだろうな。
(『どうしても必要不可欠』とまではいえないだろうけど)

Erlangもそうじゃないのかな。

でも、それ以外はどうしても必要だから作られた言語なんて思いつかないな。
546デフォルトの名無しさん:2011/01/03(月) 08:09:03
最近の言語で生き残ってるのはベターCモアベターLispって感じのちゃんとした目的があるとおもうけどな。
547デフォルトの名無しさん:2011/01/03(月) 09:57:19
理論的に明確な意味付けがされている、とかいう意味合いで言っているじゃないの?
548デフォルトの名無しさん:2011/01/03(月) 10:59:04
549デフォルトの名無しさん:2011/01/03(月) 11:15:53
教育は大事だけど、それだけじゃないよな
おれは Common Lisp か Clojure で、
すげーシステムを書くぜ
550デフォルトの名無しさん:2011/01/03(月) 11:50:10
>>548
そのスレ見てて思い出したんだが
昔の8bitBASICではNEXTの後の変数は省略した方が速くなったんでもっぱら変数なしだったな
551デフォルトの名無しさん:2011/01/03(月) 12:53:09
>>545
Lispは必要だから作ったんだろ?
そしたら化けた。
552デフォルトの名無しさん:2011/01/03(月) 14:13:39
>>539
それを作る人が教育されなかったからじゃないかな
553デフォルトの名無しさん:2011/01/03(月) 14:17:45
たとえばどんな?
個人的に実験するにはlisp系の言語はとても役に立つんだけど
教育コスト考えると使いにくいんだよね
554デフォルトの名無しさん:2011/01/03(月) 14:27:16
>>551
そだね、だけど、現場でCが必要とされるほどの需要がなかった

# 高級アセンブラと高級言語を比べられても… って気はするけど
# ぶっちゃけ、手続き型言語なんて(OOPを含む)アセンブラの拡張

やっと関数を引数にする関数が認められてきた程度
関数を返す関数なんてのは邪道以外の何者でもないのが
現場なんだよおぉ!!!
555デフォルトの名無しさん:2011/01/03(月) 14:59:09
>>551
数式をS式で書く実験 → これでプログラム書けね? → LISP誕生
556デフォルトの名無しさん:2011/01/03(月) 15:01:38
        ヾ  / 
       ,. -ヤ'''カー、
 ー―ァ  /r⌒|:::|⌒ヾ
   _ノ オ{(  |0|  )} オオオォォォォ!!!!!
     __,ヽ,ヾ,_|V|,_ノ、/ ,r-,,=
    ,゛==ゝ_ViV_ノ~i/ 〃 `ー―-、
    /  /⌒`//´⌒c/^^^ ))))))))))
 ,,―イ  {ー''"~{ {~゛`ー`/'`'~/ー--―'
))   ,./ゝ_/∧ゝ_ノ  ノ
 ー''"  |ロ  ロ    |
557デフォルトの名無しさん:2011/01/03(月) 15:01:46
激しく違うし。

MLか何かと勘違いしてね?
558デフォルトの名無しさん:2011/01/03(月) 15:25:47
MITのAI研でAdvice Takerの実験のために作ったんじゃなかったっけ?
559デフォルトの名無しさん:2011/01/03(月) 15:56:26
>>551
そうか? LISPの最初の実装こそ、いわばジョークプログラムみたいなもんだったと思うけど。
すくなくとも、ターゲットアプリケーションなんてなかっただろ。
560デフォルトの名無しさん:2011/01/03(月) 16:26:41
>>559
lispは仕様が(方向性がというべきか?)固まる前から
「こんなふうにコーディングできるはずだ!」といって
ゼミで机上コーディングが盛んに行われ、討論されていた言語だからなあ。

規模はともかくとして、実行させたいプログラムは
処理系の実装が動き出した段階でたくさんあったんじゃないかな。

561デフォルトの名無しさん:2011/01/03(月) 17:12:43
まぁ、当時の言語って言うと Fortran とか ALGOL とかの時代だからな。
それでもリスト操作やら述語論理を書けるにしても、表現形式としてはあからさまに不向き。
今なら必ずしも LISP でなくてよいと思うけど、当時にしてみれば全く新しい概念だったには違いない。
562デフォルトの名無しさん:2011/01/03(月) 17:28:06
>>561 当時はM式で書いてたんだが
563デフォルトの名無しさん:2011/01/03(月) 18:14:55
>>545
たまにはOCCAMの事も思い出してあげてください
CSPの為に作られたんだけど専用プロセッサと相まって話題にはなったが普及はせんかった奴
564デフォルトの名無しさん:2011/01/03(月) 18:19:32
565デフォルトの名無しさん:2011/01/03(月) 18:37:32
>当時にしてみれば全く新しい概念だった

歴史って、その当時ごくふつうだった概念を扱うんじゃないのか?
566デフォルトの名無しさん:2011/01/03(月) 18:40:15
>>563
トランスピューターかよ
昔、8 個使って専用画像処理装置組んだことがある。
量産品は売れなかったけど、試作品はごく一部で公表だったw
567デフォルトの名無しさん:2011/01/03(月) 19:08:00
>>566
そそ
大規模な奴だと阪大の先生がCGでがんばってたな〜くらい
でも昨今のマルチコアでちょっと再注目されるかもってかんじ

スレに合わせてLispの話だと純粋にプログラムの事を知らない人が必要にせまられてlispでカスタマイズスクリプト書く時の方が
プログラマが新たにLisp覚えるよりも早く習得するとかいう話が昔あったのだけどだれか出典覚えている人いませんかね?
autocadかemacsのどっちかだったかすらうろ覚えですまん
568デフォルトの名無しさん:2011/01/03(月) 19:39:11
>>567
> 純粋にプログラムの事を知らない人が必要にせまられてlispでカスタマイズスクリプト書く時の方が
> プログラマが新たにLisp覚えるよりも早く習得するとかいう話
ストールマン(当然elispの話)がインタビューか何かで喋ってたような記憶が…
「プログラムの事を知らない人」ってのがFSFの事務の女の子だったような記憶も…
569デフォルトの名無しさん:2011/01/03(月) 23:25:37
Gaucheの人がスクェアの仕事してたみたいなこと書いてたけど
FF14スレには中国人がみんな作ってるって書いてあった
謎だな
570デフォルトの名無しさん:2011/01/03(月) 23:27:00
>>569
Gauche の中の人が関わってたのは FF7 の頃の話だべ。
571デフォルトの名無しさん:2011/01/03(月) 23:43:45
>>569
時系列を考えろよ。
Gaucheの中の人がやってたのは、>>570も言ってるけど、確か、FF7とか、壮大にコケたFFの映画。
572デフォルトの名無しさん:2011/01/04(火) 00:24:39
>>568
おお、それだと思うちと検索キーワードに追加してみるよ、ありがとう
573デフォルトの名無しさん:2011/01/04(火) 00:32:10
>>554
> やっと関数を引数にする関数が認められてきた程度
> 関数を返す関数なんてのは邪道以外の何者でもないのが
> 現場なんだよおぉ!!!

板違いの愚痴かよw
574デフォルトの名無しさん:2011/01/04(火) 01:51:31
Xcode 用に Scheme (特に Gauche) のシンタックスハイライト+インデントを行う
プラグインを作ってみたので、Mac な方はお試しどうぞ。

http://code.google.com/p/scheme-indent-xcplugin/wiki/ReadMe
575デフォルトの名無しさん:2011/01/04(火) 07:48:11
>>483
アメリカで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
576デフォルトの名無しさん:2011/01/04(火) 09:18:27
プログラマーの文章は読めたもんじゃないな
577デフォルトの名無しさん:2011/01/04(火) 12:17:17
だからHow I lost my faithを書いたErann Gat = Ron Garretは、
用途に合わせてPythonとかも使うようになっただけで、
Lispを使うのを止めた訳じゃないと何度言えば(ry

つい最近もCCLのMLとかTracにいたよ。
578デフォルトの名無しさん:2011/01/04(火) 12:25:26
lispからffiでpython使うのが最強
579デフォルトの名無しさん:2011/01/04(火) 19:21:33
>>578 ライブラリ使うだけならpythonの必然性皆無
580デフォルトの名無しさん:2011/01/04(火) 21:55:37
そもそもCのライブラリの管理方法が自由すぎるのか
自由だと何をやっても必然性皆無
581デフォルトの名無しさん:2011/01/05(水) 00:53:31
>>580
日本語でOK
582デフォルトの名無しさん:2011/01/05(水) 09:22:57
ライブラリ管理のためにグルー言語を利用するのは悪くない。
グルー言語に頼らずに管理するのは意外と難しいのかもしれない。
583デフォルトの名無しさん:2011/01/05(水) 12:10:54
グルグルー
584デフォルトの名無しさん:2011/01/05(水) 12:28:46
>>582
えっと、それはmakeの代わりにperl使うとか、debパッケージみたいなのをpythonで構築するとかいう話ではなく、
ライブラリはCでゴリゴリ書いて、それをLISPやRubyで使うのが気持ちよいプログラミングっていう話?

後者なら、オレも賛成。
これからは速度が非常に重要なときはOpenCLとか使うことになるんだろうし、そのへんはCとかCライクな言語でゴリゴリ書けばよい。
それを関数型言語で優雅にラッピング。これ最強。
585デフォルトの名無しさん:2011/01/05(水) 14:04:17
マクロのあるlispはグルーコード向け言語
586デフォルトの名無しさん:2011/01/05(水) 21:49:16
>>585
意味がわからない
グルーというのはライブラリをくっつけるのだから、マクロは関係ないよね
587デフォルトの名無しさん:2011/01/06(木) 01:34:24
>>586
>>585じゃないけど、APIをラップするとき、マクロがあると凄い便利だけど。
FFIでマクロ抜きとか、割と死にたくなる。リソースの管理とか特に。
with-dbみたいなマクロ使わないの?
588デフォルトの名無しさん:2011/01/06(木) 12:36:55
mysql sqlite posqr を全部同じ様に扱えるようにマクロ等うでうまくラップしたのは、割とどこの処理系にもあるよね
589デフォルトの名無しさん:2011/01/06(木) 12:49:06
>>585のような考えはLisperの常識かと思ったが、
最近はAPIも統一傾向だし、
OOラッピングが一般的だから、
そういう感覚も薄れてきてるんじゃないのかね。
590デフォルトの名無しさん:2011/01/11(火) 18:14:34
GaucheのコードをあんまりいじらずにネイティブコンパイルするScheme処理系って無いでしょうか?
Windows7です。
591デフォルトの名無しさん:2011/01/11(火) 18:39:00
Gaucheも非公式だけどdll作れるが、完全にネイティブコードにしたいの?
592デフォルトの名無しさん:2011/01/11(火) 18:46:04
コンパイルしたいという理由が、実行可能バイナリが欲しいということなら、このへん参考になるかも
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aStandAloneProgram
593デフォルトの名無しさん:2011/01/11(火) 19:05:27
>>590
無い。R5RSとSRFIくらいしか使ってないなら別だけど。
それ以外のライブラリの互換性は、Schemeでは無いに等しいから、
マクロ様のお世話になるしかない。いずれにせよ、色々書かないといけない。

C経由も含めると、Chez(商用)、Gambit、Chicken、Larceny、Bigloo、MIT、Stalin(R4RS)、
Ikarus(開発停滞)、Vicare。JITも含めて良いなら、Racket、Mosh(ブランチ)、Ypsilon(trunk)。

とりあえず、何のためにネイティブコンパイルしたいの? 速度?
594デフォルトの名無しさん:2011/01/11(火) 19:28:01
>>593
フォルダをあさって特定のファイルをカウントして結果をCSVファイルに書き出すスクリプトをGaucheで書いたんですが、
そのスクリプトを、Gaucheがインストールされていない(勝手にインストールできない)会社のマシンで使いたいです
595デフォルトの名無しさん:2011/01/11(火) 19:33:50
>>594
Gauche のバイナリにインストーラはついてるけど、インストール時にやってるのは環境変数の追加程度のはず。
インストール後のフォルダをそのままコピーして持っていってもおおよそ問題ない。
slib を使っている場合なんかだと slib の場所を gauche が見付けられないこともあるが…。 それもちょろっと弄れば大丈夫。
USB メモリか何かに入れていってそこから起動させればいいんじゃないかな。
596デフォルトの名無しさん:2011/01/11(火) 19:34:43
>>594
GaucheのWindowsバイナリはどこに展開しても動くはずだから、手っ取り早くやりたいなら
自分のマシンのGaucheのツリーをzipで固めて持ってくとか、usbに入れてゆくとかは?
それさえも出来ないのなら、バイナリ作っても持ち込めないよね。
597デフォルトの名無しさん:2011/01/11(火) 19:38:09
Gauche\ 以下をUSBメモリにコピーして試してみます
598デフォルトの名無しさん:2011/01/12(水) 09:12:36
define-syntaxのメリットがわからないので
defmacroを使い続けている
599デフォルトの名無しさん:2011/01/12(水) 12:44:01
メリット
 define-syntaxで書かれたソースが通る
デメリット
 処理系が肥大化する

手間の割にメリットは少ないと思う
600デフォルトの名無しさん:2011/01/12(水) 14:24:20
プログラマが充分に注意深ければそうかもね。
ハイジニックって性質は出来ることを増やそうというよりも誤りを防止する防壁的
なものだから直接的にこれが出来るあれが出来るというものではない。
601デフォルトの名無しさん:2011/01/12(水) 17:21:59
Lispをアセンブラに落とすコンパイラを作ろうとおもったけど、
Applyとかどうすんだろとか、quoteとかどうやったらよかんべとか結局すくれてない。
602デフォルトの名無しさん:2011/01/12(水) 18:41:21
>>601
そこは別に悩むところじゃないと思うが… quoteはコンパイル後は単なる定数データだし、
applyは引数積んで関数ポインタcallするだけだろう。
とりあえず単純なVMをターゲットにしてコンパイラ書いてみたらコツがわかるんじゃない?
603デフォルトの名無しさん:2011/01/12(水) 19:17:03
>>602
ありがとう、もうちょいがんばってみる。
604デフォルトの名無しさん:2011/01/12(水) 19:18:17
>>602
横から質問だけど、例えば外部ファイルからreadでS式を読み込んでapplyとかするプログラムの場合、
そのプログラムはSchemeインタプリタを持ってないといけないんじゃないの?
外部ファイルからのS式がlambdaを持ってた場合、
(apply (lambda (x) x) '(1))とかだったらlambdaをevalしなきゃならないんじゃない?
605デフォルトの名無しさん:2011/01/12(水) 19:22:50
>>604
そうだよ。 インタプリタを内臓してる必要がある。
chicken scheme とか見てみれ。

Scheme の議論の中では eval 不要論も大きいし、実際俺は eval なんて使ったこと無いんだよな。
606デフォルトの名無しさん:2011/01/12(水) 19:23:31
あ、内臓ってなんだよ内蔵な。
607デフォルトの名無しさん:2011/01/12(水) 19:32:40
>>604
何かレイヤをごっちゃにしてる気がする。S式をapplyすることはできないぞ。
実行時にapplyが見るのはあくまで手続きオブジェクトであって、lambdaから始まるリストじゃない。
(apply (lambda (x) x) '(1)) というプログラムがあった場合、コンパイル段階で
(lambda (x) x) のところは「実行されると『引数をそのまま返す手続きオブジェクト』を返す式」
という内部表現に既に変換されてる。lambdaとかはもはや関係ない。
データとしてのS式と、実行されるプログラムは別の世界にある。
その二つの世界をつなぐのがevalな。

evalは必ずしも「インタプリタ」を持ってる必要はなくて、その場でコンパイルして
動的リンクして実行したっていいわけだが。SchemeでSchemeインタプリタを書くのは
そんなに難しくないから、インタプリタを持つ設計があってもいい。
608デフォルトの名無しさん:2011/01/13(木) 17:40:20
evalが二つをつなぐのは、インタプリタの世界での話では?
その行で唐突にインタプリタの話になってる。
609デフォルトの名無しさん:2011/01/13(木) 21:43:35
>>607ではないけど、>>608の言いたいこととしては、lispでインタプリタは普通REPLで実装される。
つまりインタプリタという言葉を出してくるなら、すでにevalがあってしかるべき立場じゃないと
おかしいので、循環論法になってるじゃないか、ということだと思う。

話を読む限り「インタプリタ」じゃなくて単純に「解釈方法」とかでもいいんじゃないだろうか。
要は解釈されて保存されるデータの表現方法はどうでもいい、みたいな話じゃない?
610デフォルトの名無しさん:2011/01/13(木) 23:25:37
stalin使ったこと無いのだけど、ああいう処理系って入力要素にeval可能なの?
611デフォルトの名無しさん:2011/01/14(金) 00:20:36
>>607
emacs lisp その他古い lisp だと
関数はまさに lambda で始まるリストだったりする。
 (apply '(lambda () 42) nil) => 42
とか
 (defun f ())
 (symbol-function 'f) => (lambda nil)
とか。
Common Lisp や Scheme では >>607 のいうとおりだね。

この辺知らずに古い文献読むと混乱すること請け合い。
612デフォルトの名無しさん:2011/01/14(金) 02:31:14
マッカーシー御大のこの言葉はテンプレに入れても良いくらいだな・・・

http://groups.google.com/group/comp.emacs/msg/c9442db9331835e4
613デフォルトの名無しさん:2011/01/14(金) 05:59:46
>>610
eval自身をSchemeで書いてstalinでコンパイルすれば可能。
evalで実行されるコードにはstalinの超絶最適化は効かないし、既にコンパイルされてるコードの
振る舞いをevalから変えることはできないけど。
Schemeではもともとevalされるコードとevalするコードは相互作用しなくていいことになってる。
614デフォルトの名無しさん:2011/01/14(金) 11:49:51
applyとevalの分担は、
1.evalでS式が「適用式」であれば、
2.引数をevalして、
3.applicableかどうかチェックして、
4..applicableの種類に応じた「適用」を行う。
の1と2がevalで、3と4がapply。
Schemeは3でevalしてからチェックする。
コンパイルするならば、頑張れば2と4だけにできるってことだよね。
4も分岐がなくなることが多いし、2もload命令だけになるかも。
615デフォルトの名無しさん:2011/01/14(金) 16:44:43
手続きはアセンブラに落とせるが、
データはインタプリタでもアセンブラでも同じだからアセンブラに落とせない。

すべてがデータだと豪語するLispのソースコードの中から、
本当はデータではない部分を見抜いてアセンブラに落とすのは結構むずかしいと思う。
616デフォルトの名無しさん:2011/01/14(金) 16:56:45
いやquoteされてない部分は全部アセンブラに落とせるっしょ。
マクロはプログラムをデータとして扱うけど、それはコンパイルの前段階の話だから。
617デフォルトの名無しさん:2011/01/14(金) 17:29:49
scheme48って以外といいな
618デフォルトの名無しさん:2011/01/14(金) 17:38:54
関数を呼ぶ直前に引数をevalすると教わった人は
eval不要論とか理解できないし
evalがそこらじゅうに散らかってる前提でコンパイルしようとするだろ
619デフォルトの名無しさん:2011/01/14(金) 17:51:33
インタプリタ作った段階で止まってるならそうかもしれないけど。
その後コンパイラの作り方まで説明している本はたくさんあるよ。
620デフォルトの名無しさん:2011/01/14(金) 17:58:06
>>619
お勧めの本はどれですか?
621デフォルトの名無しさん:2011/01/14(金) 23:47:19
aconsってなんの略だろ?
622デフォルトの名無しさん:2011/01/14(金) 23:50:37
連想リストのconsじゃないかな
623デフォルトの名無しさん:2011/01/15(土) 03:17:00
array cons??
624ひげぽん ◆Ngzcp/NZpA :2011/01/15(土) 09:01:11
association list (a-list) の cons かな。
625デフォルトの名無しさん:2011/01/15(土) 12:22:19
ありがとう、すっきりした!
626デフォルトの名無しさん:2011/01/15(土) 16:40:46
>>619
おれも気になります!
もしよろければおしえてください!!
627デフォルトの名無しさん:2011/01/15(土) 17:46:37
インタープリタからコンパイラって、構文木→実行だったのを
構文木→ターゲットマシンのアセンブラにするだけじゃないの?

と、コンパイラを作った事の無い俺が偉そうに語ってみる。
628デフォルトの名無しさん:2011/01/15(土) 18:23:41
エイホウルマンに書いてある(キリッ
629デフォルトの名無しさん:2011/01/15(土) 19:30:51
このスレでひげぽん氏って初めて見た希ガス
630デフォルトの名無しさん:2011/01/15(土) 19:58:07
619じゃないけど、すぐ思いつくのはSICP、PAIP、Lisp In Small Piecesあたり?
631デフォルトの名無しさん:2011/01/16(日) 00:26:59
実践 Common Lisp の23章とか?
632デフォルトの名無しさん:2011/01/18(火) 12:32:39
racketは使い込むといろいろ不備があるな
やっぱりGaucheが一番安心か
633デフォルトの名無しさん:2011/01/18(火) 20:12:18
Gaucheはソースを隠せないのでダメ
634デフォルトの名無しさん:2011/01/18(火) 20:40:10
そうしたいならプリコンパイルすればいいじゃん。
635デフォルトの名無しさん:2011/01/19(水) 08:55:17
>>632
どの辺が不便?
Schemeの処理系の中だと、Racketは最上の物のひとつだと思ってるから、興味がある。
636デフォルトの名無しさん:2011/01/19(水) 23:29:43
racket も使うけど r6rs モードでしか使わないなぁ。
独自路線自体は悪いとは言わないけど、あえて標準から外れてまでやりたいことのビジョンが見えない。
637デフォルトの名無しさん:2011/01/20(木) 15:10:57
amb
をマクロ展開したら
あらゆる条件組合せのif文の列挙になるような書き方ないかな
638デフォルトの名無しさん:2011/01/20(木) 16:46:27
>>636
マイ方言作るためのフレームワーク、結構面白いよ。> racket
639デフォルトの名無しさん:2011/01/25(火) 13:42:54
できればgaucheで
autohotkey.dll経由で
(http://www.autohotkey.net/~tinku99/ahkdll/)
windowsでキーフックやguiを作成したいのですが、
できるでしょうか?
640デフォルトの名無しさん:2011/01/26(水) 09:21:15
lispって微妙な位置で推移しているんだな。

TIOBEの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/
641デフォルトの名無しさん:2011/01/26(水) 10:11:10
>>639
Gaucheでできるかどうかというとできるだろうけれど、Windows APIの
ラッパーとかほとんど無いから、自分でstubファイルを書かないとならないと思う。
そのへんはあんまりドキュメント化されてないから、stubファイルと聞いて何か
わからないのなら、茨の道だと思うよ。
642デフォルトの名無しさん:2011/01/26(水) 11:25:15
>>639
Gaucheだと、stub書くのが厄介だから、c-wrapper使えるなら使った方が良いと思う。
個人的には、GaucheのFFIは現状では鬼門だと思っているので、Racketの使用を推す。
643デフォルトの名無しさん:2011/01/26(水) 12:14:07
>>641-642
ありがとうございます。racketで試してみます。
644デフォルトの名無しさん:2011/01/26(水) 13:14:27
ラッパーって、Cのヘッダーファイル読み込んで自動生成できないですかね…
645デフォルトの名無しさん:2011/01/26(水) 13:57:17
>>644
Guile、Mzscheme、Chiken なら SWIG でできるらしい。
他の言語にも対応してるから、確認してみてはどう?
646デフォルトの名無しさん:2011/01/26(水) 14:06:56
>>645
Guileでできるなら、GuileでできたやつをGaucheに変換できると思う
647デフォルトの名無しさん:2011/01/26(水) 14:14:49
>>644
ラッパーって何のラッパーのこと??
648デフォルトの名無しさん:2011/01/26(水) 14:21:06
>>647
MFCとかWTLとかじゃね?
649デフォルトの名無しさん:2011/01/27(木) 11:04:09
>>640
>もはやPerlは過去の言語
今も現役だと思うんだけど
650デフォルトの名無しさん:2011/01/27(木) 12:01:18
Perlは変遷が激しくて、どんな書き方がよい書き方なのかわからん。
ソース拾ってきてもまちまちだしなあ・・・。
651デフォルトの名無しさん:2011/01/27(木) 12:11:12
>>640
Lispってずっと13位辺りなんだな。
それにしても、Java, Cは相変わらず強いな。
652デフォルトの名無しさん:2011/01/28(金) 05:34:20
実装方法や使い方が確立された言語が上位ってことな
LISPは亜流も多すぎてどう使ったらよいやらも謎だらけという認識なのさ
653デフォルトの名無しさん:2011/01/28(金) 08:45:36
その程度で謎だらけなら、GCCとVC++の違いでも謎だらけだろうな。
654デフォルトの名無しさん:2011/01/28(金) 13:26:14
業務で使うならACLでほぼ一択だろうし、スクリプト用途で使うならわざわざLispを選ぶ意味がなぁ。
655デフォルトの名無しさん:2011/01/28(金) 16:41:00
>>654
Gaucheは業務に使ってる人いなかった?
656デフォルトの名無しさん:2011/01/28(金) 16:57:49
Linux限定でいいので、フリーで実用的に使える度ランキングってどんな感じなんだろうか?
SBCLは日本語周りについてちゃんと理解できていない。

Gaucheは触ったら負けかなと思っている。
実際のところのGaucheの実用的な評価はどうなんでしょう?
657デフォルトの名無しさん:2011/01/28(金) 17:00:42
豪酒
658デフォルトの名無しさん:2011/01/28(金) 17:03:13
日本語を安心して扱えるlispはGaucheしかないと思ったんだけど
アスキーアートとか読みこませてみればわかるよ
659デフォルトの名無しさん:2011/01/28(金) 19:35:19
日本語前提なら Gauche はリードしてるかな。
r6rs には transcoder があるけど、
定義済みなのは ISO 8859-1, UTF-8, UTF-16 だけだからなぁ。

まぁ、中途半端に日本語対応するくらいなら
(C がそうであるように) 一貫してバイト単位
で見せてくれた方がいいケースもあるだろうし、
実用的っていうのはどういう状況で実用するかによるんじゃないの。

Gauche はいわゆる「スクリプト言語」としては充分に優秀だよ。
660デフォルトの名無しさん:2011/01/28(金) 19:54:15
>>656
どうぞ。処理系の特徴、日本語の扱い、選び方など。
これ間違ってるよ、とかあったら指摘するか、適当に修正してね。

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も良いと思う。
661デフォルトの名無しさん:2011/01/28(金) 20:02:08
あと、新しい動きとして、SBCLは、Windowsのスレッドサポートをするコードが、
去年の暮れから今年の頭にかけて提案されてる。

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#

この辺。先行きはかなり不透明。
662デフォルトの名無しさん:2011/01/28(金) 20:30:04
>>656
Gaucheに関しては、実用度はかなり高水準。
必要になりそうな基礎のライブラリとかもある程度揃ってる。
正規表現やCL風のキーワード、CL風の引数の処理、CLOSとか、
有用なものを柔軟に取り入れてる。開発者が仕事で使ってるのは伊達じゃない。

弱点は、仕様が完全に固まってなかったり、文書化されてない部分。
デバッグ周りとかC APIとかがそう。あとは、R5RS Schemeだから、
他のScheme処理系とライブラリを共有し辛いとかのデメリットもある。
例えば、CFGのパーサが欲しいとき、BiglooからLALRのパーサを持ってくる、
とかは安直にはできない。コードの修正が必要になる。GaucheにもPEGがあるけど、
まだ非公式だし。とにかく、CLみたいにQuicklisp一発とかは無理。

長所、短所を踏まえた上で、使い所を間違わなければ、非常に強力なツールだと思う。
663デフォルトの名無しさん:2011/01/28(金) 23:27:35
論文を大量生産した言語ならLISPがトップ3に入ると思う
664デフォルトの名無しさん:2011/01/29(土) 11:29:25
LISPは黒板に書かれてなんぼの言語だからな
665デフォルトの名無しさん:2011/01/29(土) 22:45:46
いや、Lispの時代は来るよ。
俺の勘だとまず間違いない。
666デフォルトの名無しさん:2011/01/30(日) 00:30:07
lispの時代がこなくても、他言語に変換するの簡単だから
とりあえず使うわ
667デフォルトの名無しさん:2011/01/30(日) 04:03:07
drschemeでタグジャンプできないの?
668デフォルトの名無しさん:2011/01/30(日) 17:54:45
type tag bit の情報を集めているのですが、他にも良いページがあったら教えて下さい。

SBCL は 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 型の型情報を持っていました。
669デフォルトの名無しさん:2011/01/30(日) 18:45:29
>>668
open な処理系ならソース読め
64bit 版 SBCL は low tag 4 bit
64bit 版 clisp は (log most-positive-fixnum 2) => 48.0 なのでおそらく 16bit
670デフォルトの名無しさん:2011/01/31(月) 00:49:52
>>669
読んでますがな。
でも、一から読んで理解するのは時間が掛かるので、
ちょっとお力を借りたかった次第です。。。

ちなみに CLISP の tag bit は 2bit でした。
http://clisp.sourceforge.net/impnotes/typecodes.html
bit layout は src/lispbibl.d にあります。

SECDR も Tiny Scheme と同様、tag bit を使用せずに、
型情報を別に持つタイプでした。
671デフォルトの名無しさん:2011/01/31(月) 01:00:52
あ、CLISP は 32bit 版です。
64bit だと実メモリ搭載量よりアドレス空間が遥かに広いのでレイアウトが楽そうですね。
672デフォルトの名無しさん:2011/02/01(火) 11:47:29
clispにパッチ投稿してる人に日本人がいるそうだけど
たまに変な日本語コード入力すると落ちる問題は、そろそろ解決してるのかな
昔sbclでwebクローラー作ったらアスキーアート読みこんだとたんに落ちてたんだよなあ
673デフォルトの名無しさん:2011/02/01(火) 15:31:21
どうして日本人ってわかるの?
674デフォルトの名無しさん:2011/02/02(水) 00:44:08
CLISPで落ちるのかSBCLで落ちるのか、どちらなのか。
てーか、昔って何時なのか分かんないし、そもそもデータ読んだだけで処理系が落ちる訳?
あるいは、デバッガに落ちてんのを、落ちたとか言ってるの?

CLISPもSBCLも、Unicodeの範囲ならある程度実用的な日本語処理が可能。
本当に処理系の問題なの? 何かFUDっぽくて嫌だなー。
CLスレに書き込んでた人と同一人物じゃないんだろうか。
675デフォルトの名無しさん:2011/02/02(水) 01:50:43
俺はエスパーじゃないが、とりあえずバイト列型とjpライブラリを知らないのは受信できた。
676デフォルトの名無しさん:2011/02/04(金) 00:18:25
https://gist.github.com/809515#file_lisp_electric.el

ruby-electric面白そうだったからlispでもやってみた。
動作はコード読んだほうが早いかも知らん
ぼちぼちドキュメント書きます。使う人がいればだけれども

軽く説明すると
"("かスペース押すとタブかバックタブでS式単位で閉じ括弧置く場所を指定できて、
適当な動作でその動作を入力しつつ抜ける感じ。
スペース2連打でyas/expand、
タブとか使ってくくる範囲選択してyasで展開するとタブで指定していた範囲がその中に入る。

んー、やっぱり読んだほうが早いな

とりあえず暇な人使ってみてください
ちなみにntemacsでしか試してないので本家emacsだとうごかねーよとかあったら教えてください
677デフォルトの名無しさん:2011/02/04(金) 09:07:06
普段Vimmerだが使ってみるよ。
678デフォルトの名無しさん:2011/02/04(金) 11:54:48
>>677
vi使いの人ってREPL支援とかどうやってるのか知りたいんだけどどこかでvideo配信してないかな?
Cやshスクリプトならviよく使うんだけどLispとかpythonだとemacsから足抜けが永遠にできなそうで少し困ってさ
679デフォルトの名無しさん:2011/02/05(土) 03:16:35
vi 系は起動が速いから、エディタの中から Lisp を呼び出す様な使い方は稀。
680デフォルトの名無しさん:2011/02/05(土) 09:25:14
LOLの著者って、viつかってんだよな
681デフォルトの名無しさん:2011/02/05(土) 15:20:39
4月に初シングルと初アルバム出るらしいな
682デフォルトの名無しさん:2011/02/05(土) 15:42:50
683デフォルトの名無しさん:2011/02/06(日) 00:59:02
数寄魔さん達は継続があれば大域脱出も例外処理もコルーチンもライブラリレベルで
実装出来ると言うけど、継続を使って実装するより言語のプリミティブな機能として、
処理系の実装言語で実装しちゃった方が実行効率は良いよね。

あんまりそういうのを気にしない人が使ってるのかな。
684デフォルトの名無しさん:2011/02/06(日) 01:09:16
例外は R6RS で規定された。
具体的な実装が継続を使うのか、
もっと効率のよい実装であるのかは問われないけど、
気合の入った実装者ならそれなりに効率的なものにするだろ。

主要な処理系にある限定継続を使えばコルーチンは結構効率的なはず。
プリミティブな機能として実装するのと大差なくなる。
限定継続は今後の議論の行方の中で注目すべき点だと思う。

大域脱出に継続を使うのは豪華すぎると思うけど、
一般に大域脱出は一度きりであって、
そういったケースを検出したら軽量な継続を作るように切り替えるアイデアは存在する。
"call/ioc" でググってみ。

まぁ、ナイーブな実装だと継続は効率悪いんだけど、
色々と効率的な実装について研究はされてるよという話。
685デフォルトの名無しさん:2011/02/06(日) 01:47:00
>>684
限定継続って知らなかった。どうもありがとう。
686デフォルトの名無しさん:2011/02/06(日) 03:57:07
>>683
Schemeの仕様は効率よりも綺麗さ優先だからな。
まず「正しい」仕様を決めて、それをいかにして効率良く実装できるかを競う。

現実的には、継続みたいな仕組みは既にやり方がわかってる大域脱出とかを
再実装するものじゃなくて、新しい制御フローの仕組みを試してみるための
部品と考えたらいい。大域脱出にしても、動的環境との相互作用のセマンティクスを
変えてみるとか。そういうのは普通の言語では言語の実装に手を入れないと
実験できないけど、SchemeならScheme自身でポータブルに書けると。
それで有用性がわかったら各処理系が効率良いサポートを追加するっていう方針。
例えば限定継続も、(効率は悪いが)call/ccを使ったポータブルな実装がある。
その上でいくつかの処理系は効率の良い内部実装を持っている。

687デフォルトの名無しさん:2011/02/06(日) 18:09:13
>>686
>新しい制御フローの仕組みを試してみるための部品と考えたらいい。

なるほど、納得しました。

皆さんには今更の話題で済みません。部分継続って面白いですね。
もう一度 scheme を勉強し直してみます。
688676:2011/02/06(日) 20:08:33
>>677
ありがとうございます。
vimあんまり使ったことないけど
「vimならこんなことができるのに」とかあれば教えていただけると幸いです。

yasnippet用のsnippet同じ所に置いたけど見難いな。
ユーザが適当にインストールできるといいな
emacslispにファイル埋め込んで簡単に展開できたりしないかなー
と思ったので、最後にそのための式を書いてみた。
クオートはずしてc-x c-eとかするとインストールされます。

てか、これのためにyasnippetインストールしないといけないから手順的に重いか
そっちのが問題?
689デフォルトの名無しさん:2011/02/06(日) 22:46:42
CLOSの時も、いろいろなCommon Lisp用のOO拡張を検討する上で、
必須のコア機能は何だろうかってことでCLOSがデザインされたからね。
抽象的なプリミティブはいいから、リッチなライブラリ充実しろって人は、
あまり向いてない言語だと思う。
690デフォルトの名無しさん:2011/02/06(日) 23:00:24
そういう雰囲気は R6RS で大分変わったね。
R7RS はリッチ派とミニマリスト派で別れて作業するみたいだけど、
現実のプロジェクトでも採用し易い言語に育つと良いね。
691デフォルトの名無しさん:2011/02/06(日) 23:01:43
GCがあるせいだな
692デフォルトの名無しさん:2011/02/06(日) 23:04:02
いや、javaはそれなりに成功してるから
型が無いせいだな
性敵型のLISPが必要だな
693デフォルトの名無しさん:2011/02/06(日) 23:06:02
S式だと型指定子の表現が難しい
S式をやめないと
694デフォルトの名無しさん:2011/02/06(日) 23:06:50
>>690
リッチ派とミニマリスト派っていうか、コアと上に乗っかる部分、って感じ。
Sussmanとか戻ってきてるよ。

ttp://trac.sacrideo.us/wg/wiki
ttp://trac.sacrideo.us/wg/wiki/WG1BallotSussman
695デフォルトの名無しさん:2011/02/06(日) 23:50:52
つまり、必須のコア機能は何だろうかという事だけを考えたい人は small な方を使えって事だね。
696デフォルトの名無しさん:2011/02/07(月) 01:44:17
それとはまた別の話。
697デフォルトの名無しさん:2011/02/07(月) 01:53:52
別の話って、リッチなライブラリ充実しろって人は large な方を使えって話かな。
698デフォルトの名無しさん:2011/02/07(月) 02:12:14
R7RS でスレッドのサポートが入るなら喜ばしい
C1X と同程度の進歩だが
699デフォルトの名無しさん:2011/02/07(月) 02:26:50
small + 別の何かっていう実装も、結局出てくる気がする。
このリストを見てしまうと。凄いよ。策定までの遙かな道のりがリアルに想像できて。

ttp://trac.sacrideo.us/wg/wiki/StandardDocket
700デフォルトの名無しさん:2011/02/07(月) 02:38:27
全部規格に入ったら、厚さはともかく、範囲では確実にANSI Common Lispは越えられる。
CLtL3とR7RS largeとC++0xの三つ巴で覇権を争うかと思うと、胸が熱くなるな。変態規格的な意味で。
701デフォルトの名無しさん:2011/02/07(月) 02:52:13
後は静的型付けとコンパイラ命令とオブジェクトシステムと、、、
702デフォルトの名無しさん:2011/02/07(月) 03:32:27
その頃にはDが完成してるな。
703デフォルトの名無しさん:2011/02/08(火) 11:59:54
perlが最高
704デフォルトの名無しさん:2011/02/08(火) 12:36:53
perlにFFI持ってるschemeってないのでしょうか
racketはないですよね
Common Lispはあるみたいですが
705デフォルトの名無しさん:2011/02/08(火) 12:50:10
>>703
80年代ならともかく、いまどきperlは勘弁してほしい
706デフォルトの名無しさん:2011/02/08(火) 13:25:33
これからPerlでメンテしていかなくてはならない俺に謝れ!w
707デフォルトの名無しさん:2011/02/08(火) 15:41:46
perlのどこがまずいのか説明してもらおうか
phpとpythonよりはるかにましだぞ
708デフォルトの名無しさん:2011/02/08(火) 16:04:50
ここでやるなよ
709デフォルトの名無しさん:2011/02/08(火) 16:14:00
perl は php よりマシだが python よりはグダグダという印象。
理由は文法の一貫性。 perl は複雑すぎる。
よくあるケースに短い記法が割り当てられているのはメリットでもあるけど、
習熟に時間がかかることに繋がるデメリットでもある。
メリットとデメリットが表裏一体でメリットだけ取るわけにいかない話だから、
どのあたりで妥協するかっていうトレードオフなんだよな。
でもまぁ、そろそろ perl 4 はフェードアウトしていい頃なんじゃないかとは思う。
710デフォルトの名無しさん:2011/02/08(火) 16:20:40
>>707
そういう話題はLLバトロワスレあたりでどうぞ
711Perl忍者 ◆M5ZWRnXOj6 :2011/02/08(火) 17:53:06
githubの使い方教えてください
712Perl忍者 ◆M5ZWRnXOj6 :2011/02/08(火) 18:04:20
713Perl忍者 ◆M5ZWRnXOj6 :2011/02/08(火) 18:05:18
* 本体
* 関数
* モジュール

っていうやつが灰色になってうまくみえてえんだよ

早く教えろ

人のために尽くしたい!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!
714デフォルトの名無しさん:2011/02/08(火) 18:06:38
tempの場所のスタイルシートだろこれ???
715デフォルトの名無しさん:2011/02/08(火) 22:49:39
Perlに対するFFIっているのか?
Perlの足の軽さとLispのもっさりFFIの感じだと普通にスクリプト実行して十分じゃね
716デフォルトの名無しさん:2011/02/08(火) 22:54:05
>>704
Perl で Scheme を実装して、Scheme から Perl の関数を呼び出せる様にすれば
良いだけじゃないの。

或は Perl を Scheme だと思って頑張るという手もある。
717デフォルトの名無しさん:2011/02/08(火) 23:20:16
objective-c を smalltalk だと思って頑張るよりもつらそうだ
718デフォルトの名無しさん:2011/02/08(火) 23:24:32
Common Lispに手をだそうとSLIMEを入れたのですがC-jについて質問です。
lisp-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を使っています。お教えください。
719デフォルトの名無しさん:2011/02/08(火) 23:27:19
>>717
Perl で Scheme するのは割と楽しそうだよ

http://okmij.org/ftp/Perl/Scheme-in-Perl.txt

ちなみに、Perl で Scheme を書く方法はこっちね

http://billhails.net/Book/
720デフォルトの名無しさん:2011/02/09(水) 00:18:14
>>719
one liner 以外は perl で書かないから興味ない
とっとと消えていなくなれ
# 変数の指定の仕方が変態だろう? > perl
721デフォルトの名無しさん:2011/02/09(水) 00:20:20
dis りたいだけなら他へ行け
722デフォルトの名無しさん:2011/02/09(水) 02:05:08
>>718
それはどっちかっていうと、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で一時バッファに結果を出す方が便利に感じますが、
(コードのバッファを変更せずに済むから)この辺はそれぞれの好みがありますね。
723デフォルトの名無しさん: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))))))

手元の環境だとそれっぽく動いてる感じなんですが、いかがでしょうか。
724Perl評論家:2011/02/09(水) 11:55:23
おまえらさあ
LISPでなにつくったの?

言ってみろや

本当にしょうもなさすぎて 答えられねえのか?
725デフォルトの名無しさん:2011/02/09(水) 12:21:58
つ守秘義務
726デフォルトの名無しさん:2011/02/09(水) 13:14:28
lispは他の言語のコード生成の基
表面的にはjavaだったりするけどね
727718:2011/02/09(水) 18:42:26
>>722
丁寧な説明ありがとうございます。たしかに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>
728デフォルトの名無しさん:2011/02/09(水) 18:48:30
(car (read-from-string "(+ 1 3)"))
;=> (+ 1 3)がうまく取れる

(slime-eval '(+ 1 3))
;=> EVAL: undefined function SWANK-IO-PACKAGE::+

slime-evalで+が使えないようなのでそのあたり調べてみます。
729デフォルトの名無しさん:2011/02/09(水) 19:11:16
>>727
深く考えずに適当なことを言ったんで、もうちょっと考えて発言すると、
SLIMEはポート経由で処理系と通信して情報をやり取りしていて、
スレッド対応環境では、評価ごとに処理系のスレッドを使って通信してたと記憶してます。
で、その結果を非同期で受け取ったりするので、多分その関係じゃないかと。
考えてみると、あんまスレッドは関係ないですね。非同期なのがポイントであって。

で、そのエラーはパッケージにcl:+がimportされてないのが原因みたいですが、
それって、ちゃんとslime-modeのバッファで実行してます? 他のモードで呼んでませんか?
SLIMEはlisp-modeをフックして、slime-modeっていうマイナーモードも起動するようにするんですが、
その環境じゃないと、slime-evalが現在のパッケージを見付けられなくて、失敗すると思います。
lisp-mode + slime-modeになってるバッファか、slime-evalの第二引数にパッケージを指定してください。
730デフォルトの名無しさん:2011/02/09(水) 19:14:50
あー、何か長い割に意味が掴みづらい。
要は、SLIME起動後、M-x lisp-modeしてLispモードなバッファで使ってください。
731718:2011/02/09(水) 19:37:15
>>729,730
レスありがとうございます。.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
732デフォルトの名無しさん:2011/02/09(水) 19:51:48
>>731は見当違いの書き込みだったかも知れません。
C-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)
733デフォルトの名無しさん:2011/02/09(水) 20:10:11
>>732
モードラインのモードの部分は、ちゃんと

(Lisp Autodoc [COMMON-LISP-USER clisp])

のようになっていますか? そのバッファでM-x describe-modeすると、
「Enabled minor modes:」の一覧にSlimeは含まれますか?
734デフォルトの名無しさん: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).

とあります。
735デフォルトの名無しさん:2011/02/09(水) 20:43:08
>>734
それ処理系と繋がってないです。M-x slimeしてます?
736718:2011/02/09(水) 20:54:49
あれ、繋がってませんか?(+ 1 3)でC-u C-x C-eすると4が出力されるので繋がっていると思っていました。
今まで実行していたコードは実は全て組み込みのEmacs Lispで実行されていたとか・・?
サンプルで試したクロージャなどもうまく動いたのでそれはないと思うのですが。
M-x slimeは起動時にされるようです。起動後にM-x slimeするとCreate an additonal *inferior-lisp*? (y or n)
と表示されy押すと新たにREPLが作られます。lispboxだからうまくいかないのかなぁ。
737デフォルトの名無しさん:2011/02/09(水) 20:57:44
環境はこれを落として解凍してbat実行したものです。(手軽で驚きました!)
http://common-lisp.net/pcl/windows/lispbox-0.7-clisp-2.37.zip
738デフォルトの名無しさん:2011/02/09(水) 21:29:45
>>736
自分でインストールしてみましたが、バージョンFURIIIIIIIIIIIIIIIIIIIIII!!1!
Emacs 21.3に20060110のSLIMEですか。流石にこれは想定外。

取り敢えず、もっと新しいLispboxを使うか、それぞれを新しいものに入れ替えることをオススメします。
739デフォルトの名無しさん:2011/02/09(水) 21:31:43
とりあえず、最新はこちらです。

ttp://common-lisp.net/project/lispbox/
740デフォルトの名無しさん:2011/02/09(水) 21:37:09
>>726
他の言語のコード生成の基って具体的にどういうの?
741デフォルトの名無しさん:2011/02/09(水) 21:45:49
CentOSでも使っているの?
>>718は環境全部を晒した方がいいだろうな。
742デフォルトの名無しさん:2011/02/09(水) 22:00:47
一応、>>737でもテストしてみましたが、

(slime-eval
'(+ 2 3)
(slime-current-package))

確かにこれが同じメッセージで失敗しますね。(slime-current-package)も":cl-user"なのに。
+をパッケージ名まで含めてcl:+にすると結果が戻ってくるので、何かしらのバグがあるのか、
現行のバージョンとは仕様が変わっているのか。

どちらにしろ、過去のバージョンを詳しく調べるのも不毛なのでご容赦ください。
Emacs 21.3だと日本語のインライン入力とかUnicodeの取り扱いもできませんし、
そういう意味でも、新しいバージョンにする方が良いと思います。
743718:2011/02/09(水) 22:00:48
Windows7 64bitです。

>>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が有効に鳴っていると思います。何故うまくいかないんだ・・。
744718:2011/02/09(水) 22:13:17
(define-key slime-mode-map "\C-j" 'foo)

(defun foo (s)
(interactive (list (slime-last-expression)))
(slime-eval-print-last-expression s)
(sleep-for 0 50)
(insert "\n"))

みなさんたくさんのレスありがとうございました!!!!!111111
745デフォルトの名無しさん:2011/02/09(水) 22:55:14
>>744
あー、ごめん。何かこっちでも色々いじってたんでミスってたかも。

(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))))

最後に試してみて。多分これでいける。
746デフォルトの名無しさん:2011/02/09(水) 23:57:01
>>745
うまく動きました。eval-and-grab-outputの動作はまだよく分かっていませんが、
slime-evalに与える引数に変更が必要だったのですね。
>>744の場当たり的方法ではなくなったのでさっぱりした気持ちになりました。
遅くまでお付き合いありがとうございました。m(_ _)m
747sasagawa888:2011/02/10(木) 09:37:39
ここは僕のお気に入りスレだから

荒らすなよカスども
748sasagawa888:2011/02/10(木) 09:48:01
お前らハンドルネームくらいつけろや
バカか?
なに2chルール守ってんの?
749デフォルトの名無しさん:2011/02/10(木) 09:59:02
なんだこいつ
キチガイか

ツイッターはキチガイしかいないな
750デフォルトの名無しさん:2011/02/10(木) 11:51:51
Perl忍者とか言う馬鹿が荒らしてるんだろ
751デフォルトの名無しさん:2011/02/10(木) 13:12:43
お前らがスルーしないのが荒れる原因ですよ
752デフォルトの名無しさん:2011/02/10(木) 13:17:12
racketは互換性なくなる拡張を今後いれてくる可能性あるんだろうか
753デフォルトの名無しさん:2011/02/10(木) 16:02:13
racketはSchemeの実装というより「言語作成ツールキットと、それで作られた
いろんな言語の集まり」を目指してるんじゃないのかな。改名もそのためで。
だから「racketで作られた一実装」としてRnRS互換のSchemeというのは
提供され続けると思うけれど、ツールキットたるracket本体は独自に進化するんでないの?
754デフォルトの名無しさん:2011/02/11(金) 09:31:18
うんちく笑

うんちく垂れ流してるカスだけど

まつもとひろゆき以下だろ

だったら、かっこつけてLISPやってんじゃねえよカス

所詮ゴミLISPERなのにがんばっちゃって 痛いよ
っでさあ LISPでなにやってんのこのカスは

俺てきにLISPで作りたいものないからさ
つまらなそうだし
755デフォルトの名無しさん:2011/02/11(金) 09:46:32
> かっこつけて
756デフォルトの名無しさん:2011/02/11(金) 09:56:39
かっこ つけない奴がLispを扱えるはずない
757デフォルトの名無しさん:2011/02/11(金) 10:06:35
かっこつけてんじゃねえよ
受け狙い

真剣に死ぬかLISPやめろカス
758デフォルトの名無しさん:2011/02/11(金) 10:07:34
かっこ イイ!と思ってるからLispやってるわけで。
かっこ イクナイ!と思ったらLispは絶対に書けない。

上級Lisperは全員「かっこ、こっか、かっこ、こっか」ってブツブツつぶやきながらコーディングしてる。
759デフォルトの名無しさん:2011/02/11(金) 10:51:09
それは所詮、括弧之弧括というもの、好漢いまだLispの真髄を知らぬと見える。
ある伝説的なLispハッカーは、知人のEmacsを後ろから覗き込むと
「確かに見憶えのある記号だが、どうしてもその名前が思出せぬし、
 その用途も思い当らない。それは何と呼ぶ記号で、また何に用いるのか」と尋ねたという。
彼が指差していたのは、.emacsに並ぶ無数の括弧の一つであった。
760デフォルトの名無しさん:2011/02/11(金) 18:36:22
かっこ、こっかとか言ってるのは初級Lisperだったか。
761デフォルトの名無しさん:2011/02/11(金) 20:37:18
竹内先生ジャネーノ
762デフォルトの名無しさん:2011/02/11(金) 21:26:15
unixのsh厨じゃないの
763デフォルトの名無しさん:2011/02/15(火) 00:16:39
cl-cont

amb
で検索しても何も出てこない
ないのか
764デフォルトの名無しさん:2011/02/15(火) 10:54:21
765デフォルトの名無しさん:2011/02/15(火) 11:06:29
何かの言語で習作にLISPの処理系書いてみるってよく見かけるけど、
その逆ってどうなのかな?
LISPでBASICだのRubyだのを書いてみた人っている?
766デフォルトの名無しさん:2011/02/15(火) 12:55:21
prolog乗っけるのは教科書で見かけるが、やったことはないな。
電卓までだ。
767デフォルトの名無しさん:2011/02/15(火) 13:03:26
LISPでHTML言語解析なら見たことある
768デフォルトの名無しさん:2011/02/15(火) 14:51:04
>>765
「コンパイラ・スクリプトエンジン」相談室15
にTiny Algol by racketのURL張ったばかり。
769デフォルトの名無しさん:2011/02/15(火) 15:47:17
>>765
CLPython - an implementation of Python in Common Lisp
ttp://common-lisp.net/project/clpython/
770デフォルトの名無しさん:2011/02/15(火) 20:13:10
clでscm動かすマクロみたいなのないでしょうか
逆は検索すると見つかるのですが
771デフォルトの名無しさん:2011/02/15(火) 20:17:06
うんこな人が書いたperlは読みたくなくなるが
うまい人の書いたperlはすぐわかる
言語の違いなんてそんなもの
772デフォルトの名無しさん:2011/02/15(火) 22:26:07
>>769-770
CLpythonでlispy動かすみたいな?
773デフォルトの名無しさん:2011/02/15(火) 22:48:51
〉〉
774デフォルトの名無しさん:2011/02/16(水) 01:03:50
call-with-current-continuation を(car, cdr とかの)基本的な手続きで実装したサンプル無いかな?
775デフォルトの名無しさん:2011/02/16(水) 02:01:40
>>774
不可能。
処理系から作るのでない限り。
776デフォルトの名無しさん:2011/02/16(水) 02:16:32
call/ccの説明みてもevalとの違いがよくわからんorz
777デフォルトの名無しさん:2011/02/16(水) 02:23:54
call/cc と eval を混同するのは意味わからん。
778デフォルトの名無しさん:2011/02/16(水) 02:28:32
要するにどこでもセーブでしょ?
だったらコピーしてevalにぶちこんじゃえば同じ事じゃなくて?
779デフォルトの名無しさん:2011/02/16(水) 02:33:47
>>775
やっぱ不可能なのか。安心した。
情報サンクス
780デフォルトの名無しさん:2011/02/16(水) 02:44:32
自分でevalを作る要領で作れる。
つまりSICPにあるようなインタプリタを作りましょうなわけだが。
>>778
コピーじゃない。
実体は1つ。
781デフォルトの名無しさん:2011/02/16(水) 02:48:22
>>778
その発想は無かった。
とりあえず違うから一旦忘れてもう一度読め。
手作業で CPS 変換してみるといいぞ。
第一級継続はこういうものだと簡潔に示すのは無理だし、
だからこそ色んな形で解説したものはある。
理解できないなら別の解説を読めよ。
782デフォルトの名無しさん:2011/02/16(水) 02:57:17
なんか変にアセンブラの知識があるせいかこんがらがるなあ。
783デフォルトの名無しさん:2011/02/16(水) 02:59:24
アセンブラは俺も使うが、
あまりに Scheme とは通すぎてこんがらがる要素とかないと思うけど。
784デフォルトの名無しさん:2011/02/16(水) 03:04:30
レジスタ壊されたくなかったらユーザースタックヘ積んじゃえって感じというかなんていうか
785デフォルトの名無しさん:2011/02/16(水) 03:19:04
自分は、アセンブラレベルでどう動くのかがイメージできるまで、amb を理解できなかった。
ambに限らず、具体例から一般化して抽象的に理解はできるけど、いきなり抽象イメージからスタートできないのって、頭が悪いから?
786デフォルトの名無しさん:2011/02/16(水) 09:50:22
凄い頭の回転で袋小路へ突進、というケースがあるからなんとも言えん
787デフォルトの名無しさん:2011/02/16(水) 10:14:23
恩氏の教授(数学者)は「”難しい”には2種類ある」と言っていた
複雑すぎて難しい場合と、単純すぎて難しい場合だとさ
単に難しいっていうと前者を連想しがちだが……
788デフォルトの名無しさん:2011/02/16(水) 12:11:16
常人が「えーそれ面倒だろ」というようなことを平気でこなして袋小路へ
789デフォルトの名無しさん:2011/02/16(水) 13:16:35
racketでmecab動かしてる人いませんか?
790デフォルトの名無しさん:2011/02/16(水) 14:30:32
test
791デフォルトの名無しさん:2011/02/17(木) 02:47:32
>>778
セーブはしない。call-with-current-continuationする(現在の継続を引数にして呼ぶ)だけ。
以下を読んでみて欲しい。

ttp://practical-scheme.net/docs/cont-j.html

継続っていう概念は、本当にSchemeのコアになっていて、言語仕様の様々な所で出てくる。
例えば、多値辺りは継続も理解しないと、本質的な理解が出来ない。とても重要な要素。
また、継続自体は計算機科学の一般的な概念だから、理解に時間を割いて損はないと思う。
関数型なら、値を返す代わりに継続を返す、というのは普通にある。遅延評価したいときとか。
より実用的な応用例だと、継続ベースのアプリケーションサーバとか。
792デフォルトの名無しさん:2011/02/17(木) 03:30:08
一応、継続と同じ内容の式をevalして、似たようなことはできるだろうけど、
evalでのレキシカルな環境の扱いは、Schemeだとダークコーナーだった気がする。
R6RSの例だとレキシカルな束縛参照してるけど、詳しい定義規格中にあったっけ?
R5RSだと処理系依存だった覚えがある。とりあえず、制約が付くのは確か。

あとは、その継続と同じ内容の式をどう作るか、ってのも大きな問題になるはず。
lambdaで普通に継続を自分で書き下すならともかく、call/ccを使う複雑なケースだと、
継続と同じ内容の式を用意するのは難しくなってくると思う。

そもそも、継続自体は、ネイティブコードにせよ、バイトコードにせよ、インタプリタにせよ、
コードを処理した段階で既にもう存在しているわけで、それをわざわざS式を組み立てて、
その上でevalするっていうのも、随分迂遠な話だと思うよ。新たに作るものじゃなくって、
継続は既にあるものだから。
793デフォルトの名無しさん:2011/02/17(木) 03:50:14
>>792
> call/ccを使う複雑なケースだと、継続と同じ内容の式を用意するのは難しくなってくると思う。

つまり、可能と?
794デフォルトの名無しさん:2011/02/17(木) 03:52:32
>>789
FFI経由なら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
795デフォルトの名無しさん:2011/02/17(木) 04:00:01
>>793
同じ動作をする微妙に異なるコードを最低二種類保守する覚悟があって、
かつ移植性を犠牲にし、下手をするとコードの根本的な構造すら変えるリスクを背負い、
低い性能と劣悪な可読性を許容すれば、「似た」ことはできると思うよ。
796デフォルトの名無しさん:2011/02/17(木) 12:31:15
処理系によって違う行列計算をマクロで統一できないものか
797デフォルトの名無しさん:2011/02/17(木) 20:51:34
フラットランドが推薦されてる意味がわからない。
誰か教えて。
798デフォルトの名無しさん:2011/02/18(金) 01:20:25
>>791
> 例えば、多値辺りは継続も理解しないと、本質的な理解が出来ない。とても重要な要素。

それは言いすぎでしょ。
CSPで多値を扱うと美しさを感じることはあるけども。
799デフォルトの名無しさん:2011/02/18(金) 01:28:14
>>792
全く同意できない。
>>774はフルセットのSchemeを所望しているわけではないし。

SECDマシンで継続を実装するのはすごく簡単です。
S式でSECDを表現するのも簡単です。
800デフォルトの名無しさん:2011/02/18(金) 04:31:11
>>798
現在の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)って何よ? って話にならない?
801デフォルトの名無しさん:2011/02/18(金) 04:45:37
>>799
誤解させたのなら謝るけど、>>778に対するレス。
Schemeで継続を処理する抽象機械を作るのが楽という話と、
evalを継続の代替として使うのが楽という話は違うよね?
802デフォルトの名無しさん:2011/02/18(金) 05:43:04
多分>>792は既存のevalでcall/ccが作れるかどうかの話で、
SECDとか自作evalで作れますよって言う人と話が噛み合ってない
803デフォルトの名無しさん:2011/02/18(金) 11:00:44
>>800
表示的/操作的意味論理解してないと、Schemeを理解したと言えない
みたいな話?
804デフォルトの名無しさん:2011/02/18(金) 16:20:01
racketにもgsllみたいなのあればいいのになあ
やはり実用はclだ
805デフォルトの名無しさん:2011/02/20(日) 14:29:28.72
gaucheの持ち運びについて質問します

gaucheがなかなか良さそうなので、
gaucheをusbメモリに入れて会社外でも使おうと思うのですが、
(出先のosはwindows xpとwindows7です)
gaucheを持ち運ぶには全ファイルをコピペすればいいのでしょうか?それとも何か特殊な設定を施すのでしょうか?

速さは求めておらず、想定しているのは
既に作成している.scmファイルを実行することだけです。

欲を言えば、gaucheのページに、スクリプトのポータブル化の話がどこかにあったと記憶していますが、
バイナリのサイズが数M程度で収まるなら、できればそうしたいのですが。

よろしくお願いします。
806デフォルトの名無しさん:2011/02/20(日) 15:15:08.02
>>805
USBメモリにOSを入れて、OSごとgaucheを持ち運んでる
807デフォルトの名無しさん:2011/02/20(日) 23:25:28.65
出先でTrojanとして検出されて大問題の巻
808デフォルトの名無しさん:2011/02/21(月) 12:57:41.62
>>805
Windows版Gaucheはディレクトリツリーをそっくりコピーするだけで動いたはず。
インストーラから入れたならC:\Program Files\Gauche 以下ね。
その下のbin\gosh.exeかbin\gosh-noconsole.exeを起動すれば、
付属ライブラリはそっからの相対パスで探してくれる。
809デフォルトの名無しさん:2011/02/22(火) 10:34:42.24
M式が使える処理系ってあります?
810デフォルトの名無しさん:2011/02/22(火) 15:20:25.43
(require :maxima)
(setf a #$ x+20*y*b$)
811デフォルトの名無しさん:2011/02/23(水) 03:21:01.38
http://www.reddit.com/r/lisp/comments/fpfnf/an_early_lisp_program_circa_feb_1960/

Lisp は括弧のお化けみたいに言われるけど、初期は括弧とカンマのお化けだったのね。
Lisp I に比べたら Arc なんて括弧が無いに等しいな。
812デフォルトの名無しさん:2011/02/23(水) 14:13:05.07
元ネタ読んだけど、パンチカード云々の話が、わけわかめだった。
813453:2011/02/24(木) 02:05:41.05
Gaucheにはflockあるから、これと同じことできるんだよね?
http://www.tohoho-web.com/lng/200001/00010144.htm
814デフォルトの名無しさん:2011/02/24(木) 02:46:29.04
2000年かぁ… (遠い目
815デフォルトの名無しさん:2011/02/24(木) 14:36:15.23
2000年からの蓄積があるperlがいかに素晴らしいか
816デフォルトの名無しさん:2011/02/24(木) 14:53:08.81
そうかぁ、perl って 2000年前からあるんだぁ。
817デフォルトの名無しさん:2011/02/24(木) 15:00:50.86
一万byte2000年の前から愛してる
818デフォルトの名無しさん:2011/02/24(木) 15:32:57.87
8000年すぎたころからスパゲッティ
819デフォルトの名無しさん:2011/02/24(木) 15:53:51.32
一億年と二千年あともデスマーチ
820デフォルトの名無しさん:2011/02/24(木) 18:40:44.39
>>819
それは勘弁してください
821デフォルトの名無しさん:2011/02/25(金) 00:53:34.90
gaucheのwilikiの質問です
WiLiKi最新版にcode 要素、kbd 要素、ルビに関係するruby 要素諸々を追加したいのですがやり方が分かりません
公式サイトの「WiLiKi:リファレンスマニュアル」が「WiLiKi リリース0.4用」なので
もしかしたら最新版では要素を追加する機能が何かあるのかもしれませんが
よろしくお願いします。
822デフォルトの名無しさん:2011/02/25(金) 04:01:47.17
公式ドキュメントは無いね。マクロで良ければ
(define-reader-macro (ruby base text)
`((ruby (rb ,base) (rp "(") (rt ,text) (rp ")"))))
とか書いとけば
[[$$ruby 補毛 ほげ]]
でruby要素になるけど。
つかWiLiKiで質問したら?
823デフォルトの名無しさん:2011/02/25(金) 11:40:59.43
WiLiKiのメーリングリストとかはないんだっけかな。
Gaucheのメーリングリストで聞けばいいと思うよ。
824デフォルトの名無しさん:2011/02/25(金) 12:25:17.17
ざっと WiLiKi の中を見れば define-reader-macro がそれだってのはすぐわかる。
だけど現時点ではとても整理されているとは言えないコードになってる。
コードの整理が出来てない状況ではドキュメント化は後回しになっても仕方ないだろ。
フォーマッタとかRSS生成とかは単独で使えるようになって欲しいしなぁ。
825デフォルトの名無しさん:2011/02/25(金) 12:59:33.11
フォーマッタは分離しようと思ったけど、いまいち綺麗にまとまらなくて保留、
とかどっかで言ってなかったっけ? 凄いうろ覚えだけど。

あと、reader/writer両マクロの仕様を変えるかも、みたいな事も言ってた気が。
$$と$がややこしい、みたいな話で。確かにあれは素で間違う。

とりあえず、WiLiKiの要望とかのページに書いとけば、返事もらえると思う。
826デフォルトの名無しさん:2011/02/25(金) 13:20:26.04
それらの話題は既出。 返事を貰うまでもない。
ただ、綺麗なコードでは無いにしても実際に明確なトラブルなく動いている (あるいは運用でなんとかできる) ものを修正するのは
重い腰が上がらないということはあるので、そういう要望をもっている人が結構いるというのを認識してもらうという意味ではたまに
むしかえすのもアリかな。
shiro さんのブログが今は WiLiKi ベースの独自システム使ってて、いずれ WiLiKi に盛り込む形でリリースする予定らしい。
そのときに整理するかもしれないな。
827デフォルトの名無しさん:2011/02/25(金) 16:00:08.95
Kahuaは開発止まってしまったの?
828821:2011/02/25(金) 22:20:14.91
>>822
例も示して下さりありがとうございます。
>>823
次回からそうします。
829デフォルトの名無しさん:2011/02/27(日) 19:59:30.11
WiLiKi が git に移行した。 Gauche も近い内に移行する模様。
時代の趨勢というやつだな。
svn は全部ディレクトリっていう概念がわかりやすくて簡単だけど、
動作が遅いっているのが致命的だったな。
それさえ改善されれば git より使い勝手のよい場面もありそうなんだが。
830デフォルトの名無しさん:2011/02/27(日) 21:24:12.05
あ、本当だ

SourceForge - wiliki/WiLiKi/summary
http://wiliki.git.sourceforge.net/git/gitweb.cgi?p=wiliki/WiLiKi;a=summary
831デフォルトの名無しさん:2011/02/27(日) 21:30:04.79
流石に今の時代、保守目的以外でSubversion使う意味ってほぼないと思う。
Git、Mercurial、Bazaarの分散三強で、ほとんどのケースをカバーできるだろうし。
832デフォルトの名無しさん:2011/02/28(月) 14:41:51.82
Gaucheって開発者は実質一人?
833デフォルトの名無しさん:2011/02/28(月) 16:19:23.41
ひとりだね。フィードバックしてくれるコアなユーザは一定数いるけど。
ChickenとかGambit、Bigloo、Ypsilonなんかも基本ひとりみたいだし、
LarcenyとかMoshも二、三人でやってるし、あんまり大勢ではないことが多いと思う。
そもそも、Schemeだと規模も割と小さいし。

Common LispのSBCL辺りは、割と多くの人でやってるっぽいけど。
834デフォルトの名無しさん:2011/02/28(月) 18:49:14.95
srfi なんかは既存のものを手直ししたりして使うこともあるし、
sxml まわりのライブラリも既存のものを取り込んでる。
だから全体をひとりで書いてるというわけではないけど、
大半はひとりで書いてるし、方針の決定も(ユーザーの意見は訊きつつも)ひとりの裁量でやってる。
「Gauche の開発者」と言えるのは shiro さんひとりだろうね。
835デフォルトの名無しさん:2011/02/28(月) 20:03:38.51
>>833
SBCL は CMUCL が少人数でやっていたのを、もっと皆でワイワイやろうぜっていう
感じで始まった気がする(気のせいかもしれないけど)。

CL だと Clozure も独りっぽいね。
836デフォルトの名無しさん:2011/02/28(月) 20:33:10.24
shiroさん一人がコントロールしている訳だから
バランスもよく取れてていいね
837デフォルトの名無しさん:2011/02/28(月) 20:38:17.39
CCLはフルタイムの開発者が二人(Gary ByersとR. Matthew Emerson)と、
他のClozure Associatesの社員もたまにコミットしてるよ。元々MCLの開発者で作った会社だし。
バグレポートとかすると、大抵前述の二人が対応してくれる。
838デフォルトの名無しさん:2011/02/28(月) 20:42:20.41
あ、そうなんだ。情報サンクス。
839デフォルトの名無しさん:2011/03/01(火) 00:24:23.22
いつも思うんだよ、shiroさんやっぱ超人だと思う。
840デフォルトの名無しさん:2011/03/01(火) 00:32:34.41
shiroさんほどのlisper/schemerになるにはどういう手順で勉強すればいいんだろう
ハードルがあまりにも高すぎて何から手をつけてよいのか分からないw

ときたま思うことだけど、純粋なlisper(?)と多言語に精通しているlisperの差はかなり大きい気がする
前者のコードが奇麗なのは勿論だけど、後者の方は組み立て方そのものが何か違う
見ている世界が違う、って感じかなあ
うまく言葉で言い表せないのが残念
841デフォルトの名無しさん:2011/03/01(火) 00:33:16.51
つ 地道な努力
842デフォルトの名無しさん:2011/03/01(火) 01:14:26.66
コードを書くときに一番重要なのは「抽象化」だと思うんだよな。
それと「名前」

goto や関数呼出しや大域脱出やその他諸々のフロー制御が継続ひとつで
説明が付くっていうのは自分では到底思い付けないけど、
Scheme を設計した先人はうまいこと抽象化したもんだと思うよ。

継続までいかなくても、 fold とか思い付いた奴は超偉いと思う。
map くらいならまぁ思い付くけど、
fold をひとつのパターンとして抜き出すのは優れた洞察力が必要だろう。

そういう抽象化された世界、メタな世界で考えることができて、
なおかつ低レベル (下層) の現実を忘れないっていうことが出来るようになるには
結局はそれが必要な場面に遭遇したことがあるという経験の積み重ねじゃないかな。
shiro 氏は東大卒ってだけあって天性の才能はあるかもしれないけど、実務で鍛えられた部分は大きいと思う。

数学に王道なしって言うけど、どんな分野でもそうだよね。
843デフォルトの名無しさん:2011/03/01(火) 01:34:22.31
東大卒なんだ、知らなかった。
844デフォルトの名無しさん:2011/03/01(火) 14:13:04.31
継続を考えたのは、ALGOLの意味論をやっていた理論屋さんたち。
Landinさんもほぼ同時にプラクティカルな視点から同じことを考えていた。
SECDマシンは継続を直接扱うことが出来る抽象機械だから。
その後も継続の研究は続いていて、中にはfirst class objectとしての研究もある。
Schmeの貢献はfirst class objectとして洗練した形で広く提供したこと。

Fold関数は昔から数学であるけど、
APL、BackusのFPの貢献が大きいと思う。
Backusさんはたった一人であんな事掘り下げちゃって凄い。
さすがTuring賞。
845デフォルトの名無しさん:2011/03/01(火) 18:14:39.56
gotoや脱出は継続を無視する。無視してるのに継続継続いうのは余計なお世話。
逆に、堂々と出てきて良いはずの関数呼び出しの時はどこかに隠れている。

nonlocalと同じパターン。
今までlocalなんて一言もいわなかったのにいきなりnonlocalの話になる。
できる奴は、授業で習ってないはずの話になぜかついて行ける。
できない奴はここで落ちこぼれる。
846デフォルトの名無しさん:2011/03/01(火) 18:34:45.36
ループや関数呼び出しの意味付けから継続が出てきた。
847デフォルトの名無しさん:2011/03/01(火) 21:06:12.61
gauche も git に移行したね。
848デフォルトの名無しさん:2011/03/01(火) 21:41:44.24
>>844
これはわかりやすい
なるほどそうだったのか
849デフォルトの名無しさん:2011/03/03(木) 12:35:59.47
Kawa ABCLで実用的なもの作られた事例をみかけない
Clojureはあるのに
850デフォルトの名無しさん:2011/03/03(木) 13:17:45.15
SECDマシンとforthを比較するとどんな感じになるの?
851デフォルトの名無しさん:2011/03/03(木) 14:28:10.29
forth はユーザースタックとシステムスタックしかない
852デフォルトの名無しさん:2011/03/03(木) 18:12:46.92
>>851
LispマシンのCPUコアもそんなもんだぞ
853デフォルトの名無しさん:2011/03/03(木) 22:38:02.29
なんか Gauche の git の head が configure の段階で変になってるっぽい。
make を初めたら必要なマクロ (GAUCHE_SIGNATURE とか) が定義されてないことになっててコンパイルできない。
俺の環境のせいかもしれんから一応だれか確認してくれんか?
854デフォルトの名無しさん:2011/03/03(木) 22:39:24.84
肝心なこと言い忘れた。
環境は Mingw な
855デフォルトの名無しさん:2011/03/04(金) 00:20:32.52
>>849
知っている範囲で、KawaやABCLを使ってる人と、Clojure使ってる人の数を比べると良いと思う。
それに、Clojureはもう別のLispだし、SchemeのKawaやCLのABCLとは立ち位置も違う。

あと付け加えるとしたら、Javaと連携したいときって、仕事の場面でのことが多そうだから、
そういうケースだと事例が表に出にくいはず。
856デフォルトの名無しさん:2011/03/04(金) 01:09:50.79
>>844
何か勉強になったぞありがとう
やっぱ論文読まなきゃ駄目だな
857デフォルトの名無しさん:2011/03/04(金) 05:22:09.87
>>853 うちでも再現した。
config.statusはsubversion版で作られるのと同じなんで、configure自体はうまくいってる。
だが src/gauche/config.h.in の行末がCRLFだと、置換がうまくいかないようだ。
config.h.in の行末をLFに変換してやったら通るっぽい。
gitの設定次第だと思うがよくわからん。
858デフォルトの名無しさん:2011/03/04(金) 07:29:33.34
>>857
thx
改行の問題だとは気付かなかった。
859デフォルトの名無しさん:2011/03/04(金) 19:01:06.81
git の設定を変更するコマンド

git config core.autocrlf false

これで改行変換が起こらなくなる。
その後に

git checkout .

でワークディレクトリのファイルを更新しなおしてOK
860デフォルトの名無しさん:2011/03/04(金) 21:55:28.44
Ypsilon の開発って止まってんの?
861デフォルトの名無しさん:2011/03/05(土) 09:51:19.52
ピンボールの新作のリリース後サポートとかにかかりきりなんじゃないかな。
862デフォルトの名無しさん:2011/03/05(土) 10:19:11.10
Ypsilon を組み込んだピンボールって、
夢の、現代版 Pinball Construction Set になる予定ということなんだよなぁ
863デフォルトの名無しさん:2011/03/09(水) 02:21:46.20
LispってSpueakみたいなのは無いの?
864デフォルトの名無しさん:2011/03/09(水) 02:34:57.00
Smalltalk の Squeak に相当するのは Emacs かなあ
インタラクティブな環境と言う意味で

あとはこれ

http://swikis.ddo.jp/abee/17
865デフォルトの名無しさん:2011/03/09(水) 17:36:35.91
Elisp使う人って居てるの?
866デフォルトの名無しさん:2011/03/09(水) 20:53:53.95
>>865
興味があるなら elisp のスレに行けば?
867デフォルトの名無しさん:2011/03/09(水) 20:55:11.65
>>865
いっぱいるよ
emacesnでelisp使えないやついない

というかelisp使えないならemacsにこだわる理由がほとんどないと思えばいい>>今時の編集緩急
868デフォルトの名無しさん:2011/03/09(水) 21:48:31.64
eclipse と elisp は少し似ている(字面が。)
869デフォルトの名無しさん:2011/03/09(水) 22:50:40.23
elispで証明系書いちゃう人も何人もいるくらいだし。
870デフォルトの名無しさん:2011/03/10(木) 15:22:38.28
SwindleはCommon Lispのコードを移植するのに使えないのだろうか
setfはあるよね
871デフォルトの名無しさん:2011/03/11(金) 11:35:39.27
racketには何種類かclassの定義があるみたいですが
Gaucheと一番互換性が高いのはどれなのでしょうか
872デフォルトの名無しさん:2011/03/12(土) 01:01:02.71
蓮舫、民主党が仕分け ・ 廃止したもの


 ・ 石油と塩の備蓄 ( 仕分けパフォーマンスの生贄 )

 ・ 防衛費 ⇒ 自衛隊災害救出活動も縮小 ( 日本の自衛・防衛弱体化は民主党の継続悲願 )

 ・ スーパー堤防 ( 100年に1度の大震災対策は不要 )

 ・ 災害対策予備費 ( 生活保護枠拡大(母子家庭)の財源化 )

 ・ 地震再保険特別会計 ( 子ども手当の財源化 )

 ・ 耐震補強工事費 ( 高校無償化の財源化 )

 ・ 学校耐震化予算 ( 自民党が推進していた政策 )

 ・ 除雪費用 ( 蓮舫が東北地方整備局を目の敵に、結果は言わずもがな )

 ・ 八ッ場ダム ( 「河川は自然堤防のままが環境にやさしい」 )  

「二百年に一度の地震に備えてお金を使う必要があるんですか?」
873デフォルトの名無しさん:2011/03/12(土) 12:22:31.83
そのスーパー堤防が完成してたとしても無駄だと証明されたのが今回の震災なのだが
874デフォルトの名無しさん:2011/03/12(土) 13:58:27.84
スレ違いに付き合う奴はいずれにしても賢くない
875デフォルトの名無しさん:2011/03/12(土) 16:33:32.24
そうだ!マクロの力で震災被害者生き返らせようぜ
俺って転載

Dead Over Lambda

876デフォルトの名無しさん:2011/03/12(土) 20:10:27.40
elispで大きいプログラム作れる人はホンモノのハッカーだ
道具としたら不便すぎるelispで作れるってことは、実際何ででも作れるレベルの人だ
877デフォルトの名無しさん:2011/03/14(月) 03:25:32.06
elispはすごく便利。
Emacs固有機能のprimitive, bindingが素晴らしい。
878デフォルトの名無しさん:2011/03/17(木) 07:37:17.18
Ypsilon は Windows では VC でのコンパイルだけしかサポートしてないの?
879デフォルトの名無しさん:2011/03/19(土) 08:02:08.76
>>877
パッケージが無いってのが致命的に駄目言語だと思うんだけど>elisp
880javascript:2011/03/19(土) 09:35:21.07
>>879
呼んだ?
881デフォルトの名無しさん:2011/03/19(土) 15:30:01.44
>>879
シンボルの命名規則で何とかなってますが?
現実的にかなり大きなライブラリ集を管理できてるわけで。
882デフォルトの名無しさん:2011/03/19(土) 17:56:00.95
>>879
世の中パッケージ管理がサポートされてる言語の方が「はるかに:少ないよ
883デフォルトの名無しさん:2011/03/19(土) 18:57:07.50
>>881
何とかなってるか?例えば適当に 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))
884デフォルトの名無しさん:2011/03/19(土) 19:31:40.98
それ同じ意味じゃないし。
レベルの低いプログラマの意見は無視させていただきます。
885デフォルトの名無しさん:2011/03/19(土) 21:37:55.70
lispで名前空間が問題になるのはアプリケーションが共通のプラットホーム上で動く事に起因するんだよな
プロセス毎とかプロジェクト毎にシンボルがぶつからないならここまで問題にならんだろう。
886デフォルトの名無しさん:2011/03/19(土) 22:09:51.81
Buffer localな変数とか、dynamic scopingとかあるから、
意外と問題にならないです。>>883はパッケージがあったゆえに、
名前参照が複雑になって問題になったケース
887デフォルトの名無しさん:2011/03/19(土) 22:22:28.42
つか, 作れるだろ, elisp でパッケージシステム…
なしでやってんだからほっとけばいいじゃん
888デフォルトの名無しさん:2011/03/19(土) 22:31:46.94
navi2ch-ifxemacs とかのユーティリティぐらいは
ifxemacs と書けるほうがちょっとは見易いはず。
889デフォルトの名無しさん:2011/03/19(土) 22:38:55.31
だれか作って寄付してやれよ
おれはしらん
890デフォルトの名無しさん:2011/03/20(日) 11:50:50.78
命名規則でなんとかなるって
運用対処でなんとかするのと同じで
開発運用ユーザが少人数の場合だけじゃないの
891デフォルトの名無しさん:2011/03/20(日) 21:51:53.15
みずほの障害が本当にバッチ処理の遅れだとしたら、こんどこそ本当に
MapReduceみたいな並列計算が必要とされるようになるのかもしれん。
そのときは関数型言語も付随して地位向上といきたいね。
892デフォルトの名無しさん:2011/03/21(月) 00:09:39.16
>>891
とっくの昔に並列処理です。
893デフォルトの名無しさん:2011/03/21(月) 10:08:40.03
>>892
スマソ。恥じかいた。。
ただ、並列計算の知識を入れていく必要性が今後もっと上がるのは確かな気がする。
銀行に限らず、普通に扱うデータ量がめちゃくちゃ増えているんじゃないかと思うんだ。
894デフォルトの名無しさん:2011/03/21(月) 10:44:11.56
>>893
今時はどこでも並列計算はやってるけど、割と泥臭いノウハウの塊みたいだなー。
Google ではフレームワークのレベルで作り込まれててちょっとしたアイデアを試す
のが簡単に並列化できるみたいな話は聞いたことがある。
言語よりもフレームワーク、ライブラリの作り込みで対応できる部分が大きいんじゃないのかな。
並列化に注目が集まってもそれが関数型言語への注目へは繋がらない気がする。
895デフォルトの名無しさん:2011/03/21(月) 11:12:20.69
いわゆるdistributed computingは、いまだとJavaのApache Hadoopが流行ってるのでは
関数型じゃないですね
googleがそもそも関数型使ってないですし……
896デフォルトの名無しさん:2011/03/21(月) 11:28:57.89
並列計算って一口にいっても、データや計算の性質によって扱い方は色々違うよ。
何らかの並列計算ってことなら、現場で使われるようになってもう何十年、ってとこだろ。
Google的なアプローチは、大量のデータから何らかの傾向を抽出するには良いんだけど、
トランザクションを矛盾無くシリアライズしないとならない銀行のシステムとは全く性質が違うと思う。
勘定系は触ったことないけど、でかいデータベースの実装の中身いじってるんで。
Lispで書いてるけど低層は全然関数型っぽくない。
897デフォルトの名無しさん:2011/03/21(月) 11:46:13.11
それもそうだな。
銀行システムで MapReduce しようとしたら Map できるように切り分けるのが大仕事になりそうな予感。
898デフォルトの名無しさん:2011/03/21(月) 12:04:14.99
今回のみずほのトラブルは
並列ソートマシンが想定しているケースを大幅に上回る
口座集中が起きたため。
ワーストケースを見積もって、落ちないように、
あるいは完全に処理できるように投資するかどうかの問題。
プログラミングパラダイム的なことでは解決できない。

まあ窓口閉まってから一気に勘定する業務のあり方を見なおせばいいんだが。
899デフォルトの名無しさん:2011/03/21(月) 12:11:43.98
特定の口座に取引が集中してってのはいかにももっともらしいんだけど
みずほ側からそういう発表ってあったの?
900デフォルトの名無しさん:2011/03/21(月) 12:24:27.78
ぐぐれかす
901デフォルトの名無しさん:2011/03/21(月) 12:42:49.34
> 同行は「東京都内の特定支店の特定口座への振り込みが
> 想定以上の件数に上った」と説明しており
ああほんとだ
902デフォルトの名無しさん:2011/03/21(月) 12:54:44.12
だけど1秒一回のトランザクションが処理できない
webシステム作った大手開発会社なんてものもあるしね
903デフォルトの名無しさん:2011/03/21(月) 14:11:02.75
例の図書館?
904デフォルトの名無しさん:2011/03/22(火) 18:13:17.98
racketで作ったWebサイトをdocomoの携帯で見てみたら
textarea も submit ボタンも表示されない
905デフォルトの名無しさん:2011/03/23(水) 00:58:56.00
906デフォルトの名無しさん:2011/03/23(水) 15:22:19.25
とあるLISPのソースを読んでおります。

append2という関数の動作がよく理解できません。
もしよろしければ解説を願いいたします。

自分でよんだかぎりでは、

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_ ) );
}
907デフォルトの名無しさん:2011/03/24(木) 00:03:25.80
いや、ごく普通の再帰によるappendだろ?
908デフォルトの名無しさん:2011/03/24(木) 00:30:22.77
append の実装も貼ってみたらいいんじゃないかな
909デフォルトの名無しさん:2011/03/24(木) 18:06:28.99
>>907-908

レスありがとうございます。
ソースを実行して動作確認したところ普通に a_ と b_ を接続しているだけでした。

お手数おかけいたしました。
910デフォルトの名無しさん:2011/03/24(木) 18:28:19.31
なんで2なんだろうな?
ループ版があるとか?
それとも二引数のsubrは全部末尾に2付けるとか?
911デフォルトの名無しさん:2011/03/24(木) 18:56:33.34
>>910
ほかにも concat2 という関数などもあったので、Cの標準ライブラリと
名前が被るかもしれないと思って 2 をつけたのかもしれないですね。
912デフォルトの名無しさん:2011/03/24(木) 19:13:49.02
lispのappendは不定長引数を取るのが普通だから、2引数版であることを明示したかった、とか?
不定長引数版のappendはappend2をもとに定義されたりしてないかな。
913デフォルトの名無しさん:2011/03/24(木) 19:19:21.46
ああ下請に付ける2か。
914デフォルトの名無しさん:2011/03/24(木) 21:17:38.39
guile2 って Windows では動かないの?
915デフォルトの名無しさん:2011/03/25(金) 12:44:38.22
>>905
ECB
の進化は止まったままなのか
916デフォルトの名無しさん:2011/03/29(火) 23:10:47.50
glint が最新の Gauche で使えるようになった模様。
917デフォルトの名無しさん:2011/03/29(火) 23:37:10.02
ほほぉ
Gauche-gtkも簡単にwin,linux両方で使えるようになればいいなぁ
918デフォルトの名無しさん:2011/03/30(水) 00:17:08.75
Gauche-gtk は Windows で使える。
自分でビルドするのが面倒であれば諸々の拡張込みで提供しているこのサイトが便利かも。

http://gigo-ice.org/script/scheme/gauche/gauche-unstable/index.ja.html

スレッド対応パッチを適用していたりもする。
でも、あくまで非公式なものなのでトラブルがあっても泣かない強い人用。
919デフォルトの名無しさん:2011/03/30(水) 14:53:14.88
地獄のミサワ「ラムダとか俺はとっくに超えててクシーだから」
920デフォルトの名無しさん:2011/03/30(水) 23:00:08.93
>>918
やっぱmingwじゃ簡単にはビルド出来ないんか
921デフォルトの名無しさん:2011/03/30(水) 23:29:03.08
>>920
根本的な部分では問題ないけど、ささいなひっかかりはいっぱい有る。
C の基礎やビルドツールの基本的な使い方くらい知ってればなんとかなるレベル。
面倒ではあるが。
922デフォルトの名無しさん:2011/04/03(日) 00:20:03.16
Emacs Lisp が色々とレキシカルスコープになるって話を聞いたんだけど、実際のところどうよ?
923デフォルトの名無しさん:2011/04/03(日) 00:40:04.61
>>922
おお、とうとう lexbind が trunk に merge されたのね。

http://comments.gmane.org/gmane.emacs.devel/138010

これから Lisp 処理系を作る人は elisp 互換でも良いかも。
924デフォルトの名無しさん:2011/04/03(日) 08:59:54.54
ついにelispもレキシカルスコープかぁ

これは歴史的だ
925デフォルトの名無しさん:2011/04/03(日) 09:20:45.49
>>923
これマジなの?それともエイプリルフールネタ?
926デフォルトの名無しさん: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.
927デフォルトの名無しさん:2011/04/04(月) 00:58:32.40
dynamic binding だと check には (lambda nil a) が入って、
lexical binding だと check には (lambda nil nil) が入るのか。
なるほど・・・
928デフォルトの名無しさん:2011/04/04(月) 01:17:25.25
それで、dynamic binding でも (let ((a nil)) (funcall (lambda () a))) だと nil が返ると。
評価される時の環境に応じて値が決まるから dynamic binding なのか。勉強になった。
929デフォルトの名無しさん:2011/04/04(月) 10:32:40.55
>>924
そうするとelispにもschemeのparameterizeみたいな機構が導入されるの?
(CLispはよく知らない)
930デフォルトの名無しさん:2011/04/04(月) 22:47:36.61
bzr で trunk を取って来ても lexical binding にならない・・・

こっちにはちゃんと merge された記録があるのに、

http://article.gmane.org/gmane.emacs.diffs/109480

リポジトリの方は古いまま。

http://git.savannah.gnu.org/cgit/emacs.git/log/

開発用のリポと公開用のリポって時間差があるの?
931デフォルトの名無しさん:2011/04/05(火) 00:36:11.78
あ、先に (setq lexical-binding t) しておく必要があるのか・・・

バージョン確認したらリポジトリ古くなかったし、スマソ。
932デフォルトの名無しさん:2011/04/05(火) 00:50:42.48
何もせんでも変わったらこれまでのプログラム動かんやん…
933デフォルトの名無しさん:2011/04/05(火) 01:06:52.63
いやー、お恥ずかしい
スレ汚しスマソ・・・
934デフォルトの名無しさん:2011/04/05(火) 02:11:01.69
>>924
fluid binding はいい加減もう古いよねえ
935デフォルトの名無しさん:2011/04/05(火) 13:14:40.06
elispはclと互換になるってこと?
936デフォルトの名無しさん:2011/04/05(火) 15:19:45.19
Common Lispにはbuffer localな変数なんてないし…
937デフォルトの名無しさん:2011/04/05(火) 19:20:12.41
T,NIL まくらが欲しい。
938デフォルトの名無しさん:2011/04/05(火) 20:35:11.34
西日本も福島原発の放射能に曝される。

4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
939デフォルトの名無しさん:2011/04/05(火) 22:34:41.20
>>924
長い時間掛かったけど、ここまで来るのは並大抵のくろうじゃあ無いよね

(setq before (lambda () "before"))
=> (lambda nil "before")
(setq lexical-binding t)
=> t
(setq after (lambda () "after"))
=> (closure (t) nil "after")
940デフォルトの名無しさん:2011/04/05(火) 22:48:47.41
>>937
なんで枕?
昔nilシャツってのはあったけど(Tシャツに対抗したらしい)
941デフォルトの名無しさん:2011/04/05(火) 23:07:00.59
>>940
今夜はT?それともNIL?
942デフォルトの名無しさん:2011/04/05(火) 23:12:28.90
新consさんいらっしゃい
943デフォルトの名無しさん:2011/04/05(火) 23:14:00.12
窓辺のマーガlet、cdr三枝です。
944デフォルトの名無しさん:2011/04/05(火) 23:26:51.60
(setq pillow T)
945デフォルトの名無しさん:2011/04/06(水) 00:43:55.04
>>935
elisp と 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 の勉強を始めても良いかもしれないね
946デフォルトの名無しさん:2011/04/06(水) 02:43:01.77
emacs の git が更新されないな
bzr は遅すぎるから早く直って欲しいわあ

http://comments.gmane.org/gmane.emacs.devel/138127
947デフォルトの名無しさん:2011/04/07(木) 15:01:15.62
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
LISPはアゲアゲだがSchemeは動かず。
948デフォルトの名無しさん:2011/04/07(木) 16:42:36.99
Ada に負けてるとは
949デフォルトの名無しさん:2011/04/07(木) 23:17:05.85
Adaって活発になるイベントってあったっけ?
950デフォルトの名無しさん:2011/04/08(金) 00:09:34.00
それは国家機密。
951デフォルトの名無しさん:2011/04/08(金) 02:08:24.76
あれだ、きっと原発制御に使われてるんだ!
952デフォルトの名無しさん:2011/04/13(水) 14:33:35.69
静かだな。lispはもう死んだのか
953デフォルトの名無しさん:2011/04/13(水) 15:54:12.69
ここがLispの中心だったのか
そりゃあ失礼したね色々とw
954デフォルトの名無しさん:2011/04/13(水) 16:03:37.97
どういたしまして。
955デフォルトの名無しさん:2011/04/13(水) 16:46:06.72
Gaucheを組み込みで使用したいと思っております。

以前はコンパイル結果を保存出来なかったようですが、
現在はバイナリを保存しておけるようになったのでしょうか?
956デフォルトの名無しさん:2011/04/13(水) 17:18:38.72
今の日本語圏での中心ってどこ?
957デフォルトの名無しさん:2011/04/13(水) 17:40:55.71
関西?
958デフォルトの名無しさん:2011/04/13(水) 19:41:01.98
>>955
プリコンパイルはだいぶ以前からできてた。
後に仕組がかわったりはしたが。
とりあえず src/precomp を見ろ。
959デフォルトの名無しさん:2011/04/13(水) 19:44:56.53
>>958
了解です。
960デフォルトの名無しさん:2011/04/13(水) 19:57:02.93
組込ってどういう規模のもの?
961デフォルトの名無しさん:2011/04/13(水) 20:04:14.10
自家製のゲームに組み込みたいなと。
リアルタイムローグライクで、モンスターのAIとして使ってみたいと思いました。

AIといっても反射型なので単純なものです。
962デフォルトの名無しさん:2011/04/13(水) 21:37:29.65
昔は組み込み用途も想定してたみたいだけど、
最近はスクリプト用途を重視するようになってる。
あまりインターフェイスが整備されていないしドキュメントもないので、結構面倒かも。

GC が問題にならないか気になる。
Gauche が使う領域だけが GC 対象になるの?
詳しい人、説明よろ。
963デフォルトの名無しさん:2011/04/14(木) 08:57:45.57
Gaucheのアロケートルーチン(実体はBoehm GC)でアロケートしたメモリだけがGCの対象。
Gaucheでアロケートした領域を指すポインタをアプリ側で保存したい場合、
それがGCに見えるように工夫が要る。Gaucheのハッシュテーブルに登録しておくとか。
ケースバイケース。
このへんの話はGaucheに特別のものではなく、GCのある外部ライブラリを使う場合に
普通に考えるようなことを考えておけばOK。
ちゃんとしたドキュメントは無いけど、メモ的なものはどっかで見たような気がする。
examplesの中だったかな。

964デフォルトの名無しさん:2011/04/15(金) 17:19:50.54
adaなんか使ったら仇になる。
965デフォルトの名無しさん:2011/04/15(金) 17:22:52.36
http://hato.2ch.net/test/read.cgi/voice/1285508529/92
暇つぶしにlispアンチに喧嘩をうってきた。
966デフォルトの名無しさん:2011/04/15(金) 18:39:08.51
elisp にasdfも入ったらいいのに
967デフォルトの名無しさん:2011/04/15(金) 19:59:22.33
>>965
声優スレに突撃してアレは痛い痛すぎる
93で返されてるし
968デフォルトの名無しさん:2011/04/15(金) 20:26:35.55
竹内先生のところにLISPの3人を放り込んで
『初めて(/ω\) の人のためのLISP』という本を出したら買うのに
969デフォルトの名無しさん:2011/04/15(金) 20:34:24.87
多分、連中はわけわかめやろ ええねんあれで
970デフォルトの名無しさん:2011/04/16(土) 20:02:01.65
971デフォルトの名無しさん:2011/04/16(土) 20:08:10.38
このまえR6RSが出たばっかりのような気がするのはなぜだろう...
もう何年も経ってるんだよな
972デフォルトの名無しさん:2011/04/16(土) 20:19:17.74
>>970
Thanx!
>>971
あっと言う間だね

この調子だとオレSchemeがRnRS対応できる日が永遠に来ない
973デフォルトの名無しさん:2011/04/16(土) 21:05:14.56
[]が予約に戻ったり、SRFIからcond-expand、parameterize、guard、環境変数へのアクセス等が導入されたり、
recordがR6RSから大幅に簡略化されたり、byte vectorがblobに改名されて再導入されたり、
loadが復活して、レキシカルスコープに外部ファイルを展開するincludeが導入されたり、
libraryがmoduleに改名されたり、差別されてた手続きが適切なモジュール名で復権したり。

取り敢えず、読んで思ったことは、R6RSを黒歴史にしたがっているというか、
後方互換性とか取る気ないだろ、これw
974デフォルトの名無しさん:2011/04/16(土) 21:24:28.07
>>973
NOTES Language changes ってところ見たら Revised "5" report からの差分が書いてあった
R6RS 涙目w
975デフォルトの名無しさん:2011/04/16(土) 22:12:41.47
>>970のR7RSはかなりいい方向に行っていると思う
gaucheはどうするんだろうか?
976デフォルトの名無しさん:2011/04/16(土) 22:27:46.51
ていうか R6RS って誰が得したんだろうね
977デフォルトの名無しさん:2011/04/16(土) 23:07:00.05
色々統一されたら得する予定だった。
統一感に興味ない人はPerlでもなんでも得する。
978デフォルトの名無しさん:2011/04/17(日) 10:14:46.57
なんかBSフジでLispの番組が始まるって 書いてたよ。竹内せんせが教授する番組か?
979デフォルトの名無しさん:2011/04/17(日) 12:51:23.24
竹内って仏様の奴かw
はやく死ねよ
980デフォルトの名無しさん:2011/04/17(日) 19:09:36.95
R5RS 1996
R6RS 2007
なのに、
backgroundに、1992までしかでてこないw
981デフォルトの名無しさん:2011/04/17(日) 19:39:35.30
R6RSは完全にハズレだったなw
やみくもに機能を追加した感がある
982デフォルトの名無しさん:2011/04/17(日) 20:46:16.42
SRFIが相応しい物まで仕様に突っ込んで酷いことになった感がある。
それと、厳密で網羅的な仕様が欲しいなら、Common Lispを使えば良かった。

しかも、推進した側のPLTは、Racketで違う地平に旅だってしまったという。
983デフォルトの名無しさん:2011/04/17(日) 22:36:12.06
ライブラリはここで変えちゃったらせっかく決めた甲斐がないと思うんだが…
まぁ、今の内に変えないとって感じなのかもしれんが。
984デフォルトの名無しさん:2011/04/18(月) 05:50:48.70
やっぱ俺はR5RSが好きだな
無駄がなくて洗練されてるわ
985デフォルトの名無しさん
schemeのasdfはまた仕様変更したってこと?