Skip to content

Latest commit

 

History

History
27 lines (23 loc) · 1.12 KB

File metadata and controls

27 lines (23 loc) · 1.12 KB
layout page
title About
permalink /about/
#lang racket
(define calc
  (lambda (exp)
    (match exp                                  ;; 匹配表达式的两种情况
           [(? number? x) x]                    ;; 是数字,直接返回
           [`(,op ,e1 ,e2)                      ;; 匹配并且提取出操作符 op 和两个操作数e1, e2
            (let ([v1 (calc e1)]                ;; 递归调用calc自己,得到e1的值
                  [v2 (calc e2)])               ;; 递归调用calc自己,得到e2的值
              (match op                         ;; 分支;处理操作符op的4中情况
                     ['+ (+ v1 v2)]             ;; 如果是+号,输出结果为(+ v1 v2)
                     ['- (- v1 v2)]             ;; 如果是-号,输出结果为(- v1 v2)
                     ['* (* v1 v2)]             ;; 如果是×号,输出结果为(* v1 v2)
                     ['/ (/ v1 v2)]             ;; 如果是/号,输出结果为(/ v1 v2)
                     ))
            ]

           )
    )
  )