跳轉到內容

Scheme 程式設計/使用變數

來自華夏公益教科書,開放的書籍,開放的世界

使用變數

[編輯 | 編輯原始碼]

為了使您的程式更具動態性,通常需要宣告一個變數。 有兩種主要的方法,使用 definelet。 兩者的區別一旦完全掌握就很容易理解。

例如,使用 define

> (define x 2)
#<unspecified>
> (* x 3)
6
> x
2

這表明即使變數 x 被使用過,它仍然存在,它被定義為所有人都可以檢視、使用和(正如我們將在後面看到)隨意修改。

一般來說,變數的 define 語句的形式如下

(define <variable name> <variable value>)

現在我們將看到 let 的用法

> (let ((x 2) (y 4)) (* x y))
8
> x
;ERROR: "/usr/lib/scm/Iedline.scm": unbound variable:  x
> y
;ERROR: "/usr/lib/scm/Iedline.scm": unbound variable:  y

注意這裡,當代碼塊執行完畢後,變數 xy 將不再可用。 現在,這是一種非常笨拙和緩慢的方法,但它允許在以後編寫更優雅的程式。

一般來說,let 語句的形式如下

(let ((var1 val1) ... (varn valn)) (<body>))

Scheme 中的變數是動態型別的,因此在定義變數時無需宣告變數的型別。 此外,如果您想更改變數的值,您可以將其更改為任何您喜歡的值 - 相同的變數可以儲存任何型別的資料。 當一個函式返回兩種不同型別的值,而您希望儲存結果在一個變數中而不管結果是什麼時,這將很有益。

(define f 
  (lambda(x)
    (cond
      ((= x 3) 5)
      (else "Error: Invalid input!"))))

(define y (f 5))

如果我們使用的是像 Java 這樣的語言,它使用靜態型別,這是不允許的。 正如示例所示,動態型別的常見用法是讓一個函式返回一種型別的值(例如數字)如果函式呼叫成功,則返回另一種型別的值(這裡是一個字串)如果函式失敗。 當然,儘管有動態型別,但諸如嘗試將兩個符號相乘之類的邏輯操作仍然會失敗,因此當一個函式返回兩種可能型別時,請確保在嘗試使用它之前確定實際返回的值的型別。

華夏公益教科書