2013-10-18 2 views
2

필자는 지정된 시간만큼 원소를 복사하는 list comprehension을 사용하여 함수를 구현하려고합니다.basic haskell : 원소를 n 번 복사하는 것에 대한리스트 이해력

copy 2 'a' = aa 

이것은 내가 지금까지 무엇을 가지고 나는이에 정말 붙어 있지만 예를 들어

에 노력하고있어 :

에서 func1 어떻게 든 모든 요소에 y를 매핑한다
copy2 :: Int->a->[a] 
copy2 x y = func1 y [b|b<-[1..x]] 

of x

많은 것은 아니지만 나는이 한 명의 미안한 사람들에 대해 정말로 우둔합니다.

답변

4
copy2 qty item = [item|_<-[1..qty]] 
+0

Perfect! 감사합니다 – John

+1

도입 된 변수 us는 컴파일러 경고로 이어질 수 있습니다. 당신은'[item | _ <- [1..qty]] '로 표시되며 이는 혼란스럽지 않을 수도 있습니다. – leftaroundabout

7

는 응답이 승인되었지만, 나는 당신이 대답에 당신을 주도 할 수 당신의 아주 질문에 근본적으로 중요한 무언가 말 것을 지적하고 싶다.

당신은 말했다 :

copy2 :: Int->a->[a] 
copy2 x y = func1 y [b|b<-[1..x]] 

여기서 우리가 같이 분석 조금 정리하면 FUNC1 어떻게 든 X

의 모든 요소에 y를 매핑한다 - 나는 당신이 무엇을 의미 확신을 - 실제로 우리는 const 개고기 값 y에 대한 이해도에 의해 생성 된 목록의 모든 요소가 map 인 것을 원합니다.

음, 하나의 X에 대한 y 값을 생성하는 기능을 만드는 것은 간단하다

const y x = y 

사실, 함수가 이미 서곡에 있는지 충분히 유용하다!

이제 우리는 map개 이상 개 요소 목록에 추가하면됩니다.

copy2 x y = map (const y) [b | b <- [1..x]] 

또는 조금 단순화, 정말 X

copy2 x y = map (\x -> y) [1..x] 

는 "모든에 대한 X와 Y지도 우리가 (난 당신이 목록의 이해를 필요 알면서도), 원래의 설명에 얼마나 가까운 보여 . "

그래서 당신은 그것을 보았습니다.

+0

처음 생각에서 답을 이끌어내는 좋은 방법! (비록 복잡하지만 복잡 함) – rafalio

+0

과제 자체가 다소 인공적입니다. :)하지만 고마워. – Sarah

+1

'map (const y) [b | b <- [1..x]] == [(const y) b | b <- [1..x]] == [y | b <- [1..x]]'. –

관련 문제