此函数应该得到一个函数(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)
答案 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)
是您想要的结果。
我想,这是一个功课。什么是框架?