scheme中的正则加法或乘法运算符

scheme中的正则加法或乘法运算符,scheme,racket,Scheme,Racket,如何编写一个生成正则和的scheme程序。在方案2中,2+2被写入(+2)。我要做的程序应该是使(2+2)成为可能的方案 您需要一个非常简单的算术表达式计算器。假设支持的唯一运算符是加法,并且两个操作数都是数字(而不是其他加法表达式),则简单如下: (define (sum-eval exp) (match exp [(list op1 '+ op2) (+ op1 op2)] [_ exp])) (sum-eval '(1 + 1)) => 2 为了让事情变得更有

如何编写一个生成正则和的scheme程序。在方案2中,2+2被写入(+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

等等,等等,你明白了。读者练习:优雅地处理错误条件。

假设要将Scheme的前缀符号转换为中缀符号:

(define (prefix->infix form)
  (cond ((number? form) form)
        ((list?   form)
         (assert (= 3 (length form)))
         (let ((operator (list-ref form 0))
               (operand1 (prefix->infix (list-ref form 1)))
               (operand2 (prefix->infix (list-ref form 2))))
           (list operand1 operator operand2)))
        (else 'error)))
似乎有效:

> (prefix->infix '(+ 2 2))
(2 + 2)
> (prefix->infix '(+ (- 3 2) (* 5 6)))
((3 - 2) + (5 * 6))

你的问题几乎完全没有细节。你能更准确地描述一下你想做什么吗?确切地说是我想要的,还有更多。我不认为我对了解这个计划的人来说听起来那么不清楚。如果我能在课程中拿到a之前几个小时拿到这个就好了。你是如何奖励积分的?我对这方面还不太熟悉。虽然很接近,但不是真的。谢谢