Việc đánh giá các biểu thức kết hợp. Evaluating Combinations.

Mục tiêu của chúng ta trong bài viết này là tách biệt các vấn đề về liên quan đến procedure. Một điểm đáng lưu ý trong việc đánh giá các combination, trình thông dịch interpreter tự nó tuân thủ một tiến trình như là một procedure như sau:

Để xem xét đánh giá một combination như ( + (* 1 1) ( – 4 2)), ta làm như sau:

  1. Đánh giá các expressions con của combination như (* 1 1) và (- 4 2).
  2. Áp dụng các subexpression ở trên trở thành các đối số như là giá trị của các operands của một operator của một procedure .

Even this simple rule illustrates some important points about processes
in general. First, observe that the first step dictates that in order to accomplish the evaluation process for a combination we must first perform the evaluation process on each element of the combination. us,
the evaluation rule is recursive in nature; that is, it includes, as one of
its steps, the need to invoke the rule itself.

Nhìn chung ta cũng có thể thấy được các quy tắc cơ bản được minh họa cụ thể về một process. Đầu tiên, chúng ta có thể quan sát thấy rằng, bước đầu tiên để đạt được tiến trình evaluation cho một combination chúng ta phải trình diễn quá trình đánh giá trên mỗi thành phần của combination. Quy tắc đánh giá có tính chất đệ quy; nghĩa là, nó bao gồm, như một trong những các bước của nó, sự cần thiết phải gọi chính quy tắc đó.

Hãy chú ý, ý tưởng đệ quy có thể được sử dụng một cách ngắn gọn như thế nào để diễn đạt
điều đó, trong trường hợp của một sự kết hợp lồng nhau sâu, nếu không sẽ
được coi là một quá trình khá phức tạp. Ví dụ, evaluation của combination (* (+ 2 (* 4 6)) (+ 3 5 7))

Yêu cầu quy tắc đánh giá phải được áp dụng cho bốn kết hợp khác nhau ở trên. Chúng ta có thể có được hình ảnh của quá trình này bằng cách biểu diễn sự kết hợp dưới dạng cây, như ảnh trên. Mỗi sự kết hợp là được đại diện bởi một nút có các nhánh tương ứng với toán tử và các toán hạng của sự kết hợp xuất phát từ nó. Các nút đầu cuối (nghĩa là các nút không có nhánh xuất phát từ chúng) đại diện cho một trong hai toán tử hoặc số. Xem xét đánh giá dưới dạng cây, chúng ta có thể hãy tưởng tượng rằng các giá trị của toán hạng tăng dần lên, bắt đầu từ các nút đầu cuối và sau đó kết hợp ở mức ngày càng cao hơn.
Nói chung, chúng ta sẽ thấy rằng đệ quy là một kỹ thuật rất mạnh mẽ để xử lý các đối tượng có thứ bậc, dạng cây. Trên thực tế, “giá trị thẩm thấu hình thức đi lên” của quy tắc đánh giá là một ví dụ về một loại chung của quá trình được gọi là tích lũy cây.

Tiếp theo, hãy quan sát việc áp dụng lặp lại bước đầu tiên mang lại cho chúng ta sự chú ý rằng nơi chúng ta cần đánh giá, không phải các combination, mà là các biểu thức nguyên thủy như chữ số, toán tử hoặc các tên khác. Chúng ta cần quan tâm các trường hợp nguyên thủy bằng cách quy định rằng như sau:

  • giá trị của các chữ số là những con số mà chúng đặt tên,
  • giá trị của các toán tử là các chuỗi lệnh máy thực hiện các thao tác tương ứng, và
  • giá trị của các tên khác là đối tượng được liên kết với những tên đó bên trong môi trường.

Chúng ta có thể coi quy tắc thứ hai là trường hợp đặc biệt của quy tắc thứ ba bằng cách quy định rằng các ký hiệu như + và * cũng được đưa vào môi trường toàn cục và được liên kết với các chuỗi lệnh máy.
Đó là “giá trị” của chúng. Điểm mấu chốt cần chú ý là vai trò của môi trường trong việc xác định ý nghĩa của các ký hiệu trong biểu thức. Trong một ngôn ngữ tương tác như Lisp, thật vô nghĩa khi nói về giá trị
của một biểu thức như (+ x 1) mà không chỉ định bất kỳ thông tin nào về môi trường cho biểu tượng x (hoặc thậm chí đối với ký hiệu +).

Như chúng ta sẽ tìm hiểu trong Chương 3, khái niệm chung về môi trường sẽ cung cấp một bối cảnh trong đó việc evaluation diễn ra sẽ đóng một vai trò quan trọng trong sự hiểu biết của chúng ta về việc thực thi một chương trình.

Lưu ý rằng quy tắc đánh giá nêu trên không được áp dụng cho các define. Ví dụ: việc đánh giá (define x 3) không áp dụng cho hai đối số, một trong số đó là giá trị của ký hiệu x và đối số còn lại trong đó là 3, vì mục đích của việc define này chính xác là liên kết x với một giá trị 3. (đó là, (define x 3) không phải là combination.)

Những ngoại lệ như vậy đối với quy tắc đánh giá chung được gọi là các dạng đặc biệt.
Define là ví dụ duy nhất về một biểu mẫu đặc biệt mà chúng ta đã thấy cho đến nay,
nhưng chúng ta sẽ sớm gặp những trường hợp khác. Mỗi hình thức cụ thể có quy tắc đánh giá riêng. Các loại biểu thức khác nhau (mỗi loại có quy tắc đánh giá liên quan) tạo nên cú pháp của ngôn ngữ lập trình. So với hầu hết các ngôn ngữ lập trình khác, Lisp có rất nhiều cú pháp đơn giản; nghĩa là, quy tắc đánh giá cho các biểu thức có thể được mô tả bằng một quy tắc chung đơn giản cùng với các quy tắc chuyên biệt cho một biểu thức với số lượng nhỏ các hình thức đặc biệt.

Bài viết tiếp theo: Compound Procedures

One thought on “Việc đánh giá các biểu thức kết hợp. Evaluating Combinations.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *