簡體   English   中英

Little Schemer 中的 `quote` 有歧義。 什么時候應該在表達式中加上引號,什么時候不應該?

[英]Ambiguity with `quote` in the Little Schemer. When should an expression be proceeded with a quote and when shouldn't it?

Friedman 和 Felleisen 的 Little Schemer 4e 從定義atom?

(define atom?
    (lambda (x)
        (and (not (pair? x)) (not (null? x)))))

然后在第一章中,有一些問題詢問某某是否是一個原子。 例如(為了清楚起見,腳注被改寫):

這是一個原子是真的嗎?

atom *

*在方案中:( (quote atom)'atom

它說turkey1492u*abc$也是原子。

1492之外的所有這些都必須以'開頭 - 否則我們會得到一個Error: execute: unbound symbol:

1492'1492都有效。 從此以后,在本書中,我怎么知道什么時候應該或不應該在某些內容之前加上引號( ' )? 這很令人困惑。 我希望作者只是明確地引用了引號-在表達式之前添加一個單引號( ' )真的會增加那么多視覺噪音嗎? 我是否應該假設所有內容都以引號( ' )開頭?

原子。 原子是不可分割的東西。 1372這樣的值是不可分割的,它是一個單一的值。 還有其他原子,像"hello"這樣的字符串,像xy這樣的變量,像:keyword'something這樣的值。

編寫 Lisp 時,原子由空格或括號分隔。 然后我們可以通過將原子放在括號中來創建一個或多個form ,例如(* 2 (+ 1 3)) 這里的原子是:

  • 運算符 + 和 *
  • 值 1、2 和 3
  • forms (+ 1 3) 和 (* 2...)

然后有幾個問題。 對於初學者來說, x是指原子'x ,一個名為x的變量,還是存儲在變量x中的值? Lisp 假設x是一個變量,因此輸入x會返回x的值或產生關於x未綁定的錯誤。 x前面加上一個單引號,如'x ,表示“請不要試圖評估這個”。

Forms 具有一致的格式(operator data1 data2 data3...) 但是,如果您只想提供數據會發生什么? 你用什么運算符? 答案是使用 operator quote ,它將表單評估為僅數據。 因為一直說引號很煩人,所以 Lisp 允許你說'(data1 data2 data3...)代替。

至於'1492 ,這與 Scheme 和 Common Lisp 中的1492相同。 這些值是可互換的。 我會使用1492 ,因為引用是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM