5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Lisp Scheme Part36

1 :デフォルトの名無しさん:2013/03/13(水) 19:50:42.79
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part35
ttp://toro.2ch.net/test/read.cgi/tech/1348018916/

■テンプレ
ttp://wiki.fdiary.net/lisp/

■関連スレ
【入門】Common Lisp その10【質問よろず】
ttp://toro.2ch.net/test/read.cgi/tech/1361341876/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
ttp://toro.2ch.net/test/read.cgi/tech/1272469779/
【Lisp】プログラミング言語 Clojure #2【JVM】
ttp://toro.2ch.net/test/read.cgi/tech/1318498898/
【魔法】リリカル☆Lisp【言語】
ttp://toro.2ch.net/test/read.cgi/tech/1183396621/

882 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
何故かプログラムがフリーズしはじめ、原因を探し出すことn時間、
マクロの裏を覗きつつ、要約特定出来ました。
以下を実行するとsbcl、clisp共にフリーズします。
うまくクロージャが作れていないのはなぜなのでしょうか?
defparameterの行を消せばうまく動きます。

(defparameter *cont* #'1+)

(defun test (*cont* x)
(let ((*cont* (lambda (x) (funcall *cont* (* 2 x)))))
(funcall *cont* x)))

(test *cont* 5)

883 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
CLHS: Macro DEFPARAMETER, DEFVAR
www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/mac_defparametercm_defvar.html
を読んだら分かりました。

(defparameter *cont* #'1+)

(defun test (*cont* x)
(print *cont*)
(let ((*cont* (lambda (x) (funcall *cont* (progn (sleep 1) (* 2 (print x)))))))
(funcall *cont* x)))

(test *cont* 5)

特別扱いされて、スコープがダイナミックになるんですね。
(test *cont* 5)はマクロ展開後に現れるので、
defparameterがダメとなるとletで囲むなりしないと警告を消せないなぁ。

226 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)