2011-10-29 1 views
1

목록을 통과하는 쉬운 방법은 무엇입니까? 내가 목록을 정렬 할 필요없이 그것을 할 수있는 방법이 나는 그것이 B목록을 통과하는 미란다가

["A","A","A","A","B","A","A","A","A"] 

이었다 모르고 목록에 5 데이터에 액세스하고 싶었 말할 수?

답변

4

미란다는 잘 모르겠지만 기능은 skiptake입니다.

건너 뛰기 기능을 사용하지 않고 5 번째 요소를 처리 할 수 ​​있습니다. 건너 뛰기 및 가져 오기를 사용할 수없는 경우 직접 만들 수 있습니다.

스킵 : Y가리스트의 항목 수보다 큰 경우에서의 원소 (Y)의 개수를 건너 뛰고, 그것은 빈 목록을 반환 인출이

: A의 요소의 제 Y 수가 얻어 목록에서 y가 목록의 항목 수보다 클 경우 전체 목록이 반환됩니다.

skip y []  = [] 
skip 0 xs  = xs 
skip y (x:xs) = skip xs (y-1) 

take y []  = [] 
take 0 xs  = [] 
take y (x:xs) = x : take (y-1) xs 

elementAt x xs = take 1 (skip x xs) 
2

나열 유도 데이터 유형입니다. 즉, 목록에 정의 된 함수 (예 : 번째 요소 인 요소)는 재귀에 의해 정의됩니다. 찾으려는 데이터 구조는 일정한 시간 조회를 허용하는 배열 인 것으로 보입니다. 목록의 색인에서 요소를 찾는 가장 쉬운 방법은 바로 다음과 같습니다.

lookup :: Int -> [a] -> Maybe [a] 
lookup n []  = Nothing 
lookup 0 (x:xs) = Just x 
lookup n (x:xs) = lookup (n - 1) xs 
2

이렇게하는 또 다른 방법은! 운영자.

plist = [A,A,A,A,B,A,A,A,A] 

다음 plist!4을 실행하는 것은 당신에게 그 목록의 5 요소를 줄 것이다 :의 사용하면 다음과 같은 목록에 정의 된 데이터와 프로그램을 가지고 있다고 가정 해 봅시다. (4가 0,1,2,3,4를 포함하면 5 단위 임)

그래서 은 B를 반환합니다.

관련 문제