다음 함수는 map
및/또는 filter
만 사용할 수 있습니다. fold/foldr
등.이 함수는 다음과 같은 서명과 유형을 가져야합니다. apply::n f x
및 f에만 x를 사용하려면 n times
이어야합니다. 조금 더 공식적으로 설명하면, 다음과 같이 보입니다 : apply n f x = f (f...(f x)...)
, 여기서 f는 n 번 적용됩니다.목록 대신 단일 요소 만 반환하는지도 및/또는 필터. HASKELL
이것은지도에서 매우 쉽게 얻을 수 있지만 문제는지도가 받아서 목록을 반환한다는 것입니다. 그리고 그것은 하나의 정수만 가져 와서 f로 변환 한 다음 그 새로운 정수를 반환하기를 원합니다.
내가 지금까지 쓴:
apply::Int->(Int->Int)->[Int]->[Int]
apply n f x
| n==1 =map f x
| n>1 =apply (n-1) f (map f x)
| otherwise =x
이것은 (목록을 복용하고 반환하여 작품) 어떻게 그것을 호출 오전 :
main = do
print(apply 2 (*2) [3])
를 내가 일을이 기능을 수정하는 방법 더 이상 목록을 가져 오지 않고 반환하지만 단일 정수를 사용하고 새로운 수정 된 정수를 반환합니다. 감사합니다
1.이지도 제거는; 이것은'Int' 타입을 만들 것입니다; 2.'apply'라고하는 줄에서'apply' 만'n' 번이라고 확인했습니다 -'f'는 전혀 호출되지 않습니다. 그러나'apply (n-1) ... '가'f''n-1' 번 적용 결과를 리턴한다면,'f''가'n' 번 적용될 수 있을까요? –
당신은'map' /'filter' 만 사용할 수 있다고 말합니다. 왜'apply n f x | n == 1 = f x | n> 1 = 적용 (n-1) f (f x) | 그렇지 않으면 = x'? – genisage