Scheme 方案:处理列表中的列表

Scheme 方案:处理列表中的列表,scheme,lisp,racket,Scheme,Lisp,Racket,我第一次使用Scheme(Racket),我遇到了一些问题。我想知道如何在列表中操作列表(特别是打印每个子列表的标题) 我知道如何打印超级列表的标题(它本身就是一个列表) 例如: 现在如果我输入: (concatenate '(("one" "two") ("three" "four") ("five" "six"))) 然后我得到 '("one" "two") 但我想得到的是:“一”“三”“五” 如何执行此操作?您需要使用map将car应用于主列表的每个元素(子列表): (define (

我第一次使用Scheme(Racket),我遇到了一些问题。我想知道如何在列表中操作列表(特别是打印每个子列表的标题)

我知道如何打印超级列表的标题(它本身就是一个列表)

例如:

现在如果我输入:

(concatenate '(("one" "two") ("three" "four") ("five" "six")))
然后我得到

'("one" "two")
但我想得到的是:
“一”“三”“五”


如何执行此操作?

您需要使用
map
car
应用于主列表的每个元素(子列表):

(define (concatenate lst)
  (map car lst))

(concatenate '(("one" "two") ("three" "four") ("five" "six")))
=> '("one" "three" "five")
要在各自的行上打印这些值,请对每个行使用

(for-each displayln (concatenate '(("one" "two") ("three" "four") ("five" "six"))))
=> 
one
three
five
您还可以对每个
使用
映射
,而不是
,但这样您就可以

one
three
five
'(#<void> #<void> #<void>)
1
三
五
'(# # #)

尾随的
”(####)
是对每个值应用
displayln
的结果(
displayln
始终返回空值)。因此,如果您关心结果,请使用
map
,如果您不关心结果,请使用

非常感谢!)好的,我还有一个问题。如果我想向列表中的每个元素添加一个类似“hello”的字符串,该怎么办。我该怎么做?因为字符串附加只对字符串有效,而不对列表有效。
(map(lambda(e)(字符串附加e“hello”))(“Jack”“John”“Paul”)
谢谢!但我要再次查看lambda,考虑到Racket,您也可以
(map(curryr string附加“hello”)(“Jack”“John”“Paul”)
one
three
five
'(#<void> #<void> #<void>)