Następujące równania są napisane w składni Miranda, ale ze względu na podobieństwa między Mirandą i Haskellem oczekuję, że programiści Haskell powinni to zrozumieć!Określanie typu funkcji w Programowaniu funkcjonalnym
Jeśli zdefiniować następujące funkcje:
rc v g i = g (v:i)
rn x = x
rh g = hd (g [])
f [] y = y
f (x:xs) y = f xs (rc x y)
g [] y = y
g (x:xs) y = g xs (x:y)
Jak wypracować rodzaj funkcji? Myślę, że rozumiem, jak to zrobić dla f, g i rn, ale jestem zdezorientowany z częściowej części aplikacji.
rn będzie * -> * (lub cokolwiek -> coś, myślę, że jest to -> a w Haskell)
dla F i G są rodzaje funkcji zarówno [*] -> * -> *?
Nie jestem pewien, jak podejść do wyszukiwania typów dla rc i rh. W rc, g jest częściowo stosowane do zmiennej i - więc domyślam się, że ogranicza to typ i do [*]. Jaka jest kolejność rc i g w definicji rc? Czy g stosuje się do i, a następnie wynikowa funkcja używana jako argument dla rc? Czy też rc pobiera 3 oddzielne parametry v, gi i? Jestem naprawdę zdezorientowany .. każda pomoc byłaby doceniona! Dzięki chłopaki.
Niestety zapomniał dodać, że HD to standardowa funkcja głowa na liście i jest zdefiniowany jako:
hd :: [*] -> *
hd (a:x) = a
hd [] = error "hd []"
Czy to zadanie domowe? –
Nie, przygotowuję się do egzaminów już teraz i jest to stare pytanie egzaminacyjne do egzaminu Miranda. – user1058210
Jaki jest typ funkcji 'hd'? –