Tại sao don nguyen

Theo chủ kiến ​​nhã nhặn của tớ, câu vấn đáp cho câu hỏi lừng danh "Thế như thế nào là một trong những 1-1 nguyên?" , đặc biệt là những người được bình chọn những tốt nhất, nỗ lực phân tích và lý giải vậy nào là 1 trong những đơn ngulặng nhưng không phân tích và lý giải rõ ràng tại sao các đơn vị chức năng đích thực phải thiết . Họ rất có thể được giải thích là phương án cho 1 vấn đề?


Những phân tích chúng ta vẫn thực hiện? Quý khách hàng đang chú ý nghỉ ngơi đâu? Những tài ngulặng bạn đang tìm kiếm thấy? Chúng tôi mong muốn bạn triển khai một lượng phân tích đáng chú ý trước khi hỏi và đến công ty chúng tôi biết thắc mắc các bạn vẫn triển khai nghiên cứu nào . Có các tài nguyên nỗ lực giải thích rượu cồn lực đến tài nguyên - nếu như khách hàng không search thấy 1 chút nào, chúng ta cũng có thể phải nghiên cứu và phân tích thêm một chút ít. Nếu các bạn vẫn search thấy một vài nhưng lại họ ko giúp bạn, nó vẫn tạo nên câu hỏi này tốt rộng nếu như bạn giải thích phần đông gì các bạn đã tra cứu thấy cùng tại sao cụ thể bọn họ không thao tác cho chính mình.
— DW
8
Điều này chắc chắn là phù hợp hơn cho Lập trình viên .StackExchange cùng không phù hợp cùng với StackOverflow. Tôi đang bỏ thăm để di chuyển ví như tôi hoàn toàn có thể, nhưng mà tôi không thể. = (
— jpmc26
3
jpmc26 Rất có thể nó sẽ bị đóng sinh sống đó là "hầu hết dựa vào quan điểm"; ít nhất đấy là một cơ hội (nlỗi được thể hiện do số lượng tín đồ cỗ vũ to con, mau lẹ mở cửa trở lại vào ngày ngày qua cùng không tồn tại thêm phiếu bầu nào nữa)
— Izkata

Câu trả lời:


580

Tại sao chúng ta phải các đơn nguyên?

Chúng tôi hy vọng thiết kế chỉ thực hiện những chức năng . ("Lập trình chức năng (FP)" sau thời điểm vớ cả).

Bạn đang xem: Tại sao don nguyen

Sau kia, Shop chúng tôi gồm một vụ việc Khủng trước tiên. Đây là một trong chương thơm trình:

f(x) = 2 * x

g(x,y) = x / y

Làm núm làm sao bạn có thể nói phần đông gì sẽ được thực hiện đầu tiên ? Làm nuốm làm sao bạn có thể hình thành một chuỗi những hàm theo đồ vật trường đoản cú (tức là một cmùi hương trình ) bằng phương pháp áp dụng ko nhiều hơn các hàm ?

Giải pháp: soạn các hàm . Nếu bạn muốn trước tiên gvới sau đó f, chỉ việc viết f(g(x,y)). Theo giải pháp này, "cmùi hương trình" cũng là một trong những tính năng : main = f(g(x,y)). Được rồi cơ mà ...

phần lớn vụ việc hơn: một trong những công dụng hoàn toàn có thể ko thành công (tức thị g(2,0)phân tách mang lại 0). Chúng tôi không có "ngoại lệ" trong FPhường (nước ngoài lệ không hẳn là chức năng). Làm gắng nào để chúng ta giải quyết nó?

Giải pháp: Chúng ta hãy được cho phép những hàm trả về nhì loại : nuốm bởi vì có g : Real,Real -> Real(hàm từ nhị thực thành thực), hãy có thể chấp nhận được g : Real,Real -> Real | Nothing(hàm trường đoản cú nhì thực thành (thực hoặc không có gì)).

Nhưng các hàm bắt buộc (dễ dàng hơn) chỉ trả về một thứ .

Giải pháp: bọn họ hãy tạo ra một một số loại dữ liệu bắt đầu được trả về, một " kiểu dáng đnóng bốc " rất có thể là thật hoặc đơn giản và dễ dàng là không có gì. Do kia, chúng ta có thể bao gồm g : Real,Real -> Maybe Real. Được rồi cơ mà ...

Điều gì xẩy ra hiện nay f(g(x,y))? fchưa chuẩn bị nhằm tiêu thú a Maybe Real. Và, Shop chúng tôi không muốn chuyển đổi đều tính năng nhưng mà Cửa Hàng chúng tôi có thể kết nối gđể tiêu thụ a Maybe Real.

Giải pháp: bọn họ hãy có một công dụng đặc biệt nhằm "kết nối" / "biên soạn thảo" / "liên kết" những chức năng . Bằng cách đây, chúng ta cũng có thể, phía sau hậu trường, điều chỉnh cổng output của một công dụng nhằm cung cấp chức năng sau.

Trong ngôi trường đúng theo của chúng tôi: g >>= f(liên kết / soạn gthành f). Chúng tôi ao ước >>=thừa nhận gÁp sạc ra, đánh giá nó với, trong ngôi trường vừa lòng kia Nothingchỉ là ko gọi fvới trả lại Nothing; hoặc trở lại, bung file vỏ hộp Realcùng đến fnó ăn uống . (Thuật toán thù này chỉ cần câu hỏi thực hiện >>=đến Maybeloại). Cũng chú ý rằng chỉ >>=được viết một lần cho từng "nhiều loại quyền anh" (vỏ hộp không giống nhau, thuật tân oán mê say ứng không giống nhau).

Nhiều sự việc không giống phát sinh có thể được giải quyết bằng phương pháp thực hiện và một mẫu mã này: 1. Sử dụng "hộp" nhằm mã hóa / lưu trữ các chân thành và ý nghĩa / cực hiếm khác nhau với tất cả các hàm nlỗi gtrả về những "quý hiếm được đóng hộp" đó. 2. Có một công ty soạn nhạc / trình link g >>= fđể giúp liên kết gcổng output fcủa đầu vào cùng với đầu vào, bởi vì vậy công ty chúng tôi chưa phải thay đổi gì fcả.

Các vụ việc đáng để ý hoàn toàn có thể được giải quyết và xử lý bởi nghệ thuật này là:

gồm tâm trạng trái đất mà lại phần lớn tác dụng trong chuỗi tác dụng ("chương trình") hoàn toàn có thể chia sẻ: chiến thuật StateMonad.

Xem thêm: Tại Sao Lại Mọc Mụn Và Cách Điều Trị Hiệu Quả Nhất, 11 Nguyên Nhân Khiến Da Bạn Nổi Mụn

Chúng tôi không mê thích "hàm ko tinh khiết": các hàm đưa về cổng output không giống nhau mang lại cùng một nguồn vào. Do kia, hãy ghi lại các hàm kia, làm cho bọn chúng trả về quý giá được lắp thẻ / đóng hộp: IOđối chọi nguim.