Что я хотел бы сделать, это создать функцию, которая принимает список значений и список символов и объединяет соответствующие символы («атомы», я думаю, они технически быть вызванными) в новый список.Использование схемы/racket для возврата определенных элементов из списка
Вот что я до сих пор;
#lang racket
(define (find num char)
(if (= num 1)
(car char) ;Problem here perhaps?
(find (- num 1) (cdr char))))
(define (test num char)
(if (null? num)
'("Done")
(list (find (car num) (test (cdr num) char)))))
Это, однако, дает мне ошибку, которая по большей части я понимаю, что он говорит, но я не понимаю, что это неправильно, чтобы создать эту ошибку. Учитывая следующий простой ввод теста, это то, что я получаю
> (test '(2 1) '(a b c))
car: contract violation
expected: pair?
given: '()
По существу, на выходе должен быть '(b a)
вместо ошибки очевидно.
Небольшая помощь и руководство для пользователя новой схемы оценили бы!
EDIT:
Вот код, который я смог бежать.
#lang racket
(define (find num char)
(cond ((empty? char) #f)
((= num 1) (car char))
(else (find (- num 1) (cdr char)))))
(define (project num char)
(if (empty? num)
'()
(cons (find (car num) char) (project (cdr num) char))))
После редактирования «проект» он почти прав! просто базовый случай ошибочен: правильное значение для возврата - ''() ', а не' (list '()) ' –
да, простите, я понял, что сделал это, вероятно, за несколько секунд до того, как вы прокомментировали. Это изменилось. –