【发布时间】:2016-11-15 00:19:50
【问题描述】:
我在这里遇到了一个小问题。
假设我有一个列表,例如:
(define x '(("1" "one" "two" "2" "three")
("2" "four" "five" "0" "six")
("3" "seven" "eight" "4" "nine")
("4" "ten" "eleven" "2" "twelve")))
所以我想要做的是获取这些列表中的每一个,并使每个列表中的元素成为单个字符串,例如:
“一一二二三”
“二四五零六”……
我设计了这些功能:
(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: '()
谁能解释我为什么会收到这样的错误?
【问题讨论】:
-
我可以尝试给出一个pythonic的答案。如果有帮助,请联系我。
-
它们各自正常工作,但不能一起工作?请具体说明会发生什么。他们在自己执行时会“做什么”,当您尝试一起执行时会发生什么?
-
我知道它不能直接回答您的问题,但您可以使用内置插件来手动完成大部分操作。例如
(apply string-append '("one " "two " "three ")) ;; "one two three "。创建一个将列表参数化的函数,删除多余的空格(或添加它们,具体取决于您的处理方式),然后创建另一个函数,该函数采用列表列表并将第一个函数映射到它们上。