Đây là một trong những bài học cơ bản về SICP và một trong những ý tưởng mạnh mẽ nhất của khoa học máy tính. Nó hoạt động như thế này:
Điều chúng tôi nghĩ là "mã" không thực sự có khả năng tự làm bất cứ điều gì. Mã xác định một chương trình chỉ trong một ngữ cảnh diễn giải - bên ngoài ngữ cảnh đó, nó chỉ là một dòng ký tự. (Thực sự là một dòng bit, mà thực sự là một dòng xung điện. Nhưng hãy giữ nó đơn giản.) nghĩa là mã được xác định bởi hệ thống mà bạn chạy nó - và hệ thống này chỉ xử lý mã của bạn dưới dạng dữ liệu mà nói với nó những gì bạn muốn làm. Mã nguồn C được giải thích bởi trình biên dịch C dưới dạng dữ liệu mô tả một tệp đối tượng mà bạn muốn nó tạo. Một tệp đối tượng được trình xử lý tải xuống dưới dạng dữ liệu mô tả một số hướng dẫn của máy mà bạn muốn xếp hàng để thực thi. Các lệnh máy được giải thích bởi CPU như là dữ liệu xác định chuỗi chuyển tiếp trạng thái mà nó cần phải trải qua.
ngôn ngữ thông dịch thường chứa các cơ chế để điều trị dữ liệu dưới dạng mã, có nghĩa là bạn có thể vượt qua mã vào một chức năng trong một số hình thức và sau đó thực hiện nó - hoặc thậm chí tạo ra mã tại thời gian chạy:
#!/usr/bin/perl
# Note that the above line explicitly defines the interpretive context for the
# rest of this file. Without the context of a Perl interpreter, this script
# doesn't do anything.
sub foo {
my ($expression) = @_;
# $expression is just a string that happens to be valid Perl
print "$expression = " . eval("$expression") . "\n";
}
foo("1 + 1 + 2 + 3 + 5 + 8"); # sum of first six Fibonacci numbers
foo(join(' + ', map { $_ * $_ } (1..10))); # sum of first ten squares
Một số ngôn ngữ giống như lược đồ có khái niệm về "hàm hạng nhất", có nghĩa là bạn có thể coi một hàm là dữ liệu và truyền nó đi mà không đánh giá nó cho đến khi bạn thực sự muốn.
Kết quả là phân chia giữa "mã" và "dữ liệu" là khá nhiều tùy ý, chỉ là một chức năng của phối cảnh. Mức trừu tượng càng thấp, mã "thông minh hơn" phải là: nó phải chứa thêm thông tin về cách nó nên được thực thi. Mặt khác, thông tin càng nhiều mà người thông dịch cung cấp, mã càng câm, cho đến khi nó bắt đầu trông giống như dữ liệu không có chút thông minh nào cả.
Một trong những cách mạnh mẽ nhất để viết mã là mô tả đơn giản về những gì bạn cần: Dữ liệu sẽ được chuyển thành mã mô tả cách giúp bạn hiểu những gì bạn cần theo ngữ cảnh diễn giải. Chúng tôi gọi đây là "declarative programming".
Ví dụ cụ thể, hãy xem xét HTML. HTML không mô tả ngôn ngữ lập trình hoàn chỉnh Turing. Nó chỉ là dữ liệu có cấu trúc. Cấu trúc của nó chứa một số thông minh cho phép nó kiểm soát hành vi của ngữ cảnh diễn giải của nó - nhưng không phải là rất nhiều thông minh. Mặt khác, nó chứa nhiều thông minh hơn các đoạn văn bản xuất hiện trên một trang web trung bình: Đó là những dữ liệu khá câm.
Làm thế nào bạn có thể nói rằng nó "phrased thanh lịch" nếu bạn không biết ý nghĩa của nó? – sykora
Đầu tiên tôi nghĩ rằng đó là một chiasmus nhưng bây giờ tôi nghĩ rằng nó là một antimetabole. – tuinstoel
http://en.wikipedia.org/wiki/Von_Neumann_architecture –