2012-01-13 53 views
6

Tôi thử sử dụng "let" để xác định định nghĩa biểu thức, nhưng tất cả những gì tôi nhận được là lỗi.Có định nghĩa hỗ trợ tryhaskell.org không?

> let double x = x * x 
not an expression: `let double x = x * x' 

Có một câu lệnh đặc biệt tôi phải sử dụng hoặc không trình biên dịch javascript không hỗ trợ chức năng này?

+3

Thật buồn cười khi mọi người trong chủ đề này dường như nghĩ rằng việc nhân đôi giống như bình phương;) – Thomas

+2

@Thomas: Haskell không quan tâm đến "số học chuẩn" * ưa thích của bạn! Nó chỉ là biểu cảm! – ehird

Trả lời

9

Thật vậy, nó không hỗ trợ định nghĩa; có lẽ vì nó chỉ được dùng để giới thiệu cơ bản, và có lẽ không duy trì trạng thái giữa các dòng. Như ngụ ý bởi việc sử dụng hint, nó chỉ đơn giản là đánh giá các biểu thức. Cũng không giống như GHCi, nó không cố gắng thực hiện các hành động IO (may mắn!), Và chỉ đơn giản là cố gắng in chúng thay vì (không thành công, vì các hành động IO không có một cá thể Show). Tuy nhiên, bạn có thể làm let square x = x * x in square 42 trên một dòng đơn.

Nhân tiện, hãy thử Haskell không sử dụng trình biên dịch Haskell JavaScript hoặc bất kỳ thứ gì tương tự; nó giao tiếp với một máy chủ để đánh giá các biểu thức bạn nhập vào. Tất cả trong tất cả, nó là một bằng chứng rõ ràng về khái niệm, và một cái móc ban đầu tuyệt vời để có được những người quan tâm đến Haskell, nhưng đối với bất kỳ loại sử dụng thực sự nó không phù hợp trong ít nhất so với một cái gì đó giống như GHCi.