Lisp Scheme Part25 ..
[2ch|▼Menu]
152:デフォルトの名無しさん
09/02/03 23:03:12
それからR5RSのmapは返り値の順序は規定されているけど
評価順序は未規定
だから
(map display '(A B C)) => '(#<undef> #<undef #<undef>)
標準出力にはABC、ACB、BAC、BCA、CAB、CBAのいずれか
評価順序をリストの順通りにしたいのならfor-eachを使う
(for-each display '(A B C)) => #<undef>
標準出力には必ずABC
評価順序と戻り値のデータ構造内の順序の区別は
HaskelのIOモナドにもつながる
(たぶん)
R5RSでは関数の引数の評価順さえ未規定

153:デフォルトの名無しさん
09/02/03 23:52:11
>>152
>>それからR5RSのmapは返り値の順序は規定されているけど
>>評価順序は未規定

うわ…これ今ごろ知ったよ、ありがとう。つかこの仕様で誰が得するんだろ。
慌てて調べたけど、Gauche は独自仕様で常にリスト内の順番どおり、なのね。
ちょっと安心。

154:デフォルトの名無しさん
09/02/04 00:06:16
並列処理が楽になるとは聞いたな。

155:デフォルトの名無しさん
09/02/04 12:25:14
少しActorも意識してるんだろうね。
各要素に並行にfがメッセージパッシングされて。

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



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

こうすればいいんじゃないの?
(lambda (f g) `(lambda (x) (,f (,g x))))

157:デフォルトの名無しさん
09/02/04 22:50:12
quoteが嫌いな人はクロージャやsyntax-rulesを使う
quoteが大嫌いな人はPythonやRubyを使う
そんな気がする

158:デフォルトの名無しさん
09/02/05 00:05:31
quasi-quoteの便利さは異常。
そんな嫌いになるなんて、これが本当のくぉーつ嫌いってやつか・・・

159:デフォルトの名無しさん
09/02/05 00:51:16
昔のマクロにはバッククォートなんてなかったよな
ひたすらlistでS式をこさえてたっけw

160:デフォルトの名無しさん
09/02/05 03:32:58
どんだけ昔の人だよ

161:デフォルトの名無しさん
09/02/05 03:40:10
Lisp-85とかって言っても分からんだろうなw

162:デフォルトの名無しさん
09/02/05 03:53:31
そんな最近かよ
とっくにバッククオートあるよw

163:デフォルトの名無しさん
09/02/05 04:06:48
Lisp-85ってS-OSというZ-80のOS上で動く奴なんだが
fexpr形式やmacro形式はあってもバッククォートは無かったぞ

164:デフォルトの名無しさん
09/02/05 08:52:25
Alan Bawden, "Quasiquotation in Lisp"によれば、

 現在とは少し記号法が違うが、1972年のConniverが現代的な
 quasi-quoteの起源。

 少なくとも1977年ごろのLisp machineには、現在使われているのと
 ほぼ同じquasi-quoteがあった。

ということらしい。

D. V. McDermott and G. J. Sussman, "The Conniver reference manual," 1972
fURLリンク(publications.ai.mit.edu)

Alan Bawden, "Quasiquotation in Lisp," 1999
URLリンク(citeseerx.ist.psu.edu)



165:デフォルトの名無しさん
09/02/05 10:11:52
'の逆はevalだと思ってた

166:デフォルトの名無しさん
09/02/05 10:29:33
>>163
Z80には荷が重かったのでは
メモリどんだけ積んでたとか知らないけど
展開後は再帰関数のかたまりだし

167:デフォルトの名無しさん
09/02/05 10:39:22
全然問題ない。

168:デフォルトの名無しさん
09/02/05 10:57:09
あっそ
ならLisp-85作った人が入れ忘れたんだね

169:デフォルトの名無しさん
09/02/05 11:05:52
quasi-quoteを効率を保ってきちんと実装するのは意外と難しい。
80年代になってもマクロと組み合わせた時の実装手法の論文があった。
アンチquasi-quote派というのが昔はいた。Common Lispで決着。

170:デフォルトの名無しさん
09/02/05 11:51:35
Gauche WiLiLiのあんまり目立たないとこに自分の作ったパッケージ書き足す方法はないものだろうか

171:デフォルトの名無しさん
09/02/05 16:28:07
>>156
その関数の引数f,gにシンボルxを引数として渡すと死ねる。


172:デフォルトの名無しさん
09/02/05 18:05:14
やっぱり gensym が必要なんだね。

173:デフォルトの名無しさん
09/02/05 18:47:23
関数名じゃなく、関数「値」を式に埋め込めばいい。
gosh> (define x (list + 1 2))
x
gosh> (define y (list '+ 1 2))
y
gosh> (define + -)
+
gosh> (+ 1 2)
-1
gosh> (eval x (current-module))
3
gosh> (eval y (current-module))
-1

174:デフォルトの名無しさん
09/02/05 20:23:37
再帰関数だったら?

175:デフォルトの名無しさん
09/02/05 21:49:55
そこまで行くとR5RSでも解決できてるかどうか怪しい
R6RSは再定義禁止だっけ

176:デフォルトの名無しさん
09/02/05 21:59:07
R5RSの件は
(define f (letrec ((f ...)) f))
と書けば安全かも

177:デフォルトの名無しさん
09/02/06 08:10:38
仕様に自由があるから面白い。

178:デフォルトの名無しさん
09/02/06 16:01:07
>>173
で'の使い方わかった気がするけど
本格的に勉強するならどの本がいいのでしょうか?

179:デフォルトの名無しさん
09/02/06 17:53:52
>>178
SICPがいいよ
マクロの話題は一切ないけど、マクロは遊ぶものであって勉強するものではない
それでもSICPがSchemeを使ってる理由を考えながら読めばおもしろいかもね

180:デフォルトの名無しさん
09/02/06 18:39:03
俺はOnLispをお勧めする。

181:デフォルトの名無しさん
09/02/06 19:54:30
ふつうにあのお魚の本でよくないか?

182:デフォルトの名無しさん
09/02/06 20:48:41
処理系のソースで十分

183:デフォルトの名無しさん
09/02/06 21:37:03
URLリンク(user.ecc.u-tokyo.ac.jp)
ほれ

184:デフォルトの名無しさん
09/02/06 23:02:05
うわーっ!びっくりした
と避ける

185:デフォルトの名無しさん
09/02/07 08:31:34
>>169
ふむふむ、勉強になります。
そういえば関係あるかわからないけど、 scheme じゃなくて elisp も、
Emacs19 のころは

`(foo ,bar)

とはかけなくて、

(` (foo (, bar)))

と書いていたような。

186:デフォルトの名無しさん
09/02/07 13:41:36
関係ないけどチャイティンのLispでは'はシンボルで
(QUOTE X) == (' X)
って書いてたな

187:デフォルトの名無しさん
09/02/07 14:53:09
(define (% num1 num2) (remainder num1 num2))
としてるんですが、関数に別名与えるもっと良い方法はありますか?

188:デフォルトの名無しさん
09/02/07 15:21:52
引数の数が一致しているのなら
(define % remainder)

189:デフォルトの名無しさん
09/02/07 17:06:46
それでいいんですね。
気づきませんでした。

ありがとうございます。

190:デフォルトの名無しさん
09/02/07 19:07:14
指定のクロージャが束縛されているシンボルを探す方法ってありますか?

191:デフォルトの名無しさん
09/02/07 20:08:34
処理系によってはあるかもしれないけどRnRSにはないんじゃないかなぁ。
CLにはあるかもしれませんけどSchemerだから知らないです。
シンボルのリストを引数に与えるのであれば
グローバル束縛されているクロージャをevalで取り出してeq?して調べられるけど
グローバル変数のリストはどうやって得ればいいかわかりません。
それにローカル束縛も含めるとなると不可能じゃないでしょうか。

192:デフォルトの名無しさん
09/02/07 20:28:40
CL なら do-symbols で探せるんじゃないかと。

193:デフォルトの名無しさん
09/02/07 22:01:31
Haskellとlispの得意不得意ってどんなところなのでしょうか?

194:デフォルトの名無しさん
09/02/07 22:44:15
別に無いよ?

195:デフォルトの名無しさん
09/02/07 22:53:19
>>193
特にないんじゃないの?
文字列を扱うとめちゃくちゃメモリ食うってのがHaskellの弱点かもしれんけど
今時のマシンだったら何の問題も無いし。



196:デフォルトの名無しさん
09/02/07 22:56:48
Haskellとlispを戦わせたくてしょうがないらしい

197:デフォルトの名無しさん
09/02/07 23:04:03
ムシキングか何かでやってください

198:デフォルトの名無しさん
09/02/07 23:39:04
[Lisp] 攻撃:85 素早さ:94 防御:96 命中:68 運:32 HP:154
[Haskell] 攻撃:68 素早さ:55 防御:65 命中:52 運:31 HP:233

Lisp vs Haskell 戦闘開始!!
[Lisp]の攻撃 HIT [Haskell]は91のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は11のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は109のダメージを受けた。
[Haskell]の攻撃 HIT [Lisp]は0のダメージを受けた。
[Lisp]の攻撃 HIT [Haskell]は76のダメージを受けた。
[Lisp]が[Haskell]を倒しました(ラウンド数:3)。
魔法のMD5 - MD5バトル URLリンク(www.newspace21.com)

199:デフォルトの名無しさん
09/02/07 23:41:50
いちいち貼らなくていいよ

200:デフォルトの名無しさん
09/02/07 23:49:28
>>193
Haskellは近くのコンビニにぬり絵が売ってます。
Lispはドンキホーテに行けばぬいぐるみが売っています。
>>193君はどちらが好きですか?

201:デフォルトの名無しさん
09/02/08 00:02:40
外に出なくても済む方がいいです

202:デフォルトの名無しさん
09/02/08 07:17:52
λ

203:デフォルトの名無しさん
09/02/08 08:13:10
maximaの中に面白いのみっけた

(defun for-eval-then-quote (var)
`(list 'quote ,var))

(setq x 1)
(for-eval-then-quote x)
-> '1


204:デフォルトの名無しさん
09/02/08 12:37:31
>>203
えーと、ほんとにそれを動かしたら'1になったのかい?
正しい結果は(list 'quote 1)になるのでは。
関数とマクロの評価はごっちゃにしないように。
この辺り何か思い違いしてると思うよ。
ちなみに'1を期待するなら関数の中身は`',var または(list 'quote var)

205:デフォルトの名無しさん
09/02/08 13:23:49
>>204
間違えました
(eval (for-eval-then-quote x))
->'1

206:デフォルトの名無しさん
09/02/09 01:08:08
loopマクロ勉強したのにiterateの方が使われてたり
言語の発展はゆるやかだ
とか言ってたのどこのどいつだ

207:デフォルトの名無しさん
09/02/09 01:52:43
>>206
それ言語じゃなくてライブラリの発展だと思うんだが……。

208:デフォルトの名無しさん
09/02/09 02:14:28
>>206
これ読め。
スレリンク(tech板:251番)

209:デフォルトの名無しさん
09/02/10 12:06:52
[clojure] 攻撃:28 素早さ:67 防御:78 命中:87 運:55 HP:202
[Qi II] 攻撃:51 素早さ:21 防御:48 命中:69 運:23 HP:189

clojure vs Qi II 戦闘開始!!
[clojure]の攻撃 HIT [Qi II]は1のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は16のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は56のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は10のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は38のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は25のダメージを受けた。
[Qi II]の攻撃 HIT [clojure]は1のダメージを受けた。
[clojure]の攻撃 HIT [Qi II]は57のダメージを受けた。
[clojure]が[Qi II]を倒しました(ラウンド数:6)。
魔法のMD5 - MD5バトル URLリンク(www.newspace21.com)

210:デフォルトの名無しさん
09/02/10 13:48:31
kill

211:デフォルトの名無しさん
09/02/10 15:30:33
連邦のモビルスーツは化け物か!?

212:デフォルトの名無しさん
09/02/11 05:14:36
array->list 変換関数がみつからない
自分で書くものなの?
(array->list
#2a((1 2)(3 4)))
->((1 2)(3 4))

213:デフォルトの名無しさん
09/02/11 23:55:21
>>自分で書くものなの?
R5RSには記述がないからそうだと思うけど,
それより#2a(...の2aって何?

214:デフォルトの名無しさん
09/02/12 00:02:23
#2A(..)ってのはCommon Lispの二次元配列かな。
ARRAY (2)のリストになってほしいのか、リストのリストになってほしいのか。
まぁ、結論からいうと>>212ARRAY (2 2)はLISTと互換性がないからムリ。自分で書く。
ベクタとかなら (coerce #(1 2 3) 'list) で変換できる。

215:デフォルトの名無しさん
09/02/12 03:21:33
lispに興味があるんですが、
いまからlispを勉強するならなんの書籍がお勧めですか?
SICPってのがお勧めっぽいんですが、MITで使われてるとなると・・・
読みこなせるかなー

216:デフォルトの名無しさん
09/02/12 05:29:30
オンラインで読める無料の
・独習Scheme三週間 URLリンク(www.sampou.org)
・入門Scheme URLリンク(www4.ocn.ne.jp)

書籍じゃないけど
・もうひとつのScheme URLリンク(www.shido.info)
あたりを読んでから買えばいいんじゃないでしょうか。

217:デフォルトの名無しさん
09/02/12 05:46:35
>>215
SICP読んでみて、自分に合いそうなら買うのがいいとおも。
URLリンク(mitpress.mit.edu)

218:デフォルトの名無しさん
09/02/12 10:05:25
SICP日本語版はちょっと高い

219:デフォルトの名無しさん
09/02/12 10:48:56
なんでいきなりSICPなんじゃーー

220:デフォルトの名無しさん
09/02/12 11:11:47
「良い本だ」ってよくScheme関連のWEBに載ってるから。

221:デフォルトの名無しさん
09/02/12 11:20:35
良い本には違いないけど、
SICPも買いたいなら、別の本と併読した方がいいと思う。
言語仕様書が日本語化されているからそれでいいか、
って人ならSICPだけで問題なし。

222:デフォルトの名無しさん
09/02/12 12:06:25
maximaが使いたいだけだったので
on lispはじっくり読んだが
SICPは問題もやらずに流し読み

223:デフォルトの名無しさん
09/02/12 20:13:48
SICP は Scheme の本というわけではない。
Scheme を使って解説してる本。

224:デフォルトの名無しさん
09/02/12 20:19:01
>>223
え、そうなんですか?
自分はアルゴリズムの勉強のために買いました。

序盤の関数 f(x) の話とか、大学の数学が懐かしいです。

225:デフォルトの名無しさん
09/02/12 20:22:09
SICPにアルゴリズムの話が出てないわけではないが、
SICPをやってもアルゴリズムを勉強したとは言えない。


226:デフォルトの名無しさん
09/02/12 20:22:39
>>223
何を解説してるの? w

227:デフォルトの名無しさん
09/02/12 20:28:22
>>226

っ人生

228:デフォルトの名無しさん
09/02/12 20:36:31
>>226
本のタイトル

229:デフォルトの名無しさん
09/02/12 20:44:04
>>226
降り続く雨
きしむ廊下
立ち止まる足音
遠のく意識

230:デフォルトの名無しさん
09/02/13 01:35:07
SICP読んだら魔法使いになれますか?

231:デフォルトの名無しさん
09/02/13 07:26:27
>>230
なれません。

232:デフォルトの名無しさん
09/02/13 07:45:20
>>230
なれます。
就活に有利です。

233:デフォルトの名無しさん
09/02/13 11:01:41
>>230
さあ、30歳になるまで貞操を守る作業に戻るんだ

234:デフォルトの名無しさん
09/02/13 14:39:58
30歳を越えてるのですがSICPは読めますか?

235:デフォルトの名無しさん
09/02/13 14:51:53
読めなかったら困ると思いますよ

236:デフォルトの名無しさん
09/02/13 15:01:35
60歳とかでも読めるらしいですよ
読めなかったら数学勉強してから再挑戦しましょう

237:デフォルトの名無しさん
09/02/13 19:19:40
30歳過ぎてもSICP読むと童貞になりますか?

238:デフォルトの名無しさん
09/02/13 19:34:56
俺はSICPを読んで、背が10cm伸びたよ

239:デフォルトの名無しさん
09/02/13 19:49:08
SICP読んで宝くじ当たったよ。


240:デフォルトの名無しさん
09/02/13 19:50:51
もしかして訳者の和田さんってスーフリの和田さん?

241:デフォルトの名無しさん
09/02/13 19:52:39
プログラマ50人に1人ぐらいはSICP読んでるよね。

242:デフォルトの名無しさん
09/02/13 19:54:25
>>250
和田って俺のことだけど。

243:デフォルトの名無しさん
09/02/13 20:28:13
SICP未読で許されるのは小学生までだよね!

244:デフォルトの名無しさん
09/02/13 22:31:02
ちょっと待ってくれ。「人生に必要な知恵はぜんぶ幼稚園の砂場で学んだ」とあるように、幼稚園のうちに読んでおくべきものではないだろうか?

245:デフォルトの名無しさん
09/02/13 22:34:17
なんてこったい/(^o^)\

246:デフォルトの名無しさん
09/02/13 22:52:02
人生に必要な知恵はぜんぶサンドボックで学んだ。


247:デフォルトの名無しさん
09/02/13 22:55:25
俺、人生に必要な知恵はぜんぶ死後の世界で学ぶんだ…

248:デフォルトの名無しさん
09/02/13 23:02:42
次はアメンボに生まれてきたりして

249:デフォルトの名無しさん
09/02/13 23:07:08
おれも人生に必要なことは幼稚園で一通り学んだ覚えがあるな

250:デフォルトの名無しさん
09/02/13 23:14:11
>>249
ってことは、幼稚園で、チュー済ませたタイプか。

251:デフォルトの名無しさん
09/02/13 23:45:23
登り棒オナニーなら幼稚園の時に覚えました

252:デフォルトの名無しさん
09/02/14 00:48:59
SICP以外誇れるものはないのか

253:デフォルトの名無しさん
09/02/14 00:54:55
essential of なんたらとかreasoned schemerとかもいいかも

254:デフォルトの名無しさん
09/02/14 01:00:19
時代は宝石の名前の言語じゃね?

255:デフォルトの名無しさん
09/02/14 01:05:57
党員の友人とMercuryを学んでいます。

256:デフォルトの名無しさん
09/02/14 01:13:10
Perlのことですね、わかります

257:デフォルトの名無しさん
09/02/14 01:27:06
あのバージョン6がすべった言語のことか

258:デフォルトの名無しさん
09/02/14 01:28:03
>>255
それは金属であって宝石ではない(゚д゚)!

259:デフォルトの名無しさん
09/02/14 01:28:14
真珠の綴りはPerlじゃないぞ・・・

260:デフォルトの名無しさん
09/02/14 01:32:50
まぁなんにせよ変な宗教言語は使いたくないわなw

261:デフォルトの名無しさん
09/02/14 05:43:57
()とか幼稚園じゃ習わなかった

262:デフォルトの名無しさん
09/02/14 09:40:03
幼稚園の時、世の中はすべてnilだと習った。

263:デフォルトの名無しさん
09/02/14 09:44:22
うちの幼稚園ではnil派と()派が闘争を繰り返していた。

264:デフォルトの名無しさん
09/02/14 10:01:49
little schemerって幼稚園児でも理解できるように書かれたんだっけ

265:デフォルトの名無しさん
09/02/14 11:41:33
誰が象のラムダ君役をするかで喧嘩になってみっちゃんが泣いた。

266:デフォルトの名無しさん
09/02/14 11:43:25
ここは幼稚園で人生のすべてが再帰的だと悟ったみなさんが集まるスレですかね。

267:デフォルトの名無しさん
09/02/14 11:45:16
継続渡しスタイルで幼稚園ドロップアウトした。

268:デフォルトの名無しさん
09/02/14 12:36:37
ところで、
チョコはいくつもらえましたか

269:デフォルトの名無しさん
09/02/14 12:38:38
カーチャンから一個、姉さんから一個

270:デフォルトの名無しさん
09/02/14 12:44:26
(´;ω;`)

271:デフォルトの名無しさん
09/02/14 12:46:02
ええい、FOR文でもらえた奴はいないのか!

272:デフォルトの名無しさん
09/02/14 12:50:04
「末尾再帰!」と叫んで保母さんのスカートをめくったのはいい思い出

273:デフォルトの名無しさん
09/02/14 13:14:52
Next Boston Lisp Meeting: Monday February 23th 2009 at 1800 at MIT 34-401B
URLリンク(fare.livejournal.com)

vyzo will talk about gerbil, a little language for distributedprogramming
using PLT-Scheme. Gerbil is a macro language that provides facilities
for actor-based distributed programs and transparent network simulation.

これおもしろそうね。



274:デフォルトの名無しさん
09/02/14 18:38:38
Seasoned Schemer ってどうですか?

275:デフォルトの名無しさん
09/02/14 18:39:22
Let Over the Lambda ってどうですか?

276:デフォルトの名無しさん
09/02/14 22:52:52
海は死にますか?

277:デフォルトの名無しさん
09/02/14 23:11:19
nilもそうですか?

278:デフォルトの名無しさん
09/02/14 23:18:17
水曜どうですか?

279:デフォルトの名無しさん
09/02/15 00:06:17
明日来てくれるかな?

280:デフォルトの名無しさん
09/02/15 00:43:26
このスレのネタの応酬はハイレベル過ぎて

281:デフォルトの名無しさん
09/02/15 00:50:07
終いますか〜?

282:デフォルトの名無しさん
09/02/15 00:58:25
括弧の山を愛する連中の嗜好が平凡なわけがなかった・・・・

283:デフォルトの名無しさん
09/02/15 01:02:23
別に愛してるわけじゃないけど、無いと不安になるというか不安定に感じる。

284:デフォルトの名無しさん
09/02/15 01:44:31
十分平凡でないです!

285:デフォルトの名無しさん
09/02/15 17:10:57
アイちゃんも冗談を言うようになったか。

286:デフォルトの名無しさん
09/02/15 20:27:36
>>274
何が?
俺は好きだよ?

287:デフォルトの名無しさん
09/02/15 23:07:40
hogehoge

288:デフォルトの名無しさん
09/02/15 23:40:17
(hage? >287)

289:デフォルトの名無しさん
09/02/15 23:54:06
一連の1行の糞レスをあぼーんするプログラムを作れ

290:デフォルトの名無しさん
09/02/15 23:59:14
(waha >>288)

291:あぼ〜ん
09/02/16 00:38:22
あぼ〜ん

292:デフォルトの名無しさん
09/02/16 02:11:17
>>289
navi2chちょっといじればいいだけ

293:デフォルトの名無しさん
09/02/18 03:08:12
iPhone/iPod touch用のLisp/Schemeを発見。次スレのテンプレに入れて。

URLリンク(www.turbozen.com)
URLリンク(programming.nu)

294:デフォルトの名無しさん
09/02/18 04:15:12
こういうlist が返ってくるときに
((1 2 3) (1 2 3) (1 2 3))

こういう処理にするにはどうすればできますか?
(map + '(1 2 3) '(1 2 3) '(1 2 3))

295:デフォルトの名無しさん
09/02/18 04:25:47
(apply map (cons + list))

296:デフォルトの名無しさん
09/02/18 04:36:47
>>295
ありがとうございます!

297:デフォルトの名無しさん
09/02/19 10:24:17
>>293
wikiのテンプレに書き加えておいて。

298:デフォルトの名無しさん
09/02/20 00:27:38
(setq list1 '((message "X") (message "Y")))
があったとして、list1 の各要素を順番に実行していく方法を教えてください。


299:デフォルトの名無しさん
09/02/20 00:38:32
(eval (cons 'progn list1))
こういう話?
それともこんなのをお望み?
(mapcar #'(lambda (x) (apply (car x) (cdr x))) list1)

300:デフォルトの名無しさん
09/02/20 00:44:13
(mapcar #'eval '((message "X") (message "Y")))
とかでもいいのか。

301:デフォルトの名無しさん
09/02/20 01:01:05
仮定が分からないな。
messageというのが関数なのか?
(setf *func-hash* (make-hash-table))
(setf (gethash 'message *func-hash*) #'(lambda (x) (princ x)))
(setf list1 '((message "x") (message "y")))
(mapc #'(lambda(x)(funcall (gethash (car x) *func-hash*) (cadr x))) list1)
=> 以下が結果 maximaとかはこの手のことをやってるね。
xy
("x" "y")

302:298
09/02/20 03:13:07
>>299
>(eval (cons 'progn list1))

すごいです。これでできました。
ありがとうございました。

303:デフォルトの名無しさん
09/02/20 05:52:44
Scheme

(let ((list1 '((display "X") (display "Y"))))
 (map eval list1))
⇒XY(#<void> #<void>)

304:デフォルトの名無しさん
09/02/21 01:33:52
(cons 1 '(2 3))
-> (1 2 3)

となりますが

(cons '(1 2) 3)
-> ((1 2) . 3)

になりますよね

今は (append '(1 2) '(3)) と書いてますが
(cons 1 '(2 3)) に比べて冗長だと感じます
もっと良い書き方はありますか?

305:デフォルトの名無しさん
09/02/21 01:51:17
書き方というか、片方向リストの仕様だから

306:デフォルトの名無しさん
09/02/21 03:11:26
(define (wahacons a b) (append a (list b)))
(wahacons '(1 2) 3)

307:デフォルトの名無しさん
09/02/21 05:12:06
>>305
仕様ですか…。
>>306
関数を書いてしまえば良かったんですね
ありがとうございます

308:デフォルトの名無しさん
09/02/21 06:25:59
>>307
quasiquoteは?

> (define x '(1 2))
x
> `(,x 3)
((1 2) 3)

309:デフォルトの名無しさん
09/02/21 06:28:27
肝心な部分コピペし忘れとかどうなのよ、俺……orz

> `(,@x 3)
(1 2 3)

310:デフォルトの名無しさん
09/02/21 23:02:45
Luaスレがschemeネタで盛り上がってるw

311:デフォルトの名無しさん
09/02/22 00:35:49
ちょっと見てくルア

312:デフォルトの名無しさん
09/02/22 01:21:09
見てきたけど、あんまり面白い流れでも無かった。
速いなら実装を参考にしよう、とか建設的な意見が出る訳でもなく、
単にSchemeイラネ、だし。

313:デフォルトの名無しさん
09/02/22 04:20:15
括弧うぜえとか。

314:デフォルトの名無しさん
09/02/22 09:18:44
Schemeは作るの簡単とか。

315:デフォルトの名無しさん
09/02/22 09:36:45
>>312
Luaってのはどういう言語かもよく知らないんだが、
処理系は結構よくできているみたいで遅くはないよ。
URLリンク(shootout.alioth.debian.org)

316:デフォルトの名無しさん
09/02/22 14:35:16
ypsilon軍団とgauche軍団どっちが多い?

317:デフォルトの名無しさん
09/02/22 14:36:35
[gauche] 攻撃:52 素早さ:32 防御:27 命中:74 運:17 HP:258
[Ypsilon] 攻撃:88 素早さ:69 防御:92 命中:95 運:96 HP:144

gauche vs Ypsilon 戦闘開始!!
[Ypsilon]の攻撃 HIT [gauche]は154のダメージを受けた。
[gauche]の攻撃 HIT [Ypsilon]は1のダメージを受けた。
[Ypsilon]の攻撃 HIT [gauche]は173のダメージを受けた。
[Ypsilon]が[gauche]を倒しました(ラウンド数:2)。
魔法のMD5 - MD5バトル URLリンク(www.newspace21.com)




318:デフォルトの名無しさん
09/02/22 14:38:19
何という二番煎じ、お前は車輪の再発明でもしてろ

319:デフォルトの名無しさん
09/02/22 20:43:41
車輪の再発明はハッカーの大好物

320:デフォルトの名無しさん
09/02/22 21:09:19
>>315
遅くないのは知ってるけど、向こうの話題の発端がそういう話だった。

俺の場合、VCSのmonotoneで組み込まれてて知ったんだけど、
かなり評価高い言語だよね。Adobeとかも採用してるとか。

321:デフォルトの名無しさん
09/02/22 21:14:55
Lispが早いとか

322:デフォルトの名無しさん
09/02/22 22:30:29
CLでもSchemeでもいいので話題のHSPみたいに簡単にゲーム作れるソフトはありますか?

323:デフォルトの名無しさん
09/02/22 22:38:44
>>322
CL/scheme はしらんが、どこぞのメーカは
ゲーム開発ベッドで専用 Lisp 使ってなかったっけ?


324:デフォルトの名無しさん
09/02/22 22:56:50
>>322
LispやSchemeをゲーム制作に生かしている企業とかはあるみたいだけど、
誰でも分かり易いライブラリだの、特化した処理系だのはないんじゃない?
一応、SDLとかOpenGLとか使ってゲーム作るのは、大抵の処理系で出来ると思うけど。

というか、HSPが話題っていつの話だ。

325:デフォルトの名無しさん
09/02/22 23:41:31
>>323
これね。
URLリンク(en.wikipedia.org)

326:デフォルトの名無しさん
09/02/23 02:25:21
LuaとかSquirrelは遅かったらC++に書き直せばいいだけだからな

327:デフォルトの名無しさん
09/02/23 02:48:48
Lisp/Schemeも同じことができると思うんだが……。

328:デフォルトの名無しさん
09/02/23 03:01:43
書き直す際に
実装が多いのが弱点ではないかと。


329:デフォルトの名無しさん
09/02/23 03:04:34
Squirrelは書き直すのが楽そうだ

330:デフォルトの名無しさん
09/02/23 06:21:26
StalinならCより速くなることもあるんじゃなかったっけ?


331:デフォルトの名無しさん
09/02/23 09:01:55
Stalinって実際どんな感じ?

332:デフォルトの名無しさん
09/02/23 09:49:25
StalinってCを出力するんでしょ?
Cより速くなる事は無いと思うけど…
Cで「人間が」書くより速くなる事ならあるかもしれないけど

333:デフォルトの名無しさん
09/02/23 10:13:08
stalin ... それは、かつてソ連で大量虐殺をおこなった恐怖の支配者。。。
だから
非人間的な行動(コード)だろ?人間が書くCのコードより速いってことじゃ?

334:デフォルトの名無しさん
09/02/23 12:45:31
Stalinは、人間がかくCコードよりかなり早い場合も多い。
ただし、継続が使えないとか制限が多いし、コンパイル時間がめっちゃかかる。

>>332
> Cより速くなる事は無いと思うけど…
> Cで「人間が」書くより速くなる事ならあるかもしれないけど
こんなこというやつ初めて見た。

335:デフォルトの名無しさん
09/02/23 13:00:30
そうか?理論値と実情を別に語るのは良くあると思うが。

336:デフォルトの名無しさん
09/02/23 14:49:32
だって、人間が書いたものではないCを含めて 「C言語より速い」
を語るなら、それって実質的にCコンパイラの最適化の差に帰着するじゃん。

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

まぁ言い出しておいてアレだけどスレチだな。すまん

337:デフォルトの名無しさん
09/02/23 15:49:25
Stalinの話は定期的にでてくるけど、流れとしては・・・

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

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



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

俺は盛り上がった派だけどw
最適化の解説の論文は勉強になった

339:デフォルトの名無しさん
09/02/23 21:26:10
schemeのマクロを使って 
見た目から括弧を無くしていくことって出来ますか? 
例えば括弧のない1 + 2を3と評価するとか 
for リスト do 処理 done 
みたいな構文がmapの意味で動くようにしてみたい 


340:デフォルトの名無しさん
09/02/23 21:34:29
>>339
まえにどっかでみたことがある。srfiなんとか だったと思う。

341:デフォルトの名無しさん
09/02/24 01:17:57
SRFI 49のI-expressionsは、インデントで構文木を表す表記法であって、
マクロは関係なかった気がするんだけど、違ったっけ?

342:デフォルトの名無しさん
09/02/24 06:02:54
SRFI 49: Indentation-sensitive syntax
URLリンク(srfi.schemers.org)

最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ
URLリンク(lispuser.net)

343:デフォルトの名無しさん
09/02/24 12:45:19
つ Standard Lispの記号モード

344:デフォルトの名無しさん
09/02/24 15:44:53
>>339
「schemeのマクロを使って」も
マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
ただしこの3つをなくするのはRnRSではできない。
処理系によってはリーダマクロをサポートしているのでそれを使うと可。

345:デフォルトの名無しさん
09/02/24 20:11:25
なるほど、やはり出来ないのかー
リーダーマクロ、存在だけは知ってましたが
コンパクトでかっこいいSchemeで出来たらなぁって思いまして

昨日考えてたんですが、
Schemeには演算子の優先順位がないのが原因でしょうね
もし優先順位がつけば、括弧省略出来る
それはそれで、F#やらHaskellやらでみかける
パイプライン演算子みたいなのが定義出来たり、と夢が膨らむが
言葉に表せない大切な物が犠牲になってしまう気がします

>マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
これ非常に興味あるんですが、どういうことでしょうか?

適当に試してはみたんですが、わかりません
(define-syntax plus
(syntax-rules ()
; ((x _ y) (+ x y))))
; ((x (_) y) (+ x y))))
; (((x _ y))(+ x y))))

Gaucheの拡張で優先順位を計算して括弧を省略ってページなら見つけましたが
そういった話でしょうか?


346:デフォルトの名無しさん
09/02/24 20:42:16
こういうことじゃないの
(define-syntax calc
(syntax-rules (+ -)
((_ a + . rest) (+ a (calc . rest)))
((_ a - . rest) (- a (calc . rest)))
((_ a) a)
)
)
> (calc 1 + 10 - 5)
5

347:デフォルトの名無しさん
09/02/24 20:44:04
5かよ

348:デフォルトの名無しさん
09/02/24 20:44:55
> Schemeには演算子の優先順位がないのが原因でしょうね
> >マクロ使用を囲う括弧と、マクロ名さえあれば中置記法もできます。
> これ非常に興味あるんですが、どういうことでしょうか?
そうゆう reader を作ればいいじゃね?
作るだけだったら誰でも作れると思うし…


349:デフォルトの名無しさん
09/02/24 20:45:29
>>345
俺は344じゃないけど、344の言ってることは違う。

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

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



350:デフォルトの名無しさん
09/02/24 20:46:54
× 一番その側
○ 一番外側

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

>>349
なるほど、勉強になります。
「マクロ使用を囲う括弧と、マクロ名さえあれば」
というのは、344氏の例でいけば、
一番外側の()とマクロ名であるcalcっていう意味なわけですね
そして、それより内側であれば、がんばり次第で自由自在だ、と。

352:デフォルトの名無しさん
09/02/24 21:51:26
('A`)y-~

353:デフォルトの名無しさん
09/02/25 02:20:27
そもそも、何で括弧なくしたいんだ?
知的好奇心満たしたいだけなら何も言わんが。

354:デフォルトの名無しさん
09/02/25 07:19:11
Lisp Scheme初心者です。マグロウヒルの「プログラムの構造と実行」をテキストに
Schemeを勉強しようと思っています。
そこで皆様のアドバイスをお願いしたいのですが、どのScheme処理系がお勧めでしょうか?
あまりにもたくさんありすぎて判断できません。
OSはWindows XPです。よろしくお願いします。

355:デフォルトの名無しさん
09/02/25 08:44:21
>>354
windows上で勉強目的なら統合環境のほうが楽だろうしPLT schemeで良いんじゃないかな。
さもないなら、linux上でemacs+gauche(日本語の本があるから)とかでも良いように思うん
だけどね。

356:デフォルトの名無しさん
09/02/25 15:03:43
>>338
stalinがダメなら
記述力と速度を同時に達成できるのって
ocamleぐらい?

357:デフォルトの名無しさん
09/02/25 16:11:06
GCの停止時間がなくて
記述力も同時に達成できるのはC++しかないんだぜ

358:デフォルトの名無しさん
09/02/25 16:19:51
確か2月前半ぐらいに
comp.lang.lisp
でreadable なlisp -> C 変換の話がでてたはずなのに見つからない


359:デフォルトの名無しさん
09/02/25 16:55:36
C++はOOPの振りをした関数型言語だからな

360:デフォルトの名無しさん
09/02/25 17:34:58
>>359
テンプレートで遊ぶ分にはそうだけどな

361:デフォルトの名無しさん
09/02/25 18:16:37
OOPは言語関係ねーす

362:デフォルトの名無しさん
09/02/25 18:20:23
c++でoneceonlyマクロって書けるんだろうか
前にoneconleyできない関係で何度も代入評価されてる
「そんなエラー絶対みつかんないだろう」ってエラーがboost関係で報告されてた

363:デフォルトの名無しさん
09/02/25 19:39:11
>>353
どっちかっていうと実用的な理由
 ・タイプ量を減らしたい
 ・括弧がネストすると、対応が激しくおいづらい

364:デフォルトの名無しさん
09/02/25 19:48:59
emacsを使えばそんなこと屁でもないな
むしろ()がある方がタイプ量が減るし、移動が楽ってぐらいになる
逆にエディタの支援が無いとなるとなるほどそれは確かに致命的だ

365:デフォルトの名無しさん
09/02/25 20:09:55
エディタの機能でどうのこうのっていうのは
言語の話とは別のような・・
俺もemacsは使ってるが

>()があるほうがタイプ量が減る
それはない
letよりlet1のほうが読みやすいし打ちやすい

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

まあ、実際にやってみて、構文を増やす度に複雑化する、
仕様やリーダーマクロのメンテにうんざりしてみれば、
その辺良く分かるとは思うけど。

367:デフォルトの名無しさん
09/02/25 20:34:54
実用ってことはコードを編集することを含むだろう?
ならエディタは関係あるじゃないか

368:デフォルトの名無しさん
09/02/25 20:52:06
emacsの括弧うんぬんはいじる方の腕しだいで楽になる。

369:デフォルトの名無しさん
09/02/25 20:56:54
emacs はこのへんを組み込んでるかどうかでも全然ちがうよ。
1. insert-parentheses を使ってるかどうか
2. show-paren-mode を使ってるかどうか
3. transient-mark-mode を使ってるかどうか

370:デフォルトの名無しさん
09/02/25 20:57:00
>>365
プログラムのコードのタイプ量は減るだろうけど、
編集作業全体のタイプ量は驚きの増加量、って感じになる気がするよ。
S式単位での編集を使わないと、移動に掛かる手間が段違い。

371:デフォルトの名無しさん
09/02/25 21:03:44
emacs userは1匹見ると10匹いると思え

372:デフォルトの名無しさん
09/02/25 21:06:15
>>371
ごきぶりみたいにいうな にがわらひ
370みたいなべてらんもいるけど、C-F C-B C-N C-Pもままならずマウスな初心者も
いるから。
viでもlispモードは普通にあるよ。

373:デフォルトの名無しさん
09/02/25 21:36:25
>>371
むしろ1匹しかいない絶滅危惧種扱いの所が多いよ。

374:デフォルトの名無しさん
09/02/25 22:18:10
google trendsをみても検索数の指数は減ってるけど、多い地域はアカデミックなところが
多いね。日本も亜米利加もね。

375:デフォルトの名無しさん
09/02/25 23:15:14
俺ベテランじゃなくて異端。
viper-modeで、viとEmacs両方のキーバインドを同程度に使う変態。

376:デフォルトの名無しさん
09/02/25 23:19:42
vipperかお?

377:デフォルトの名無しさん
09/02/25 23:22:13
お じゃない。

378:デフォルトの名無しさん
09/02/25 23:27:08
>>375
viper-modeかぁ。15年以上起動したことがない。笑い

379:デフォルトの名無しさん
09/02/25 23:31:02
>>375
   ___l___   /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
   ノ l Jヽ   レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
    ノヌ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    / ヽ、_      /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
   ム ヒ       /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
   月 ヒ      /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
   ノ l ヽヽノ    /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
      ̄ ̄    /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |

380:デフォルトの名無しさん
09/02/25 23:56:13
>>375
viperモードたまに使うけど、完全に終了させる方法教えて下さい。
viper-go-away しても別のファイル開いたらまたviperになってて、
仕方ないからemacs毎再起動してる。

381:デフォルトの名無しさん
09/02/26 02:13:24
>>380
せっかくなので、ソースコードを読んで原因を探ってきました。

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

なので、自分でコードを修正するか、本家にフィードバックするか、
俺のようにVIPER常駐野郎になるか選んでください。

382:デフォルトの名無しさん
09/02/26 04:40:02
と思ったんだけど、追加で調べていったら、
デフォルトのメジャーモードを元に戻さないってバグもあって、
これが本筋っぽい。CVS最新版では修正されてる。
↓を.emacsに追加でひとつ。

(defadvice viper-go-away (after revert-default-major-mode activate)
(setq default-major-mode 'fundamental-mode))

383:デフォルトの名無しさん
09/02/26 08:37:29
maximaの細かいbugが未だに放置なのは
common lispの問題なんだろうか
schemeで書かれてるならbugは少なくなるんだろうか

384:デフォルトの名無しさん
09/02/26 11:34:14
妄想はそのくらいに

385:デフォルトの名無しさん
09/02/26 19:45:52
もともと"Common Lisp"じゃないものをGCLに、そして"Common Lisp"に書き直したからじゃない?
最初から"Common Lisp"で書かれていたら違っていたかも
Maxima使ってないからよくわからないけど

386:デフォルトの名無しさん
09/02/26 23:21:25
質問。この2つに違いってありますか?

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

(define (g x)
(let ((h 10))
(+ x h)))

387:デフォルトの名無しさん
09/02/26 23:29:49
5.2.2 internal definitionsに変らないと書いてある。

> A <body> containing internal definitions can always be converted
> into acompletely equivalent letrec expression.

388:デフォルトの名無しさん
09/02/26 23:45:33
(define (g x)
 (letrec ((h 10))
  (+ x h)))
となら同じ、が正しいのでは?
letとletrecは違う
この例はたまたまコンビネータ式が束縛されているに過ぎない
(正確には式が束縛されているわけではないけど)

389:デフォルトの名無しさん
09/02/26 23:53:51
質問の意図によるだろうけど
最終的な機械語に落とす段階では同じコードになる

390:388
09/02/26 23:57:23
とはいったものの、束縛する式が1つならSchemeレベルではletとletrecは等価ですね

391:デフォルトの名無しさん
09/02/27 00:01:31
>>387
ありがとうございます
自分の知らない、
何か違う意味があるんだろうと思って質問したんですが
letrecと同じ意味なんですね

392:デフォルトの名無しさん
09/02/27 00:01:49
おっちょこちょいですね。

393:デフォルトの名無しさん
09/02/27 00:04:11
>>391
>>386の例ではletで問題ない。

394:デフォルトの名無しさん
09/02/27 00:11:24
>>393
了解です。Schemeってシンプルですね。ありがとうございます

395:デフォルトの名無しさん
09/02/27 00:20:22
>>387
編集ミスった。
acompletely→a completely

否定のa-に見えてしまう すまん

396:デフォルトの名無しさん
09/02/27 10:00:52
さしずめ「うは宇宙のう」

397:デフォルトの名無しさん
09/02/27 21:31:01
>>382
遅くなったけどありがとう。これでviperモードと仲良く暮らせそうです。

398:デフォルトの名無しさん
09/02/28 08:07:26


399:デフォルトの名無しさん
09/02/28 09:35:38
399

400:デフォルトの名無しさん
09/02/28 09:36:03
400

401:デフォルトの名無しさん
09/02/28 18:05:35
shibuya.lisp ストリーミング中!
って今ごろ気付いたorz


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5393日前に更新/92 KB
担当:undef