Tôi có câu hỏi về cách tốt nhất để thiết kế chương trình tôi đang làm việc trên Haskell. Tôi đang viết một mô phỏng vật lý, đó là điều mà tôi đã thực hiện một loạt các ngôn ngữ mệnh lệnh tiêu chuẩn, và thường là phương pháp chính trông giống như sau:Thiết kế chương trình trong Haskell: cách thực hiện mô phỏng mà không có khả năng biến đổi
while True:
simulationState = stepForward(simulationState)
render(simulationState)
Và tôi tự hỏi làm thế nào để làm điều gì đó tương tự trong Haskell . Tôi có hàm step :: SimState -> SimState
và hàm display :: SimState -> IO()
sử dụng HOpenGL để vẽ trạng thái mô phỏng, nhưng tôi thua lỗ về cách thực hiện điều này trong "vòng lặp" của các loại, vì tất cả các giải pháp mà tôi có thể đưa ra có liên quan một số loại biến đổi. Tôi là một chút noob khi nói đến Haskell, vì vậy nó hoàn toàn có thể là tôi đang thiếu một quyết định thiết kế rất rõ ràng. Ngoài ra, nếu có một cách tốt hơn để kiến trúc sư chương trình của tôi như một toàn thể, tôi rất vui khi nghe nó.
Cảm ơn trước!
Danh sách của bạn dường như bị thiếu [gói 'monad-loops'] (http://hackage.haskell.org/package/monad-loops), mà tôi nghĩ thực sự là minh chứng rõ ràng nhất về cách tiếp cận này. –
Fantastic - Tôi đã tìm kiếm một lý do để tìm hiểu iteratees. Tôi sẽ xem xét gói ống. Cám ơn rất nhiều! –
nó là quá mức cần thiết cho câu hỏi ban đầu, nhưng vì lợi ích của những người có thể đến sau khi tôi nghĩ rằng chúng ta nên đề cập đến [Lập trình phản ứng chức năng] (http://stackoverflow.com/questions/3154701/help-understanding-arrows-in- haskell) nói riêng [Yampa/Animas] (http://www.haskell.org/haskellwiki/Yampa). –