0

我无法定义一个函数,根据给定的参数“标志”,在 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 /> 我做错了什么?谢谢!

4

3 回答 3

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)))

当然,在这种情况下,由于您要针对一堆常量测试相同的值,您可以简化为使用 a 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)))
于 2013-03-22T12:12:54.787 回答
0

您返回的 lambda 已经“关闭”了fand的值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)))))
于 2013-03-22T12:35:27.997 回答
-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)))))
于 2013-03-22T08:33:12.487 回答