2013-06-10 3 views
3

하스켈에서 서곡 기능의 길이 또는 (!!)를 사용하지 않고 목록의 일곱 번째 요소를 추출하는 방법. haskell의 목록에서 요소를 추출하는 함수를 작성하십시오.

다음

는 내가 지금까지 무엇을 가지고 :

element7 :: [a] -> Int -> a 
element7 [] _  = error "list too short" 
element7 (_:xs) 7 = element7 xs (k - 1) 
+1

실행중인 문제는 무엇입니까? – Swiss

+0

기본적으로 서곡 기능 (!!)을 다시 구현합니다. 이것이이 운동의 목표 인 것으로 보인다. –

답변

4

좋아이의 우리가

element :: [a] -> Int -> a 
element [] _  = error "list too short" 
element (_:xs) 7 = element7 xs (k - 1) 

이 무엇을 시작하자 우리는 (7)에있을 때 이제 마지막의 경우는,하지만 우리는있어 0보다 큰

element (x:xs) n | n > 0 = element xs (n-1) 

다음 숫자에 정말 관심이 n가 1이면, 우리는 단지 그가을 반환 광고

element (x:xs) n | n > 0 = element xs (n-1) 
       | n == 0= x 
       | otherwise = error "Index out of range" 

지금 우리는 단지 7 요소를 찾기위한 좋은 바로 가기를 만들 수 있습니다

seventh xs = element xs 6 
여기
+0

그래서'!!'대신에 함수를 다시 구현하고'element'라고 부릅니다 (그리고 1부터 시작하는 인덱스를 사용합니다). ;-) –

+0

"no prelude functions"제약 때문에 여기를 떠날 것입니다. 그리고 그것은 나를 괴롭 히고 있기 때문에 0으로 바꾸고 있습니다. – jozefg

+0

OP는 Prelude 함수를 사용하지 않고'Prelude functions length or (!!)'를 써서 Prelude 함수를 사용하는 것이'length'와 '!! '. –

7
seventh (one:two:three:four:five:six:seven:rest) = seven 
+2

'7' (_ : _ : _ : _ : _ : _ : _ : _ : _ : _ : _ : x : _) = x'과 같이 관심이없는 값을 표시하려면'_'을 사용하고, 오류 "목록이 너무 짧습니다". –

+0

나는 안전함을 거의 만들었지 만, 조금 우스꽝 스럽다. [a] -> 아마 a '. –

+2

완전히 명명 된 인수를 사용하는 것은 교육적이고 자기 다큐멘터리입니다. –

1

지정된 문자열의 처음 여섯 글자 방울 다른 버전의를 한 후 반환 나머지의 첫 글자 :

seventh = head . drop 6 
+1

전주곡 기능을 사용할 수 없다는 의문이 있습니다. 머리글과 드롭은 서곡에서 나온다 – Ankur

+0

@Ankur :'prelude functions length 또는 (!!)'을 사용하지 않고''length' 또는'!!' "를 제외한 서곡 기능을 사용할 수 있습니다. –

+2

Hmmm ... 영어 형식 시스템에서 형식 모호성처럼 보입니다.) – Ankur

0

이 해결책은 귀하의 시도에 근접하려고합니다 :

element :: [a] -> Int -> a 
element []  _ = error "list too short" 
element (x:_) 1 = x 
element (_:xs) i = element xs (k - 1) 
관련 문제