列表中的列表作为空列表传递 - 球拍
A list within a list is being passed as an empty list - Racket
我遇到了一个小问题。
假设我有一个列表列表,例如:
(define x '(("1" "one" "two" "2" "three")
("2" "four" "five" "0" "six")
("3" "seven" "eight" "4" "nine")
("4" "ten" "eleven" "2" "twelve")))
所以我想做的是获取每个列表,并使每个列表中的元素成为一个字符串,例如:
“1一二2三”
"2 四五 0 六" ...
我设计了这些功能:
(define (get-sublista-from-lista lista)
(if (list? (car lista))
(car lista)
lista))
和:
(define (string-from-lista lista)
(define (list-to-string lista str)
(if (null? (cdr lista))
(string-append str (car lista))
(list-to-string (cdr lista)
(string-append str (car lista) " "))))
(list-to-string lista ""))
它们自己可以正常工作。但是每当我尝试将其中两个或其中一个与另一个组合时,例如:
(define (string-from-lista1 lista)
(define (list-to-string lista str)
(if (null? (get-sublista-from-lista lista))
(string-append str (car (get-sublista-from-lista lista)))
(list-to-string (cdr (get-sublista-from-lista lista))
(string-append str (car (get-sublista-from-lista lista)) ""))))
(list-to-string lista ""))
然后主列表中的各个列表作为 '() 传递,导致违反合同,例如:
car: contract violation
expected: pair?
given: '()
有人可以解释为什么我会收到这样的错误吗?
内置函数 string-join
用于将列表中的不同字符串连接成一个字符串,由默认字符 space 分隔。使用 map
将它应用于列表 x 的所有成员,您将有一个简短的代码来完成此任务:
(map string-join x)
输出:
'("1 one two 2 three" "2 four five 0 six" "3 seven eight 4 nine" "4 ten eleven 2 twelve")
我遇到了一个小问题。
假设我有一个列表列表,例如:
(define x '(("1" "one" "two" "2" "three")
("2" "four" "five" "0" "six")
("3" "seven" "eight" "4" "nine")
("4" "ten" "eleven" "2" "twelve")))
所以我想做的是获取每个列表,并使每个列表中的元素成为一个字符串,例如:
“1一二2三”
"2 四五 0 六" ...
我设计了这些功能:
(define (get-sublista-from-lista lista)
(if (list? (car lista))
(car lista)
lista))
和:
(define (string-from-lista lista)
(define (list-to-string lista str)
(if (null? (cdr lista))
(string-append str (car lista))
(list-to-string (cdr lista)
(string-append str (car lista) " "))))
(list-to-string lista ""))
它们自己可以正常工作。但是每当我尝试将其中两个或其中一个与另一个组合时,例如:
(define (string-from-lista1 lista)
(define (list-to-string lista str)
(if (null? (get-sublista-from-lista lista))
(string-append str (car (get-sublista-from-lista lista)))
(list-to-string (cdr (get-sublista-from-lista lista))
(string-append str (car (get-sublista-from-lista lista)) ""))))
(list-to-string lista ""))
然后主列表中的各个列表作为 '() 传递,导致违反合同,例如:
car: contract violation
expected: pair?
given: '()
有人可以解释为什么我会收到这样的错误吗?
内置函数 string-join
用于将列表中的不同字符串连接成一个字符串,由默认字符 space 分隔。使用 map
将它应用于列表 x 的所有成员,您将有一个简短的代码来完成此任务:
(map string-join x)
输出:
'("1 one two 2 three" "2 four five 0 six" "3 seven eight 4 nine" "4 ten eleven 2 twelve")