2 3符號化的資料

2021-08-22 08:39:12 字數 2247 閱讀 4615

2.3符號化的資料

我們所使用的所有的復合的資料物件最終都是由數字組成的。

在這一部分中,我們通過引入符號資料的能力來擴充套件我們的語言

的表現力。

2.3.1 引用

如果我們能用符號來形成復合的資料,我們能有如下的列表

(a b c d)

(23 45 17)

((norah 12) (molly 9) (lauren 6) (charlotte 4))

能夠包含符號的列表看起來像我們的語言中的表示式。

(* (+ 23 45) (+ x 9)

(define (fact n) (if (= n 1) 1 (* n (fact (-n 1)))))

為了操作符號,在語言中,我們需要一種新的元素,對資料物件的引用的能力。

假定我們要組裝乙個列表(a b)。我們不能使用(list a b)來完成,因為

這個表示式組裝了乙個由a,b的值組成的列表,而不是a,b 這兩個符號本身。

在自然語言的上下文中,這是個很有名的問題,單詞與句子可能被作為語義

實體或者是語法實體而存在。在自然語言中的做法是使用引用符號來彰顯

乙個單詞或者是乙個句子認定為語法實體,也就是字元常量。例如 「張三」的

第乙個字是「張」 如果我們告訴某人,說你的名字。我們期望聽到他的名字。

但是如果我們對某人說「說『名字』這兩個字」。我們期望聽到的是「名字」這兩個字。

注意到的是我們要描述某人可能說的內容時,我們就被迫使用級聯的引號來標識。

為了標識列表與符號應該作為資料物件來對待而不是作為被解釋的表示式,我們能夠遵循

同樣的做法。然而,我們為了引用的格式符號不同於自然語言,我們傳統使用的乙個單引號

僅在被引用物件的開頭。在scheme的語法中我們能夠這麼做,因為我們依賴空格和括號分隔

物件。因此,單個引號符號的含義就是引用接下來的物件。

現在我們能夠區分符號和它們的值:

(define a 1)

(define b 2)

(list a b)

(1 2)

(list 'a 'b)

(a b)

(list 'a b)

(a 2)

引用也允許我們對復合的物件進行操作.對於列表也使用傳統的方式表示

(car '(a b c))

a(cdr '(a b c))

(b c)

與此保持一致的是,我們在執行 '() 時得到了空值。表示為nil。

在操作符號的時候,我們使用的另乙個原子方法是 eq?  ,它有

兩個符號作為輸入引數值,然後測試它們是否相等。 使用eq?,

我們能實現乙個有用的程式叫做memq. 這個程式有兩個引數,乙個是符號,

另乙個是列表。如果符號不在列表中,返回假,否是返回符號首次出現

的元素到最後乙個元素的子列表。

(define (memq item x)

(cond

((null? x) false)

((eq? item (car x)) x)

(else (memq item (cdr x)))

))練習2.53

在執行以下的表達後,直譯器返回的值是什麼?

(list  'a 'b 'c)

(list (list 'george))

(cdr '((x1 x2) (y1 y2)))

(cadr '((x1 x2) (y1 y2)))

(pair? (car '(a short list)))

(memq 'red '((red shoes) (blue socks)))

(memq 'red '(red shoes blue socks))

練習2.54

兩個列表的判斷相等性的程式是 equal? 判斷的條件是對應順序的

元素都相等.如下所示:

(equal?   '(this is a list) '(this is a list))

是真,但是如下的表示式

(equal?   '(this is a list) '(this (is a) list))

是假.為了更精確的,我們能夠遞迴地定義equal? 用基礎的eq?和equal?

eq?使用者判斷兩個符號的相等性,equal?用來判斷兩個列表的相等性。

即列表的頭部等於頭部,尾部等於尾部。

使用這個思想,實現這個程式。

練習2.55 解釋如下的表示式的執行結果。

(car ''abracadabra) 的執行結果是後乙個引號。

文字符號化 Fslex

文字符號化 fslex 文字符號化 tokenizing,有時也叫詞法分析,lexical analysis 或 lexing 其基本意思是把文字分成可管理的塊 lump 或符號 token 要用到工具fslex.exe,它本身就是建立詞法分析器 有時也叫掃瞄器,scanner 進行文字符號化的程式...

iOS 崩潰符號化

1.符號表是什麼?dsym檔案其實是乙個目錄,在子目錄中包含了乙個16進製制的儲存函式位址對映資訊的中轉檔案,所有debug的symbols都在這個檔案中 包括檔名 函式名 行號等 所以也稱之為除錯符號資訊檔案。注意 來檢查 那如何知道crash檔案的uuid呢?可以用 grep 那麼,問題就來了!...

C MapwinGIS符號化配置

背景 基於c 進行mapwingis開發,現在需要對管點管線資料進行符號化。之前通過工程檔案來載入資料和符號化,現在資料單獨載入 sqlserver 符號化也要單獨載入 符號配置檔案 基於style配置檔案對資料進行符號化。管線通過defaultdrawingoptions對其進行符號化。管點基於附...