Używam haskell do wdrożenia wzorca obejmującego funkcje, które zwracają wartość, i siebie (lub funkcja tego samego typu). Teraz I zostały wdrożone to tak:Czy istnieje elegancki sposób na funkcje zwracające funkcje tego samego typu (w krotce)
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)
Siłą napędową tego rodzaju funkcji jest funkcja o nazwie Kaskada:
cascade :: (a -> R a) -> [a] -> [a]
cascade _ [] = []
cascade f (l:ls) = el : cascade g ls where
R (el , g) = f l
który odbywa funkcję nasion oraz listę i zwraca listę utworzoną przez zastosowanie funkcji seed do pierwszego elementu listy, zastosowanie zwróconej przez nią funkcji do drugiego elementu listy i tak dalej.
To działa - jednak w procesie korzystania z tego dla nieco bardziej użytecznych rzeczy zauważyłem, że wiele razy miałem podstawowe jednostki, które są funkcjami, które zwracały funkcje inne niż one same rzadko; i jawne deklarowanie funkcji, która się zwraca, stawało się nieco nudne. Wolałbym użyć czegoś podobnego do funkcji Monada, return
, jednak nie mam pojęcia, co zrobiłby dla tego typu funkcji bind
, zwłaszcza że nigdy nie zamierzałem, aby były one powiązane z czymkolwiek innym niż funkcją, którą zwracają w pierwsze miejsce.
Próbując shoehorn tego do monady zaczęli martwić się o mnie, czy nie, co robiłem było przydatne, tak, w skrócie, co chcę wiedzieć, to:
- Czy to, co robię Zła rzecz? jeśli nie,
- Czy to, co robię, robiłem wcześniej? Czy wymyślam tutaj nowe koło? jeśli nie, to czy istnieje elegancki sposób, aby to zrobić, czy też już to osiągnąłem i jestem chciwy, żądając pewnego rodzaju analogu
return
?
(Nawiasem mówiąc, poza tym, funkcje, które "zwracają się same" lub "struktura danych rekursywnych (funkcji)", nie jestem do końca pewien, jak nazywa się ten rodzaj wzorca, i podjęto próbę przeprowadzenia skutecznych badań w tym jest trudne - jeśli ktokolwiek mógłby podać mi nazwę tego wzoru (jeśli takowy rzeczywiście istnieje), to sam byłby bardzo pomocny)
To wygląda całkiem interesująco - zdecydowanie planuję teraz przeczytać więcej o Circuits. – Anachrome