我正在尝试创建一个函数,它将两个函数作为参数并执行它们。
我尝试使用cond
,但它只执行action1
。
(define seq-action
(lambda (action1 action2)
(cond
((procedure? action1) (action1))
((procedure? action2) (action2)))))
我觉得一个接一个地跑不应该太难。它们不需要同时运行。
我简单地尝试了(action1) (action2)
,但它只返回action2
。以下是我为action1
和action2
定义的内容:
(define ax
(lambda ()
(+ 1 2)))
(define bx
(lambda ()
(+ 5 2)))
答案 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))))