vectra 发表于 2013-7-9 10:10:25

lambda 函数中的全局变量有没有办法消除,顺便帮忙完善下这个推测最佳纸张的函数

本帖最后由 vectra 于 2013-7-9 10:17 编辑


(defun ace-fit-paper (width height /)
(mapcar
    (function (lambda (x) (list (/ width (car x)) (/ height (cadr x)))))
    '((297 210) (420 297) (594 420) (841 594) (1189 841))
)
)
在LISP编辑器中通过“检查代码”功能发现HEIGHT WIDTH 被视作全局变量,请教高手,这种编辑习惯是不是不好,有没有办法消除这两个全局变量


函数的目的是根据width height值和推测最适合用什么纸张来打印,返回字符串“A4”~“A0”之一

cre8or 发表于 2013-7-9 10:20:49

本帖最后由 cre8or 于 2013-7-9 10:31 编辑

不知道有没有误会你的意思 你遇上的应该不是全局变量 只是lambda的闭包问题 早期lisp的通病 我的办法是用(eval(read(strcat"(defun foo(x).." width "...." height "..)")))(mapcar foo '(...))代替

Gu_xl 发表于 2013-7-9 11:27:09

不要完全相信LISP编辑器中通过“检查代码”功能,它经常误报!函数的参数不是全局变量!
页: [1]
查看完整版本: lambda 函数中的全局变量有没有办法消除,顺便帮忙完善下这个推测最佳纸张的函数