Tất cả các object data compound chúng ta sử dụng được khởi tạo từ các số. Trong ngữ cảnh này, chúng ta có thể mở rộng việc trình bày khả năng của ngôn ngữ bằng bằng cách làm việc với cá biểu tượng ngẫu nhiên nư là dữ liêu.
Sự trích dẫn- Quotation
Nếu chúng ta có thể tạo ra dữ liệu compound sử dụng các biểu tương, chúng ta có các list như sau
(a b c d)
(23 45 17)
((Norah 12) (Molly 9) (Anna 7) (Lauren 6) (Charlotte 4))
List bao gồm các biểu tượng có thể được xem như là các biểu thức của ngôn ngữ
(* (+ 23 45)
(+ x 9))
(define (fact n)
(if (= n 1) 1 (* n (fact (- n 1)))))
Để thao tác với các biểu tượng, chúng ta cần một thành phần mới trong ngôn ngữ của chúng ta: khả năng trích dẫ một object data. Như chúng ta muốn khở tạo list (a b). Chúng ta không thể đạt được với (list a b), vì biểu thức này khởi tạo một list của giá trị của a và b hơn là biểu tượng a và b. Đó là ngữ cảnh của ngôn ngữ lập trình vì các từ hoặc câu được xem như là các thực thể ngữ cảnh ( như là các biến hoặc procedure). Trong các ngôn ngữ lập trình sử dụng dấu ngoặc kép để biểu thị rằng một từ hoặc một câu được xem như là chuỗi kí tự. Ví dụ, ký tự đầu tiên của “John” là “J”. Nếu bạn muốn ai đó “nói tên bạn to lên”, chúng ta sẽ nghe tên của người đó. Tuy nhiên, nếu chúng ta bảo sai đó ” nói ‘tên bạn’ to lên’, chúng ta sẽ nghe từ “tên bạn”. Chú ý là chúng ta sử dụng dấu ngoặc đơn trong dấu ngoặc kép dể diễn tả những gì ai đó có thể nói.
Định nghĩa một list
Chúng ta có thể xem việc xác định các list và biểu tượng này như là các data object hơn là các biểu thức expression để được đánh giá. Tuy nhiên, việc diễn đạt cho các trích dẫn khác nhau trong ngôn ngữ chúng ta thường đặt trong dấu nháy kép ” “( hơn là biểu tượng dấu nháy đơn ‘ ‘). Chúng ta có thể có được điều này trong cú pháp Schema vì chúng ta dự vào các khoảng trống và dấu ngoặc đơn ( ) để giới hạn các object. Hơn nữa, ý nghĩa của ký tự trích dẫn đơn được trích dẫn đến object tiếp theo.
Giờ đây chúng ta có thể phân biệt giữa các biểu tượng và giá trị của chúng.
(define a 1)
(define b 2)
(list a b)
(1 2)
(list 'a 'b)
(a b)
(list 'a b)
(a 2)
Sự trích dân (quotation) cũng cho phép chúng ta đưa ra các object compound, sử dụng kỹ thuật gốc để in ra list:
(car '(a b c))
a
(cdr '(a b c))
(b c)
Tương tự, chúng ta cũng có thể in ra một list trống bằng việc đánh giá ‘(), và để phân biệt với biến nil.
Định nghĩa procedure memq
Một tính chất nguyên thủy được sử dụng trong việc thao tác với các biểu tượng là eq?, nó cần hai symbol như là các đối số và kiểm tra liệu rằng chúng có tương tự nhau hay k. Sử dung procedure eq?, chúng ta có thể thực thi một procedure được gọi là memq. Input của nó là hai đối số , môt symbol và một list. Nếu symbol không ở trong list thì memq trả về false, và ngược lại nó trả về list con của list bắt đầu với symbol được tìm thấy trong list.
(define (memq item x)
(cond ((null? x) false)
((eq? item (car x)) x)
(else (memq item (cdr x)))))
Ví dụ, giá trị trả về của
(memq ‘apple ‘(pear banana prune))
là false, ngược lại giá trị trả về của
(memq ‘apple ‘(x (apple sauce) y apple pear))
là (apple pear).
Bài viết tiếp theo: Example: Symbolic Differentiation