如何从列表列表中获取第一个列表?

时间:2019-03-23 20:42:03

标签: racket

所以我有一个列表列表。假设是'('(1 2)'(3 4)),如果我应用汽车,结果将是'(1 2)。我可以使用什么来获得'(1 2)。

  

(汽车'('('1 2)'(3 4)))   ''(1 2)

1 个答案:

答案 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的表达式。

相关问题