Tôi đã làm điều này với python. Tôi thấy rằng nó là cồng kềnh để ghi trong một hereditarily phong cách chức năng thuần túy trong một ngôn ngữ mà không được thiết kế cho nó. Ví dụ: đối chiếu hai định nghĩa của in_order :
def in_order(xs):
for i in range(1,len(xs)):
if xs[i] > xs[i+1]:
return False
return True
inOrder :: (Ord a) => [a] -> Bool
inOrder xs = and $ zipWith (<=) xs (tail xs)
Viết in_order
cách Haskell trong python sẽ là cả dài dòng (vì python không hỗ trợ tốt các thành ngữ cần thiết) và chậm (không gian tuyến tính thay vì không gian liên tục của Haskell do lười biếng).
Tuy nhiên, tôi đã thành công khi tạo các chương trình python với tổ chức chức năng và triển khai thành ngữ cho từng chức năng. Ý tưởng rằng đây là một cách tốt để lập trình thực sự là luận điểm đằng sau dự án codecatalog của tôi . Vì vậy, các thành phần của tôi được định hướng xung quanh các khái niệm trừu tượng và các chức năng (với giao diện thuần túy ) hoạt động trên chúng, thay vì các lớp có trạng thái và nó sẽ kết hợp với nhau một cách độc đáo. Trong thực tế, mã được tổ chức theo cách này dường như linh hoạt hơn để sử dụng lại so với mã được tổ chức với các lớp. Đó có thể là một thành kiến cá nhân, tuy nhiên, vì tôi vẫn là một tín đồ của Haskell.
Vì vậy, tôi sẽ nói câu trả lời cho câu hỏi của bạn là kinda . Sử dụng nguồn gốc chức năng của bạn để giúp bạn suy nghĩ, nhưng đừng lạm dụng nó. Ví dụ. mô phỏng các danh sách lười biếng trong Ruby chỉ vì thành ngữ có lẽ sẽ gặp nhiều rắc rối hơn giá trị của nó.