我无法定义一个函数,根据给定的参数“flag”,它返回Scheme中的函数:
(define con-func
(lambda(f a flag)
(cond (= flag 0) (lambda (x) (f (+ x a)))
(= flag 1) (lambda (x) (f (- x a)))
(= flag 2) (lambda (x) (f (* x a)))
(= flag 3) (lambda (x) (f (/ x a)))
(else (lambda (x) f x)))))
我收到错误消息:lambda: bad syntax in: lambda <br />
我究竟做错了什么?
谢谢!
答案 0 :(得分:4)
不,您添加的括号位于错误的位置。 cond
子句的格式为(test result ...)
,因此括号中的第一个表达式应该是您的测试,然后是结果。
(define (con-func f a flag)
(cond ((= flag 0) (lambda (x) (f (+ x a))))
((= flag 1) (lambda (x) (f (- x a))))
((= flag 2) (lambda (x) (f (* x a))))
((= flag 3) (lambda (x) (f (/ x a))))
(else f)))
当然,在这种情况下,由于您针对一堆常量测试了相同的值,因此您可以简化为使用case
:
(define (con-func f a flag)
(case flag
((0) (lambda (x) (f (+ x a))))
((1) (lambda (x) (f (- x a))))
((2) (lambda (x) (f (* x a))))
((3) (lambda (x) (f (/ x a))))
(else f)))
答案 1 :(得分:0)
您要返回的lambda已经“关闭”f
和a
的值。为什么不关闭operator
的值。像这样:
(define (con-func f a flag)
(let ((operator
(case flag
((0) +)
((1) -)
((2) *)
((3) /)
(else (lambda (a b) a)))))
(lambda (x) (f (operator x a)))))
答案 2 :(得分:-1)
我错过了一个括号..
正确的语法是:
(define con-func
(lambda(f a flag)
(cond (= flag 0) ((lambda (x) (f (+ x a))))
(= flag 1) ((lambda (x) (f (- x a))))
(= flag 2) ((lambda (x) (f (* x a))))
(= flag 3) ((lambda (x) (f (/ x a))))
(else (lambda (x) f x)))))