我正在尝试创建一个函数,它将两个函数作为参数并执行它们.
我试过用cond,但它只执行action1.
(define seq-action
(lambda (action1 action2)
(cond
((procedure? action1) (action1))
((procedure? action2) (action2)))))
Run Code Online (Sandbox Code Playgroud)
我觉得一个接一个地跑不应该太难了.它们不需要同时运行.
我只是(action1) (action2)并排尝试,但它只会返回action2.这是我定义的action1和action2:
(define ax
(lambda ()
(+ 1 2)))
(define bx
(lambda ()
(+ 5 2)))
Run Code Online (Sandbox Code Playgroud)
在另一个之后执行一个过程就像这样简单:
(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.