我想做的是创建一个函数,该函数接受一个值列表和一个字符列表,并将相应的字符(我认为从技术上讲它们会被称为“原子”)合并到一个新列表中。
这是我到目前为止所拥有的;
#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)
错误而不是错误。
对新方案用户的一点帮助和指导将不胜感激!
编辑:
这是我能够运行的代码。
#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))))