方案:处理列表中的列表

时间:2014-04-20 21:14:27

标签: scheme lisp racket

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

我知道如何打印超级列表的头部(这是一个列表本身)

例如:

 (define (concatenate list-a)
   (car list-a)) 

现在如果我输入:

(concatenate '(("one" "two") ("three" "four") ("five" "six")))

然后我得到

'("one" "two")

但我想得到的是:"one" "three" "five"

我该怎么做?

1 个答案:

答案 0 :(得分:2)

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

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

(concatenate '(("one" "two") ("three" "four") ("five" "six")))
=> '("one" "three" "five")

要在各自的行中打印这些值,请使用for-each

(for-each displayln (concatenate '(("one" "two") ("three" "four") ("five" "six"))))
=> 
one
three
five

你也可以使用map代替for-each,但是你得到了

one
three
five
'(#<void> #<void> #<void>)

结尾'(#<void> #<void> #<void>)是将displayln应用于每个值的结果(displayln始终返回 void )。因此,如果您关心结果,请使用map,如果您没有,请使用for-each