4

2 つの関数を引数として取り、両方を実行する関数を作成しようとしています。

を使ってみ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)))
4

3 に答える 3

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

于 2012-10-05T04:00:30.207 に答える
1

Scheme 関数は、最後に評価したものを返します。両方のリターンが必要な場合は、それらをリストにまとめて返すことができます。

于 2012-10-05T03:56:14.510 に答える
0

procedure?呼び出す前に引数をチェックしたい場合は、次の解決策を使用できます。

(define seq-action
  (lambda (action1 action2)
    (and (procedure? action1) (action1))
    (and (procedure? action2) (action2))))
于 2012-10-05T08:17:32.743 に答える