相关疑难解决方法(0)

为什么eval邪恶呢?

我知道Lisp和Scheme程序员通常会说eval除非必要,否则应该避免.我已经看到了几种编程语言的相同建议,但我还没有看到一个反对使用的明确论据列表eval.我在哪里可以找到使用中潜在问题的说明eval

例如,我知道GOTO程序编程中的问题(使程序难以理解且难以维护,难以找到安全问题等),但我从未见过反对的论点eval.

有趣的GOTO是,相反的论点应该对延续有效,但我看到Schemers,例如,不会说延续是"邪恶的" - 你在使用时应该小心.他们更倾向于使用代码而eval不是代码使用continuation(据我所知 - 我可能是错的).

lisp scheme eval clojure common-lisp

141
推荐指数
8
解决办法
1万
查看次数

如何检查列表是否只包含#t

我在球拍和麻省理工学院计划中尝试使用以下代码,让我惊讶的是编译器错误

(foldr and #t '(#t #t #f))
Run Code Online (Sandbox Code Playgroud)

有没有办法使用reduce/fold方式来检查列表是否只包含true或false?我知道lambda可以完成这项工作,但它确实让我们想知道为什么这不是一个有效的代码.我记得我可以在Haskell中做到.....

TIA.

scheme racket

7
推荐指数
2
解决办法
3906
查看次数

如何将列表传递给常见的lisp中的宏?

我正在尝试将列表传递给宏,例如:

(defmacro print-lst (lst)
  `(progn
     ,@(mapcar #'(lambda (x) `(print ,x)) lst)))
(let ((lst '(1 2 3)))
      (print-lst lst))
Run Code Online (Sandbox Code Playgroud)

它发现错误:"LST值不是LST类型".

所以,我的问题是,这段代码有什么问题以及如何将列表传递给宏?

common-lisp

1
推荐指数
1
解决办法
1985
查看次数

标签 统计

common-lisp ×2

scheme ×2

clojure ×1

eval ×1

lisp ×1

racket ×1