2017-08-27 18 views
7

Cách đây không lâu tôi đã phát hiện Natural loại dữ liệu trong base. Đó là nghĩa vụ phải được thực hiện (như nó có vẻ với tôi) khi bạn định sử dụng loại số nguyên không âm. Nhưng không rõ tại sao tôi nên thích Natural đến Integer. Cả hai loại có độ chính xác tùy ý, cả hai đều có đại diện thời gian chạy khá được tối ưu hóa - Integer representationNatural representation. Nhưng Naturalcan throw pure exceptions khi bạn trừ số tự nhiên và điều này không thực sự thêm nhiều loại an toàn hơn cho mã của bạn. Trong khi Integer phổ biến hơn trên tất cả các gói.Khi nào nên chọn 'Tự nhiên' trên 'Số nguyên' trong Haskell?

Vậy khi nào và tại sao tôi nên sử dụng Natural?

+1

Điều này có thể là một chút ý kiến, nhưng tiêu chí của tôi sẽ là "nếu bạn muốn có lỗi thời gian chạy đến kết quả phủ định, hãy chọn 'Tự nhiên'" – chi

+0

@chi Đồng ý. Trong khi chúng ta có 'negate' và' (-) 'bên trong lớp' Num' không nhiều, chúng ta có thể làm để không cho phép trừ đi. – Shersh

Trả lời

4

Tôi không thấy lý do bạn muốn sử dụng Natural hoặc Integer. Tại sao không sử dụng Rational thay thế? Đó là độ chính xác tùy ý, có biểu diễn thời gian chạy được tối ưu hóa và hoạt động cho các số nguyên, số nguyên, hợp lý!

Quan điểm của tôi là chúng ta nên chọn một loại có ý nghĩa ngữ nghĩa. Cho phép đếm các ngôi nhà trên đường phố với naturals, ghi lại trò chơi golf tiếp theo của chúng tôi với số nguyên, và chia một chiếc bánh blueberry tươi với hợp lý.

+0

Tôi không biết phần nào (nếu có) của điều này có nghĩa là mỉa mai. Tôi nghĩ bạn nên viết rõ ràng ý kiến ​​của bạn là gì. – leftaroundabout

+0

@leftaroundabout Tôi khuyến khích bạn thêm câu trả lời thứ hai theo một phong cách hùng biện khác. – erisco

+0

@erisco Lý do để chọn 'Tự nhiên' vì ý nghĩa ngữ nghĩa là một lý do chính đáng. Nhưng sau đó: tại sao không 'newtype Natural = Natural Integer'? 'Rational' chậm hơn nhiều so với' Integer' hoặc 'Natural' vì các lệnh gọi liên tục đến hàm' gcd'. Nhưng không rõ cái nào - 'Natural' hay' Integer' - chậm hơn vì tối ưu hóa trình biên dịch và nội tuyến và tất cả những thứ đó. Câu hỏi của tôi không chỉ là «duh, tôi có hai loại, emm ... tôi nên sử dụng cái gì? Tôi thật ngu ngốc, tôi không thể chọn ». Nhưng tại sao lại tạo ra loại "Tự nhiên" như vậy với ngữ nghĩa như vậy. Tại sao ngoại lệ thay vì bão hòa? Tôi có thể đạt được những lợi ích gì? – Shersh

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