Scheme - 从参数顺序运行两个过程?

时间:2012-10-05 03:51:46

标签: scheme racket

我正在尝试创建一个函数,它将两个函数作为参数并执行它们。

我尝试使用cond,但它只执行action1

(define seq-action
  (lambda (action1 action2)
    (cond
     ((procedure? action1) (action1))
     ((procedure? action2) (action2)))))

我觉得一个接一个地跑不应该太难。它们不需要同时运行。

我简单地尝试了(action1) (action2),但它只返回action2。以下是我为action1action2定义的内容:

(define ax 
  (lambda ()
    (+ 1 2)))
(define bx 
  (lambda ()
    (+ 5 2)))

3 个答案:

答案 0 :(得分:5)

在另一个之后执行一个过程就像这样简单:

(define seq-action
  (lambda (action1 action2)
    (action1)
    (action2)))

但是,上面只会返回最后一个程序的结果。如果您需要两个结果,则返回包含值的列表,如下所示:

(define seq-action
  (lambda (action1 action2)
    (list (action1) (action2))))

或者,您可以使用values程序同时返回多个值

(define seq-action
  (lambda (action1 action2)
    (values (action1) (action2))))

要在调用最后一个版本后检索这两个值,您需要使用let-values

答案 1 :(得分:1)

Scheme函数将返回它评估的最后一件事。如果您需要两个返回,您可以尝试将它们打包到列表中并返回它。

答案 2 :(得分:0)

如果要在呼叫前检查针对procedure?的参数,可以使用以下解决方案。

(define seq-action
  (lambda (action1 action2)
    (and (procedure? action1) (action1))
    (and (procedure? action2) (action2))))