3
저는 하스켈에서 초보자입니다. 마지막 인수하지 않고,부분적으로 적용된 재귀 함수
ghci> frepeat 3 (^2) 2
256
ghci> frepeat 4 (++ "-bla") "bla"
"bla-bla-bla-bla-bla"
지금 내가 더 컴팩트하게를 다시 작성합니다 : 그것은 작동
frepeat :: (Integral n) => n -> (a -> a) -> a -> a
frepeat n f a
| n <= 0 = error "Invalid count."
| n == 1 = f a
| otherwise = f (frepeat (n-1) f a)
: 나는 인수로 다른 함수를 여러 번 적용되는 기능을 썼다. 나는 그것을 원한다 - 부분적으로 적용된 함수 여야한다. 나는 이것을 시도했다 :
frepeat :: (Integral n) => n -> (a -> a) -> a -> a
frepeat n f
| n <= 0 = error "Invalid count."
| n == 1 = f
| otherwise = f (frepeat (n-1) f)
그러나 GHCi는 그것을 먹지 않는다. .. 내가 그것을 할 수 없다는 것을 의미합니까?
나는 기본을하는 것처럼 쓸 수있다 'n == 0 '인 경우는'id'를 반환 할 수 있습니다. 음, 완전히 솔직히 말하면, 재귀를 사용하지 않을 것이지만, foldr (.) id와 같은 것입니다. 복제하다 ' – chi
@chi, 나는 당신의 대답을 이해하지 못했습니다. 당신의 사면의 완전한 규정을 보여줄 수 있습니까? –
감사합니다. 그것은 작동합니다 : 'frepeat :: Int -> (a -> a) -> a -> a frepeat n f a \t | n == 0 = a \t | 그렇지 않으면 = foldr (\ _ acc -> f acc) a (replicate na)' –