Khi đọc SICP nổi tiếng, tôi thấy các tác giả có vẻ khá miễn cưỡng khi đưa ra tuyên bố chuyển nhượng cho Đề án trong Chương 3. Tôi đọc văn bản và loại hiểu lý do tại sao họ cảm thấy như vậy.
Vì Scheme là ngôn ngữ lập trình chức năng đầu tiên tôi từng biết, tôi rất ngạc nhiên khi có một số ngôn ngữ lập trình chức năng (không phải Scheme dĩ nhiên) có thể làm mà không cần gán.
Hãy sử dụng ví dụ cuốn sách cung cấp, bank account
ví dụ. Nếu không có câu lệnh gán, làm thế nào điều này có thể được thực hiện? Làm thế nào để thay đổi balance
biến? Tôi hỏi như vậy bởi vì tôi biết có một số ngôn ngữ chức năng thuần túy ngoài kia và theo lý thuyết hoàn chỉnh Turing, điều này cũng có thể được thực hiện.
Tôi đã học C, Java, Python và sử dụng các bài tập rất nhiều trong mỗi chương trình tôi đã viết. Vì vậy, nó thực sự là một kinh nghiệm mở mắt. Tôi thực sự hy vọng ai đó có thể giải thích ngắn gọn về cách tránh các bài tập trong các ngôn ngữ lập trình chức năng đó và tác động sâu sắc (nếu có) của nó đối với các ngôn ngữ này.
Ví dụ được đề cập ở trên là đây:
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
Điều này đã thay đổi balance
bởi set!
. Đối với tôi nó trông giống như một phương thức lớp để thay đổi thành viên lớp balance
.
Như tôi đã nói, tôi không quen thuộc với các ngôn ngữ lập trình chức năng, vì vậy nếu tôi nói điều gì đó sai về chúng, hãy thoải mái chỉ ra.
set!
hoặc các chức năng khác kết thúc bằng a!
. Khi bạn cảm thấy thoải mái với điều đó, việc chuyển đổi sang FP thuần túy sẽ dễ dàng hơn.