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