SBCL(目录“*”)根据扩展名过滤掉一些文件名。我如何让它返回所有文件,或者特别是所有匹配模式的文件(如在 bash globing 中)
(directory "*") ; 列出一些文件,而不是全部 (directory " MyFile ") ; 列出一些文件,但同样,按扩展名过滤
在我看来被忽略的扩展名……至少没有列出 *.lisp。
Fedora18 上的 SBCL 1.1.2-1.fc18
(打印x)打印出我想要的eval,但是(eval x)失败,但如果我运行x它就可以了!我错过了什么?
请告诉我为什么这不起作用,或者我做了一些愚蠢的事情.
我正在尝试打印动态大小的表并设置lambda变量,以最终评估表中每个单元格的表达式.
顺便说一句我弄清楚为什么eval失败了.(eval x)正在丢失宏,但是为什么?!
这有效:
(defvar varlist '(a b c d))
(defvar vvars '(c d))
(defvar hvars '(a b))
(macrolet ((AlternateVariable (var &rest body)
`(dolist (,var '(nil t)) ,@body))
(AlternateVariables (varlist &rest body)
(if (null varlist)
(cons 'progn body)
`(AlternateVariable ,(car varlist)
(AlternateVariables ,(cdr varlist) ,@body)))))
(let ((listvarlist (cons 'list varlist)))
(print
`(AlternateVariables ,(reverse vvars)
(AlternateVariables ,(reverse hvars)
(format t "row=~S~%" ,listvarlist) ))))
nil)
Run Code Online (Sandbox Code Playgroud)
它打印出我想要的东西:
(alternatevariables (d c)
(alternatevariables (b a) (format t "row=~S~%" (list a b c …
Run Code Online (Sandbox Code Playgroud) 如何在保持词汇背景的同时再次评估某些内容?
* (defvar form '(+ 1 2))
form
* form
(+ 1 2)
* (eval form) ;; This loses the lexical scope (not an issue here)
3
Run Code Online (Sandbox Code Playgroud)
有关需要词法范围的问题的示例
(let ((a 1) (b 2)
(form '(+ a b)))
(print form)
(print (eval form)) )
(+ a b)
The variable A is unbound.
Run Code Online (Sandbox Code Playgroud)
如何在同一个词法范围内两次评估该表格?
我想要多少次eval(在相同的词法范围内)?
与之前的问题相关 为什么SBCL eval函数会丢失它运行的宏?