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

Gaʀ*_*ʀʀʏ 4 scheme racket

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

我试过用cond,但它只执行action1.

(define seq-action
  (lambda (action1 action2)
    (cond
     ((procedure? action1) (action1))
     ((procedure? action2) (action2)))))
Run Code Online (Sandbox Code Playgroud)

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

我只是(action1) (action2)并排尝试,但它只会返回action2.这是我定义的action1action2:

(define ax 
  (lambda ()
    (+ 1 2)))
(define bx 
  (lambda ()
    (+ 5 2)))
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 5

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

(define seq-action
  (lambda (action1 action2)
    (action1)
    (action2)))
Run Code Online (Sandbox Code Playgroud)

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

(define seq-action
  (lambda (action1 action2)
    (list (action1) (action2))))
Run Code Online (Sandbox Code Playgroud)

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

(define seq-action
  (lambda (action1 action2)
    (values (action1) (action2))))
Run Code Online (Sandbox Code Playgroud)

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