所以我有一个列表列表。假设是'('(1 2)'(3 4)),如果我应用汽车,结果将是'(1 2)。我可以使用什么来获得'(1 2)。
(汽车'('('1 2)'(3 4))) ''(1 2)
答案 0 :(得分:2)
'expression
逐字求值为expression
的{{1}}。但是,Racket REPL具有怪异的可视化效果,它实际上并不能打印出结果,而是一个表达式,可以得出相同的结果。因此,即使结果为expression
,REPL也会打印'expression
。评估REPL输出,然后总是再次打印相同的内容。
因此,假设您进行了expression
的操作,您又得到了'(1 2)
并假设'(1 2)
在某种程度上是数据的一部分,并尝试执行'
而不是{{ 1}}。现在,由于'('(1 2) '(3 4))
是'((1 2) (3 4))
的读者糖,您将制作'x
,其中(quote x)
只是符号而不是代码。
如果您真的想要'((quote (1 2)) (quote (3 4)))
,则需要做car,cdr,car或简称为quote
:
(1 2)
如果您不是真的想要多余的列表,而只是数据是cadar
,那么您就可以纠正:
(cadar '((quote (1 2)) (quote (3 4))))
; ==> (1 2) , but racket will print '(1 2)
如果您((1 2) (3 4))
会实际打印正确的结果:(car '((1 2) (3 4)))
; ==> (1 2) , but racket will print '(1 2)
会打印display
而不是(display '(1 2))
。
有一个设置可以消除混乱。在底部的下拉菜单中,您可以选择(1 2)
,在“球拍语言”下,您可以在右侧使用选项,将“输出样式”更改为'(1 2)
。现在,它将打印choose language
而不是用球拍语言计算为write
的表达式。