【问题标题】:Just eval first symbol (CHICKEN Scheme)只评估第一个符号(鸡肉方案)
【发布时间】:2023-12-25 11:41:01
【问题描述】:

如何仅通过第一项评估 s 表达式?

(define (fn x y) (print x) (print y))
(eval '(fn a b))

我试图在更大的表达式上评估类似的东西,但解释器抱怨 ab 变量不存在(未绑定变量 a)。

有什么办法可以让符号保持原样吗?

我一直在尝试查找有关此的信息,但在任何地方都找不到。

【问题讨论】:

  • (fn 'a 'b)? :)
  • 谢谢,但最初我需要符号列表,从那里我将深入评估函数。 Eval 可能是完美的,因为该函数随后也将评估下一个符号作为函数。

标签: scheme eval chicken-scheme


【解决方案1】:

下面的呢?

(let ((expr '(fn a b)))
  (cons (eval (car expr)) (cdr expr)))

但请注意,如果您必须依赖 eval,那么您几乎肯定做错了。

【讨论】:

  • 顺便问一下,如果你在 IRC 上提问,你可能会得到更直接的答复;我们在 Freenode 上的#chicken
  • 谢谢,是的,我的解决方案非常像这样(define (evals x) (apply (eval (car x)) (cdr x)))