2013-02-10 3 views
0

함수에서 목록 위치 x가 어디에 있는지 알아내는 방법이 있는지 궁금합니다.목록 요소의 현재 위치 얻기

hep list = [if x=="you" then "u" else if x=="are" then "r" else x | x <- list] 

뭔가 같은 :

hep list = [if x=="by" && elemAt(x+1)=="the" && elemAt(x+2)=="way" then "btw" else if x=="are" then "r" else x | x <- list] 

답변

5

당신은 아마 (알고리즘 냄새와 모든 것을 연결리스트에 색인) 문제 이런 식으로 해결하고 싶지 않아,하지만 당신이 정말로 인덱스를 필요로하는 경우 당신이 할 수있는

zip [0..] some_list 

그런 다음이 새 목록을 탐색하면 단일 요소 대신 쌍을 얻게됩니다. 각 쌍의 첫 번째 요소는 원하는 색인이되고 두 번째 요소는 항목이됩니다.

또는 다른 방법 (일부 색인에서 요소를 가져 오는 데 사용)에 어떤 기능을 사용할지 묻는 중입니까? 이를 위해 당신은 !!을 사용

some_list !! 5 
+0

감사합니다. 나는 제안을 감사하지만, 이것은 내가 뭘 찾고 있었는지, 어쨌든 감사합니다. – AnchovyLegend

+0

@MHZ 어떻게이게 당신이 찾고있는 것이 아닌가요? 세부. – singpolyma

+0

어째서? 설명. 당신은 정말로 그것이 내 문제에 어떻게 적용될 수 있는지 설명하지 못했고, 나는 당신에게 방금 내가 어떻게 하는지를 이미 알고있는 zip을 사용하는 방법을 보여 줬다 : D – AnchovyLegend

2

당신은 [0..]에 주어진 목록을 압축하는,하지만 관용적도 당신이 원하는 일을 할 수있는 효율적인 방법도 아니다 인덱스 목록 항목에 액세스하여 인덱스를 얻을 수 있습니다.

더 나은 해결책은 여러 요소를 한꺼번에 가져 와서 재귀 및 패턴 일치를 사용하여 목록을 반복하는 것입니다. sepp2k의 대답에 확장하려면

+0

이 경우 여러 요소를 한꺼번에 가져 오는 데 재귀가 어떻게 사용됩니까? – AnchovyLegend

+2

@MHZ 패턴 일치를 통해 목록의 첫 번째 요소가 찾고있는 단어 조합인지 여부를 확인한 다음 나머지 요소에 대해 반복합니다. – sepp2k

1

, 당신은 이런 식으로 뭔가를 시도 할 수 : 답장을

hep ("by" : "the" : "way" : rest) = "btw" : hep rest 
hep ("are" : rest)    = "r" : hep rest 
hep (yadda : rest)    = yadda : hep rest 
hep []       = [] 
+0

답장을 보내 주셔서 감사합니다. 이 구문에 익숙하지 않습니다. 코드가 무엇인지 설명해주십시오. – AnchovyLegend

+0

등호의 왼쪽에있는 모든 것은 [패턴 일치] (http://learnyouahaskell.com/syntax-in-functions)입니다. 오른쪽에 나는 [cons 연산자와 빈 목록] (http://learnyouahaskell.com/starting-out#an-intro-to-lists)을 사용하여 목록을 작성합니다. (죄송합니다. 원하는 페이지의 일부분을 정확히 링크 할 수 없으므로 조금 읽어야합니다.) – dave4420

관련 문제