Lambda 返回函数的Scheme write函数
我在定义一个函数时遇到问题,该函数根据给定的param“flag”返回Scheme中的函数:Lambda 返回函数的Scheme write函数,lambda,scheme,Lambda,Scheme,我在定义一个函数时遇到问题,该函数根据给定的param“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) (la
(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:lambda
我做错了什么?
谢谢 我少了一个括号 正确的语法是:
(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)))))
我少了一个括号 正确的语法是:
(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)))))
不,您添加的括号位置错误
cond
子句的格式为(测试结果…
),因此括号中的第一个表达式应该是您的测试,然后是结果
(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)))
当然,在这种情况下,由于您是针对一组常量测试相同的值,因此可以简化为使用案例
:
(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)))
不,您添加的括号位置错误
cond
子句的格式为(测试结果…
),因此括号中的第一个表达式应该是您的测试,然后是结果
(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)))
当然,在这种情况下,由于您是针对一组常量测试相同的值,因此可以简化为使用案例
:
(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)))
您返回的lambda已经“关闭”了
f
和a
的值。为什么不关闭运算符的值呢。像这样:
(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)))))
您返回的lambda已经“关闭”了f
和a
的值。为什么不关闭运算符的值呢。像这样:
(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)))))
由于括号位置错误,因此无论发生什么情况,函数都将始终返回0。很抱歉更正您的错误,Chris,但函数工作正常。不是真的。我刚刚在Racket中测试了你的函数,括号的位置不正确,结果与我提到的完全一样。因为你的括号位置错误,你的函数无论如何都会返回0。很抱歉纠正你的错误,Chris,但是函数工作正常。不是真的。我刚刚在Racket中测试了你的函数,括号的位置不正确,结果和我提到的一模一样。