2011-05-08 2 views
5

하스켈에서 '중첩 된' 패턴은 무엇입니까? 나는 그 용어를 어디에서나 들었지만 그것이 실제로 무엇을 의미하는지 확신 할 수 없다. 어떻게 정의하겠습니까? 어떤예요?Haskell에서 중첩 패턴이란 무엇입니까?

미리 감사드립니다.

추가하려면 편집 :

은 "패턴이 예에서와 같이 리터럴 및 중첩 패턴을 포함 할 수 있습니다 (요청시 교과서에서 인용) :

addPair (0,y) = y 

addPair (x,y) = x+y 


shift :: ((Int,Int),Int) -> (Int,(Int,Int)) 

shift ((x,y),z) = (x,(y,z)) 
+0

하스켈에서 많이 사용되는 재귀 논리와 관련이있을 것으로 생각합니다. – Pieter

+0

@Pieter는 그보다 더 간단해야합니다. – maclunian

+2

듣는 것에 대한 사례를 인용해도 되겠습니까? 내 지식으로는이 용어에 정식 의미가 붙어 있지 않다. – Ingo

답변

6

이 당신이 패턴과 일치 할 수 있음을 의미 그것은 또 다른 패턴이 포함 된 예에서, (x, y) 패턴이 큰 ((x, y), z) 패턴 내부에 포함되어 중첩는 다음의 모든 합법적 예를 들어, 임의의 깊이가 될 수 있습니다..

f ((x2,x0),x1)     =() 
f' (((x3, x2),x0),x1)   =() 
f'' ((((x4,x3), x2),x0),x1)  =() 
f''' (((((x5,x4),x3), x2),x0),x1) =() 

등등. 이것은 또한 목록 및 대수 데이터 유형 확장 : 여기

f [[x]] =() 
f' [[[x]]] =() 

g (Just (Just x))  =() 
g' (Just (Just (Just x))) =() 

, f가리스트의리스트를 얻어, f' 나열리스트의리스트를 얻어, g 다른 Maybe (즉, Maybe (Maybe a)이다)를 포함하는 Maybe 걸리고, g' 내가 틀렸을 수도 있지만, 난 단지 "중첩되지"패턴이 addPair x = x 또는 addPair x y = x+y 같은 것 컨텍스트에서 수락 할 수있는 Maybe (Maybe (Maybe a))

+0

만약 당신이 plz 수 정교한? – maclunian

+0

아, 이제 알기 시작하겠습니다.) – maclunian

+0

중첩이 일반적으로 어휘 스코프와 관련되어 있기 때문에 불행한 문구 인 IMHO에 유의하십시오. 패턴의 깊이가 "중첩 된"상관없이 패턴의 변수는 선형이어야합니다. 그러므로 * sub-pattern *이라는 용어는 (* 하위 표현식 *과 유사하게) 더 좋을 수 있습니다. – Ingo

0

걸립니다. 당신의 주장은 내가 생각하기에 패턴입니다. 대부분의 프로그래밍 언어에서이 코드는 단순한 x y입니다. 이 경우에는 인수 패턴이 더 복잡 할 수 있습니다. (x, y) 또는 ((x, y), z).

중첩은 "튜플 또는 목록"또는 "비평면 튜플 또는 목록"을 의미합니다.