2010-05-15 6 views
1

두 개의 요소를 사용하고 함수에서 주어진 첫 번째 요소의 일부 값을 반환하는 함수를 사용하여 목록을 업데이트 할 숙제가 있습니다. 따라서 각 요소를 거치고 전체 목록을 업데이트하고 목록의 다른 모든 요소 (자체 포함)에 대해 함수를 적용하여 값을 업데이트해야합니다.목록 요소 업데이트, 하스켈

지금까지 (각 요소가 동일하게 처리되도록) 목록을 먼저 매핑하려고 시도했지만 지정된 요소의 값을 다시 매핑하여 각 요소 값을 구체적으로 업데이트했습니다. 함수, 특정 요소 및 전체 목록 다음과 같이 특정 값을 p @ list에 제공하는 대신 "map function p @ list list"에서 만든 값 목록을 유추하고 있다고 계속 불만을 제기합니다.

res :: X -> X -> Z -- function given 

myf :: [X] -> [X] -- Here is my function 
myf ps = map newf ps 
    where 
    newf [email protected](X oldz) = X newz 
    newz = map (res p) ps 

이 전체 목록 자체에 대한 목록을 업데이트 할 수있는 올바른 방법입니다 : 여기에 내가 구현하기 위해 노력했습니다 무엇의 샘플입니다?

편집 :이 전체 목록 자체에 대한 목록을 업데이트 할 수있는 올바른 방법 맞춤법 실수와 또한

+0

설명하는 접근법을 보여주는 코드 예제를 제공 할 수 있습니까? 숙제 태그를 추가 할 수도 있습니다. –

+3

샘플 코드가별로 의미가 없다 -'p'는'newz'의 범위에없고,'newf'는 인수를 사용하지 않고,'res' 나'X'와' Z' 데이터 유형을 포함하고 있으며, 게다가 당신이하려고하는 것을 파악할 수 없습니다. –

답변

3

에 숙제 태그를 참을 수 없어 내 사과를 grammar-인가?

코드가 올바른지 여부는 확실하지 않습니다. [email protected](X oldz)은 생성자가 X oldz 인 목록에서 요소를 가져오고 이름을 p으로 가정합니다. 하지만 ...

map (res p)을 적용한 후 목록이 변경되면 어떻게 행동해야하는지 기술해야합니다. 목록에 대한 모든 "변경"목록의 초기 값을 기준으로 만 이루어져야하고 마지막으로 첫 번째 요소부터 순서대로 적용 할 경우 는 :

myf ps = (buildPlan ps) ps where 
    buildPlan [] = id 
    buildPlan (x:xs) = map (res x) . buildPlan xs 

일부는 선호 할 수 있습니다 :

myf ps = changesPlan ps where 
    change x = map (res x) 
    changesPlan = foldr (.) id (map change ps) 

을 경우 목록에있는 "변경 사항"은 이전의 map (res x)에서 변경해야합니다 (비 반복적 인 언어로 목록을 보면서 다음 반복에서 가져올 요소조차도 모든 요소가 변경됩니다).

myf ps0 = rebuildFrom 0 ps0 where 
    rebuildFrom n ps | n >= length ps = ps 
    rebuildFrom n ps = rebuildFrom (n+1) ps' where 
     x = ps !! n 
     ps' = map (res x) ps