功能:未定义;在定义之前不能引用标识符

时间:2018-02-07 14:10:34

标签: scheme racket

此函数应该得到一个函数(x + 2)和一个整数,并返回一个列表,其中包含l0,ln,l1,ln-1,l2,ln-2 ......... l( n / 2),l(n / 2)+1,我怎么能把它弄好?

问题是什么?

#lang racket

(define Func (lambda(F n)
 (Merge (FuncL F 0 (quotient n 2)) (FuncR F n (+(quotient n 2) 1)))))

(define FuncL (lambda(F n k)
 (if (= n k)
  (list (F n))
  (cons (F n) (FuncL F (+ n 1) k)))))

(define FuncR (lambda(F n k)
  (if (= n k)
  (list F n)
  (cons (F n) (FuncR F (- n 1) k)))))

 (define Merge (lambda(L1 L2)
            (if (null? L1)
               (list)
               (cons (car L1) (cons (car L2) (Merge (cdr L1) (cdr L2)))))))


(define L (Func (lambda (x) (+ x 2)) 5))
(display L)

1 个答案:

答案 0 :(得分:0)

(define FuncR (lambda(F n k)
  (if (= n k)
  (list (F n)) ;; (list F n) here you miss a pair of parenthesis 
  (cons (F n) (FuncR F (- n 1) k)))))

你错了,你没有单独测试你的程序。

(define Foo (lambda (x) (+ x 2)))
(FuncR Foo 5 0)) 
--->
(7 6 5 4 3 #[compound-procedure 18 foo] 0) 

所以这个错误很容易被发现。 我想

(Func (lambda (x) (+ x 2)) 5) --> (2 7 3 6 4 5)

是您想要的结果。

我想,这是一个功课。什么是框架?