列表中带有引号的球拍(方案)
Racket (Scheme) with quotes inside lists
我对 Racket(方案)和程序有问题 "Eval"。
要在Dr.Racket中检查"eval",我们可以输入解释器,例如
(eval '(+ 5 2))
如果我们使用列表,我们可以有,
(eval '(append '(a) '(b)))
那个returns、
'(a b)
直到这里一切都很好,
但我想做类似的事情:
(define x_list '(append a))
(define y_list '(b c))
(eval (list (car x_list) (cdr x_list) (list (car y_list))))
这显然行不通,因为没有引号
在列表前面,即正在做的是,
(eval '(append (a) (b)))
我的问题是,有什么方法可以把引号放在
使这个工作在列表前面??
(eval (list (car x_list) (cdr x_list) (list (car y_list))))
试试这个:
(eval (list (car x_list) `',(cdr x_list) `',(list (car y_list))))
=> '(a b)
诀窍是使用准引用,查看 documentation 了解更多详情。
我对 Racket(方案)和程序有问题 "Eval"。
要在Dr.Racket中检查"eval",我们可以输入解释器,例如
(eval '(+ 5 2))
如果我们使用列表,我们可以有,
(eval '(append '(a) '(b)))
那个returns、
'(a b)
直到这里一切都很好, 但我想做类似的事情:
(define x_list '(append a))
(define y_list '(b c))
(eval (list (car x_list) (cdr x_list) (list (car y_list))))
这显然行不通,因为没有引号 在列表前面,即正在做的是,
(eval '(append (a) (b)))
我的问题是,有什么方法可以把引号放在 使这个工作在列表前面??
(eval (list (car x_list) (cdr x_list) (list (car y_list))))
试试这个:
(eval (list (car x_list) `',(cdr x_list) `',(list (car y_list))))
=> '(a b)
诀窍是使用准引用,查看 documentation 了解更多详情。