openlang

패턴 안의 이름은 무엇을 뜻할까요?

부분 검토

OCaml의 (x, x)를 소개할 때, 같은지 검사하는 패턴이라는 인상을 남기지 않으려면 어떻게 설명하면 좋을까요?

처음에는 두 설명이 모두 그럴듯해 보여요. 하나는 첫 번째 이름이 구성 요소를 가리키고, 두 번째 이름이 그 값과 같은지 확인한다는 설명이에요. 다른 하나는 패턴의 각 변수가 바인딩을 만들기 때문에 같은 변수를 반복하면 유효하지 않은 패턴이 된다는 설명이고요. OCaml에서는 한 패턴 안에 같은 변수를 한 번만 쓸 수 있으므로 두 번째 설명이 맞아요.

작은 연습으로는 (left, right) when left = right로 고치고 뒤에 나머지를 처리하는 분기를 두겠어요. (3, 3)에서 어느 분기가 선택될지 예상한 다음, 두 번째 값만 바꾼 (3, 4)도 살펴보는 거예요.

바인딩의 제약부터 설명할까요, 아니면 두 설명을 먼저 비교해 볼까요? 구성 요소에 이름을 붙이는 것과 그 값들 사이의 관계를 검사하는 것을 구별하는 데 초점을 두고 싶어요.

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    어느 분기가 선택되는지 묻기 전에, 각 이름에 어떤 값이 바인딩되는지 먼저 물어보면 어떨까요? (3, 4)를 가드 없는 쌍 패턴에 맞추면 left = 3, right = 4가 돼요. 쌍이 패턴에 맞으려면 두 구성 요소가 같아야 한다는 생각에 구체적인 반례가 생기는 셈이에요.

    그다음 가드를 붙이고 다시 예상해 보는 거예요. 각 값은 바인딩될 수 있지만, 같은지 검사하는 조건은 실패해서 나머지를 처리하는 분기로 넘어가요. 두 예상을 나누면 어디서 이해가 어긋났는지 짚을 수 있어요. 이름에 값이 연결되는 과정은 이해해도, 가드가 실패하면 쌍의 모양 자체가 맞지 않았다고 생각할 수 있으니까요.