2014-12-03 4 views
0

Для справки Я программирую Scheme с использованием DrRacket.Scheme - ожидает непустой список

Когда я запускаю программу, я получаю следующее сообщение об ошибке:

check-expect encountered the following error instead of the expected value, 
(list false true true true). 
    :: first: expects a non-empty list; given: string? 

Я не уверен, что проблема, как кажется, код должен работать нормально.

;; Signature: mymap: (x -> y) listofX -> listofY 
;; Purpose: Consumes a function from X –> Y, and a list of X; returns a list of Y; 
;;   by applying the function to each item in the list of X. 

(define (mymap g alist) 
    (cond 
    [(empty? alist) empty] 
    [else 
    (cons (g (first alist)) 
      (mymap (rest alist) g))] 
    ) 
) 

;; define 2 other functions using mymap and write 
;; one check-expect for each of these functions 

(check-expect (mymap string? (list 1 "ab" "abc" "")) (list false true true true)) 
(check-expect (mymap sqr (list 1 0 -3 4 -5)) (list 1 0 9 16 25)) 

(define (C2F c) 
    (+ (* 9/5 c) 32)) 

(define (cf* alist) 
    (mymap alist C2F)) 

(check-expect (mymap C2F (list 100 0 -40)) (list 212 32 -40)) 

Заранее благодарю вас!

ответ

3

Вы перевернутый параметры в вашем рекурсивный вызов mymap, использование:

 (mymap g (rest alist)))] 

вместо

 (mymap (rest alist) g))] 
+1

@ BBladem83: также, как только вы понимаете реальную проблему, вернуться назад и перечитывать сообщение об ошибке снова. Посмотрите, понимаете ли вы, что сообщение об ошибке пыталось сказать. Это поможет в будущем, потому что вы, конечно же, время от времени будете повторять подобные ошибки. Я знаю, что знаю. : P Если вы работаете в DrRacket, нажатие на сообщение об ошибке должно привести ваш курсор к строке нарушения. – dyoo

Смежные вопросы