Tôi đang sử dụng haskell để triển khai mẫu liên quan đến các hàm trả về một giá trị và chính chúng (hoặc một hàm cùng loại). Ngay bây giờ tôi đã thực hiện điều này như sau:Có cách nào thanh lịch để có chức năng trả về cùng loại (trong một bộ)
newtype R a = R (a , a -> R a)
-- some toy functions to demonstrate
alpha :: String -> R String
alpha str
| str == reverse str = R (str , omega)
| otherwise = R (reverse str , alpha)
omega :: String -> R String
omega (s:t:r)
| s == t = R (s:t:r , alpha)
| otherwise = R (s:s:t:r , omega)
Các động lực thúc đẩy cho các loại chức năng là một chức năng gọi là thác:
cascade :: (a -> R a) -> [a] -> [a]
cascade _ [] = []
cascade f (l:ls) = el : cascade g ls where
R (el , g) = f l
nào mất một chức năng giống và một danh sách, và trả về một danh sách được tạo ra bằng cách áp dụng hàm hạt giống cho phần tử đầu tiên của danh sách, áp dụng hàm trả về cho phần tử thứ hai của danh sách, và cứ tiếp tục như vậy.
Công trình này - tuy nhiên, trong quá trình sử dụng điều này cho những thứ hữu ích hơn một chút, tôi nhận thấy rằng rất nhiều lần tôi có các đơn vị cơ bản trong số đó là các chức năng trả về các chức năng khác ngoài bản thân chúng hiếm khi; và tuyên bố rõ ràng một hàm để trả về chính nó đã trở nên hơi tẻ nhạt. Tôi muốn có thể sử dụng một cái gì đó giống như chức năng return
của Monad, tuy nhiên, tôi không biết bind
sẽ làm gì cho các chức năng này, đặc biệt là vì tôi không bao giờ có ý định liên kết với bất kỳ thứ gì khác ngoài chức năng mà chúng trả về địa điểm đầu tiên.
Cố gắng bót đi giày này vào một đơn nguyên bắt đầu lo lắng cho tôi về việc có hay không những gì tôi đã làm được rất hữu ích, vì vậy, trong ngắn hạn, những gì tôi muốn biết là:
- phải là những gì tôi đang làm một Điều tồi tệ? nếu không,
- Tôi đang làm gì trước/sáng tạo lại bánh xe ở đây? nếu không,
- Có cách nào thanh lịch để thực hiện việc này hay tôi đã đạt được điều này và đang tham lam bằng cách muốn một số loại tương tự
return
?
(Ngẫu nhiên, bên cạnh đó, 'chức năng trả về chủ đề' hoặc 'cấu trúc dữ liệu đệ quy (chức năng)', tôi không biết loại mô hình này được gọi là gì và đã cố gắng thực hiện nghiên cứu hiệu quả trong nó khó khăn - nếu ai đó có thể cho tôi một tên cho mẫu này (nếu nó thực sự có một), thì điều đó sẽ rất hữu ích)
Điều này trông khá thú vị - Tôi chắc chắn có kế hoạch đọc thêm về Mạch bây giờ. – Anachrome