У меня тут проблема.Список в списке передается как пустой список - 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 четыре пять шесть 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 ""))
Затем отдельные списки в рамках мастер-списки передаются как «(), что приводит к нарушению контракта такого as:
car: contract violation
expected: pair?
given: '()
Может кто-нибудь объяснить, почему я получаю такую ошибку?
Я могу попытаться дать ответ вещий. Пинг меня, если это поможет. –
Они работают правильно сами по себе, но не вместе? Пожалуйста, уточните, что произойдет. Что они «делают», когда выполняются сами по себе, и что происходит, когда вы пытаетесь сделать их вместе? –
Я знаю, что он не отвечает на ваш вопрос напрямую, но вы можете использовать встроенные модули, чтобы делать большую часть того, что вы делаете вручную. например '(применить string-append '(" one "" two "" three ")) ;; «один два три». Создайте одну функцию, которая параметризует список, удаляет лишние пробелы (или добавляет их, в зависимости от того, как вы к ней приближаетесь), а затем создайте другую функцию, которая берет список списков и отображает первую функцию над ними. – pdoherty926