List Racket中列表内的表达式

List Racket中列表内的表达式,list,racket,List,Racket,如果我有一个这样的列表(定义lst'(,(car'(1 2))(1 2))(,(car'(3 4))(3 4))),我尝试“计算”表达式(即作为结果”((1(1 2))(3(3 4)))),我得到的列表与我得到的列表相同 我知道如果我使用(qoasiquette((,(car'(1 2))(1 2))(,(car'(3 4))(3 4))我会得到我想要的,但问题是在使用迭代方法执行时,(我认为)我不能只获取值,而不作为列表(即只获取qoasiquette表达式的第二部分) 例如,如果我对/lis

如果我有一个这样的列表
(定义lst'(,(car'(1 2))(1 2))(,(car'(3 4))(3 4)))
,我尝试“计算”表达式(即作为结果
”((1(1 2))(3(3 4)))
),我得到的列表与我得到的列表相同

我知道如果我使用
(qoasiquette((,(car'(1 2))(1 2))(,(car'(3 4))(3 4))
我会得到我想要的,但问题是在使用迭代方法执行时,(我认为)我不能只获取值,而不作为列表(即只获取
qoasiquette
表达式的第二部分)

例如,如果我对/list使用
,并且我确实使用
(list ref lst 0)
,当我想要
(,(car'(12))(12))
qoasiquete
函数中使用它时,我会获得
(,(car'(12))(12))

如何获取列表中的表达式并对其求值


谢谢。

我很有信心我们这里有一个新的解决方案,因为您所描述的是非常不寻常的。此外,我在这里设想的唯一解决方案是使用
eval
,这再次表明您可能走错了方向

但这里有一个小尝试,我相信你想要的:

(定义lst'((列表(car'(12))'(12))
(名单(汽车(34))"(34))
(定义名称空间锚nsa)
(定义ns(名称空间锚->名称空间nsa))
(用于/列表((i lst))
(定义e(评估)
(printf“评估~a到~a\n”即e)
(e)
哪个会打印

评估(列表(car’(12))(12))到(1(12))
评估(列表(car’(34))至(34))
评估

((1(12))(3(34)))
因此,当您引用数据时,它就像一些流行的Algol方言(如perl)中的单引号。例如,
打印“$\u”
实际上打印的是$\u1,而不是变量$\u1表示的值。如果您使用双引号,字符串中的变量将扩展为它的值

在Scheme中,我们有
(quote x)
,它是
'x
。由于它是用
'
引用的,所以它中的任何内容都不会被评估。如果它是
`x
,它与
(quasikote x)
相同,那么Scheme会查找
,表达式
(与
(unquote expression)
(与
(unquote expression)相同)和
,@expression
(与
(不引用拼接表达式)
)相同。这些引用形式不是过程,而是宏。它将静态代码转换为不同的静态代码

所以
(开始(定义测试10)`((12)(3,(+测试4));==>((12)(3 14))

方案真正做的是把它转换成
(list'(1 2)(list 3(+test 4))
,而如果它是
((3,(+test 4))(1 2))
,它会变成
(cons)(list 3(+test 4))”((1 2))
,因为尾部可以是常量,但头部不能,如果它需要有一个经过计算的尾部的话


我从你的问题中得到的印象是,你认为你可以存储文本并在以后像
(让((x'((12)(3,(+test 4 )))`x)
那样扩展它们,但这不起作用,因为
准文本
是一个宏,因此它将计算为x。而
(让((x'((12)(3,(+test 4ЮЮ))`),x)
将计算为
((12)(3,(+测试4)))

问题不清楚。请为您打算创建的/list
循环写下
,指出您期望的结果和您目前获得的结果@ÓscarLópez,我希望现在能更好地解释它!我必须说,您在这里写的所有内容都在Racket手册中,我在发布问题之前阅读了它。之后,我有了我真诚地说,你的解释真的很好。比手册要好。你是对的:)。我不能,所以我将把它改成@uselpa答案。谢谢你们两位。如果我更改
列表,你的答案会起作用,它是一样的。但是使用
不起作用,所以,我将把我的代码改成这个。谢谢。