第二章 將Scheme用作計算器

2018-02-24 15:45 更新

2.1?簡介

讓我們把Scheme解釋器當作計算器來使用。它比Windows附帶的計算機方便多了。

2.2?將Scheme作為一個計算器

點擊?開始?→?所有程序?→?MIT Scheme?→?Scheme?來啟動Scheme解釋器以及如下圖所示的控制臺。

MIT-Scheme On Windows

首先,讓我們計算1加2的值,在提示符中輸入(+ 1 2)

1 ]=> (+ 1 2)

;Value: 3

1 ]=> 

解釋器返回3作為答案。請注意以下三點:

  1. 一對括號代表了一次計算的步驟。本例中,(+ 1 2)代表步驟1+2。
  2. 左括號后緊跟著一個函數(shù)的名字,然后是參數(shù)。Scheme中大多數(shù)的操作符都是函數(shù)。在本例中,函數(shù)+首先出現(xiàn),然后緊跟兩個參數(shù):12.
  3. 標記的分隔符是空格(Space)、制表符(Tab)或者換行符(Newline)。逗號和分號不是分隔符。

讓我們來詳細地分析計算過程。在這個函數(shù)中,當所有的參數(shù)被求值后,計算開始處理。對參數(shù)的求值順序是沒有被規(guī)范的,也就是說,參數(shù)并不是總是會從左到右求值。

  • 符號+被求值為加法過程。僅在前端輸入+,解釋器會返回:[arity-dispatched-procedure 1]?這表明+是代表“過程1”的一個符號
  • 1求值得到1。通常來說,對布爾值,數(shù)字,字符以及字符串求值的結(jié)果就是它們本身。另一方面,對符號求值的結(jié)果可能是一些它的東西。
  • 2求值得到2。
  • 最后,對(+ 1 2)求值得到3并跳出括號。在Scheme中,求得的值會跳出括號外,并且這個值(表達式的最終值)會被打印到前端。

函數(shù)+可以接受任意多的參數(shù)。

(+)       ;→ 0
(+ 1)     ;→ 1
(+ 1 2)   ;→ 3
(+ 1 2 3) ;→ 6

2.3?四種基本算術操作

Scheme(以及大多數(shù)Lisp方言)都可以處理分數(shù)。

函數(shù)exact->inexact?用于把分數(shù)轉(zhuǎn)換為浮點數(shù)。Scheme也可以處理復數(shù)。復數(shù)是形如a+bi的數(shù),此處a稱為實部,b稱為虛部。+、-、*/分別代表加、減、乘、除。這些函數(shù)都接受任意多的參數(shù)。

例:

(- 10 3)    ;→ 7
(- 10 3 5)  ;→ 2
(* 2 3)     ;→ 6
(* 2 3 4)   ;→ 24
(/ 29 3)    ;→ 29/3
(/ 29 3 7)  ;→ 29/21
(/ 9 6)     ;→ 3/2
(exact->inexact (/ 29 3 7)) ;→ 1.380952380952381

括號可以像下面這樣嵌套:

(* (+ 2 3) (- 5 3)) ;→ 10
(/ (+ 9 1) (+ 2 3)) ;→ 2

形如這些由括號標記(token)以及分隔符組成的式子,被稱為S-表達式。

練習 1

使用Scheme解釋器計算下列式子:

  1. (1+39) * (53-45)
  2. (1020 / 39) + (45 * 2)
  3. 求和:39, 48, 72, 23, 91
  4. 求平均值:39, 48, 72, 23, 91(結(jié)果取為浮點數(shù))

2.4?其它算術操作

2.4.1?quotient,remainder,modulo和sqrt

  • 函數(shù)quotient用于求商數(shù)(quotient)。
  • 函數(shù)remaindermodulo用于求余數(shù)(remainder)。
  • 函數(shù)sqrt用于求參數(shù)的平方根(square root)。
(quotient 7 3) ;→ 2
(modulo 7 3)   ;→ 1
(sqrt 8)       ;→ 2.8284271247461903

2.4.2?三角函數(shù)

數(shù)學上的三角函數(shù),諸如sin,cos,tan,asin,acosatan都可以在Scheme中使用。atan接受1個或2個參數(shù)。如果期望atan的結(jié)果是1/2 π,就使用第二個參數(shù)指明使用弧度制。

(atan 1)   ;→ 0.7853981633974483
(atan 1 0) ;→ 1.5707963267948966

2.4.3?指數(shù)和對數(shù)

指數(shù)通過exp函數(shù)運算,對數(shù)通過log函數(shù)運算。ab次冪可以通過(expt a b)來計算。

練習2

使用Scheme解釋器求解下列式子:

  1. 圓周率π。
  2. exp(2/3)。
  3. 3的4次冪。
  4. 1000的對數(shù)

2.5?小結(jié)

本章中,我們已經(jīng)將Scheme解釋器當作計算器來使用。這會讓你快速上手Scheme。我會在下個章節(jié)講解Scheme的數(shù)據(jù)類型‘表’。

2.6?習題解答

2.6.1?答案1

;1
(* (+ 1 39) (- 53 45))              ;?    320

;2
(+ (/ 1020 39) (* 45 2))            ;?    1510/13

;3
(+ 39 48 72 23 91)                  ;?    273

;4
(exact->inexact (/ (+ 39 48 72 23 91) 5))   ;?    54.6

2.6.2?答案2

;1
(* 4 (atan 1.0))          ;?   3.141592653589793

;2
(exp 2/3)                 ;?   1.9477340410546757

;3
(expt 3 4)                ;?   81

;4
(log 1000)                ;?   6.907755278982137
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號