Trong standard Scheme nó có thể viếtTại sao một "vũ trang" bị thiếu vũ trang?
(if (> x 2)
(set! x (- x 1)))
nhưng điều này là không thể trong Racket - vợt của if
luôn đòi hỏi hai cánh tay. Tại sao?
Trong standard Scheme nó có thể viếtTại sao một "vũ trang" bị thiếu vũ trang?
(if (> x 2)
(set! x (- x 1)))
nhưng điều này là không thể trong Racket - vợt của if
luôn đòi hỏi hai cánh tay. Tại sao?
Lý
Các biến thể một lượng vũ trang của if
đã bị xóa khỏi vợt để ngăn chặn lỗi.
Trong mã chức năng, người ta luôn sử dụng biến thể hai trang của if
.
(if test expr-on-true expr-on-false)
Quên cánh tay thứ hai expr-on-false
sẽ không dẫn đến một cú pháp lỗi, nhưng để một lỗi runtime (biểu thức sẽ trở #<void>
).
Để ngăn các lỗi này thường xảy ra trong mã chức năng, nó đã được quyết định giới thiệu biểu mẫu when
cho biến thể một tay của if
.
(when test expr-on-true)
Bên cạnh việc ngăn chặn các lỗi ngẫu nhiên, biểu mẫu mới được chỉ định rõ ràng cho người đọc mã, mã dựa vào tác dụng phụ.
Porting mã từ Đề án tiêu chuẩn để vợt
Nếu bạn cố gắng chạy mã Scheme trong vợt và thấy thông báo lỗi
if: bad syntax (must have an "else" expression)
bạn phải viết lại biểu thức if
để when
hoặc unless
.
Đơn giản chỉ cần viết lại:
(if test expr1) to (when test expr1)
và
(if (not test) expr1) to (unless test expr1).