2010-09-23 20 views
6

Đối tượng được trả về bởi delay trong Đề án là "lời hứa", nhưng lời hứa không được coi là loại (vì vậy không có thủ tục promise? và không được liệt kê dưới dạng R5RS hoặc R6RS).Tại sao không hứa hẹn một loại dữ liệu trong Đề án?

Có cộng hưởng mạnh mẽ tại sao điều này không? Tôi có vẻ như khá tự nhiên khi làm một cái gì đó như (if (promise? x) (force x) x), ví dụ. (Và tôi thấy rằng một số triển khai sẽ cho phép tôi ép buộc không hứa hẹn, và những người khác sẽ không). Ngoài ra, nếu tôi có thể lưu trữ một cái gì đó trong một variale và vượt qua nó xung quanh, tôi cảm thấy như nó nên có một loại.

Trả lời

4

Không thể có lý do mạnh mẽ, kể từ MIT/GNU scheme, xác định hàm promise?.

+1

Cũng như Guile. :-P –

4

Tôi nghĩ rằng nó cho phép thực hiện tối ưu hóa hơn delay/force. Thực tế là giá trị bắt buộc có thể được ghi nhớ (để lời hứa thực sự bị buộc chỉ một lần và giá trị kết quả được trả về trong các cuộc gọi force tiếp theo) làm mờ sự khác biệt giữa lời hứa và giá trị kết quả của nó. Nếu bạn có promise? bạn không thể thay thế lời hứa cưỡng bức theo giá trị của nó ở mọi nơi cần thiết. Do đó, tùy thuộc vào việc thực hiện, một lời hứa có thể không thể phân biệt được với bất kỳ giá trị Đề án nào khác.

+0

Điều đó có ý nghĩa! Cảm ơn bạn đã trả lời. (Tôi vẫn nghĩ rằng có _could_ là một lời hứa? Predicate rằng sẽ trả lời #t bất cứ khi nào bạn có thể sử dụng lực lượng trên đối tượng - ngay cả khi nó luôn luôn trở về sự thật.) – Jay

+0

Chờ đợi, những gì memoization phải làm gì với các loại (lực lượng x) và x? Lực lượng sẽ luôn trả về giá trị và x luôn là lời hứa, trừ khi tôi hiểu nhầm điều này. – erjiang

Các vấn đề liên quan