0

通常の合計を計算するスキーム プログラムを作成するにはどうすればよいですか。スキームでは 2+2 は (+ 2 2) と書かれています。(2 + 2) を可能にするために私が作成しなければならないプログラムはスキームです。

4

2 に答える 2

2

算術式の非常に単純な評価器を求めています。サポートされている唯一の演算子が加算であり、両方のオペランドが数値 (他の加算式ではない) であると仮定すると、次のように簡単になります。

(define (sum-eval exp)
  (match exp
    [(list op1 '+ op2) (+ op1 op2)]
    [_ exp]))

(sum-eval '(1 + 1))
=> 2

物事をもう少し面白くするために、オペランドを再帰的に評価するだけで、ネストされた部分式の評価を可能にすることができます:

(define (sum-eval exp)
  (match exp
    [(list op1 '+ op2) (+ (sum-eval op1) (sum-eval op2))]
    [_ exp]))

(sum-eval '((2 + 3) + (8 + 2)))
=> 15

これで、エバリュエーターにさらに操作を追加できます。

(define (mini-eval exp)
  (match exp
    [(list op1 '* op2) (* (mini-eval op1) (mini-eval op2))]
    [(list op1 '+ op2) (+ (mini-eval op1) (mini-eval op2))]
    [_ exp]))

(mini-eval '((3 * 3) + (5 * 2)))
=> 19

などなど - あなたはアイデアを得ます。読者のための演習: エラー状態の適切な処理。

于 2013-05-22T13:51:06.393 に答える