相关疑难解决方法(0)

为什么eval邪恶呢?

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

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

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

lisp scheme eval clojure common-lisp

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

对于使用一流函数无法做到的Lisp宏,你能做些什么?

我想我理解Lisp宏及其在编译阶段的作用.

但是在Python中,您可以将函数传递给另一个函数

def f(filename, g):
  try:                                
     fh = open(filename, "rb") 
     g(fh)
  finally:
     close(fh) 
Run Code Online (Sandbox Code Playgroud)

所以,我们在这里得到懒惰的评价.我可以用宏做什么而不用函数作为第一类对象?

lisp python macros

28
推荐指数
4
解决办法
5842
查看次数

lisp:何时使用函数与宏

在我不断学习 lisp 的过程中,我遇到了一个概念问题。这有点类似于这里的问题,但也许在主题上适合说我的问题是一个抽象级别。

通常,什么时候应该创建宏而不是函数?在我看来,也许天真地,很少有情况需要创建宏而不是函数,并且在大多数剩余情况下,函数通常就足够了。在这些其余情况中,宏的主要附加价值似乎是语法的清晰度。如果是这样的话,那么对于个体程序员来说,似乎不仅是选择使用宏的决定,而且其结构的设计也可能从根本上是特殊的。

这是错误的吗?是否有一般情况概述何时使用宏而不是函数?我说的对吗,语言需要宏的情况通常很少?最后,是否存在宏所期望的通用语法形式,或者它们通常被程序员用作简写?

lisp macros common-lisp

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

标签 统计

lisp ×3

common-lisp ×2

macros ×2

clojure ×1

eval ×1

python ×1

scheme ×1