譯 Scheme簡明教程6 條件語句

2021-08-30 08:08:21 字數 3564 閱讀 6769

和其它的程式設計語句一樣,scheme 也包含條件語句。最基本的結構就是if

如果測試條件運算的結果是真(即,非#f的任何其它值),」then」分支將會被執行(即滿足條件時的執行分支)。否則,」else」分支會被執行。」else」分支是可選的。

=>

=>

為了方便,scheme還提供了一些其它的條件結構語句。它們可以被定義成巨集來擴充if表示式。

4.1whenunless

當我們只需要乙個基本條件語句分支時(」then」分支或」else」分支),使用whenunless會更方便。(這裡的示例已經更換,原示例

)(definea10

)(defineb20

)(when(< a b)

(display

「a是」)(

displaya)

(display

「b是」)(

displayb)

(display

「a大於b」

) )先判斷a是否小於b,這個條件成立時會輸出5條資訊。

使用if實現相同的程式會是這樣:

(definea10

)(defineb20

)(if(< a b)

(begin

(display

「a是」)(

displaya)

(display

「b是」)(

displayb)

(display

「a大於b」

) ))

注意when的分支是乙個隱式的begin語句結構,而如果if的分支有多個**結構時,需要乙個顯式的begin**結構。

同樣的功能還可以像下面這樣用unless來寫(unlesswhen的意思正好相反):

(definea10

)(defineb20

)(unless(>= a b)

(display

「a是」)(

displaya)

(display

「b是」)(

displayb)

(display

「a大於b」

) )並不是所有的scheme環境都提供whenunless。如果你的scheme中沒有,你可以用巨集來自定義出whenunless(巨集,見第8章)。

4.2cond

cond結構在表示多重if表示式時很方便,多重if結構除了最後乙個else分支以外的其餘分支都會包含乙個新的if條件。因此,

這樣的結構都可以使用cond來這樣寫:

cond就是這樣的一種多分支條件結構。每個從句都包含乙個判斷條件和乙個相關的操作。第乙個判斷成立的從句將會引發它相關的操作執行。如果任何乙個分支的條件判斷都不成立則最後乙個else分支將會執行(else分支語句是可選的)。

cond的分支操作都是begins結構。

4.3case

cond結構的每個測試條件是乙個測試條件的分支條件時,可以縮減為乙個case表示式。

(define

c#\c

)

=>

分支頭值是#\c

的分支將被執行。

4.4andor

scheme提供了對boolean值進行邏輯與(」and」)和邏輯或(」or」)運算的結構。(我們已經見過了布林型別的求反運算not

過程。)

當所有子結構的值都是真時,and的返回值是真,實際上,and的執行結果是最後乙個子結構的值。如果任何乙個子結構的值都是假,則返回#f

or會返回它第乙個為值為真的子結構的結果。如果所有的子結構的值都為假,or則返回#f。

andor都是從左向右運算。當某個子結構可以決定最終結果時,andor會忽略剩餘的子結構。

=>

=>

譯 Scheme簡明教程8 遞迴

乙個過程體中可以包含對其它過程的呼叫,特別的是也可以呼叫自己。definefactorial lambda n if n0 1 n factorial n1 這個遞迴過程用來計算乙個數的階乘。如果這個數是0,則結果為1。對於任何其它的值n,這個過程會呼叫其自身來完成n 1階乘的計算,然後將這個子結果...

Visual Unit 簡明教程

visual unit,簡稱vu,是新一代單元測試工具,功能強大,使用簡單,完全視覺化,不需編寫測試 vu的測試結果使程式行為一目了然,有助於整理程式設計思路,提高程式設計效率和正確性,並能快速排錯 vu還增強偵錯程式功能 如自由後退 用例切換 提高除錯的效率 vu能達到空前的測試完整性,輕鬆完成語...

MYSQL簡明教程

dos進入mysql命令 c mysql h 127.0.0.1 u root p enter password mysql 進入完成 建立資料庫 create database databasename 使用指定資料庫進行操作 方法1 use database databasename 方法2 m...