Tôi không hiểu được sự đệ quy trong một đơn nguyên. Từ wiki haskell.org đây là một ví dụ:Đệ quy trong một đơn nguyên
main = f 3
f 0 = return []
f n = do v <- getLine
vs <- f (n-1)
return $! v : vs
Chương trình này nhận ba dòng từ đầu vào chuẩn đệ quy. Những gì tôi không thể hiểu được là những gì sẽ xảy ra khi bạn nhận được để f 0 và làm thế nào đệ quy thư giãn. Giá trị cuối cùng của khối do được xây dựng như thế nào? Tại sao dòng trả lại cuối cùng được gọi lặp đi lặp lại trong đệ quy? Tôi biết trả lại không phải là chức năng trở lại như trong ngôn ngữ mệnh lệnh, nhưng tôi không thể nhìn thấy cách dòng này được lặp đi lặp lại.
Tôi biết rằng đây là câu hỏi về người mới bắt đầu thô, nhưng tôi bị bối rối.
Trên giấy, hãy thử thay thế cuộc gọi thành 'f' trong' vs <- f (n-1) 'với định nghĩa của f, cho đến khi bạn mở rộng hoàn toàn. – Squidly
BTW, nếu '$!' Là 'seq' việc sử dụng của nó trông vô nghĩa, vì' v: vs' đã ở dạng đầu bình thường yếu. – chi