openlang

3 + 4 * 2가 14라는 건 쉬운 쪽이다

Smalltalk을 처음 배우는 사람은 누구나 일찍 3 + 4 * 2를 만나고 그게 14라는 말을 들어요. 이항 메시지는 산술 우선순위 없이 왼쪽에서 오른쪽으로 가니까요. 이 부분은 한 번 보여 주면 기억에 남아요(정말 그냥 메시지 두 번이에요. 3에 +, 그다음 돌아온 값에 *. 숫자라고 특별 대우가 없는데, 사람들은 그걸 신선해하거나 살짝 모욕적으로 느껴요).

훨씬 오래 걸려 넘어지는 건 규칙의 나머지 절반이에요. 단항 메시지가 이항보다 먼저 묶이고, 이항이 키워드보다 먼저 묶여요. 그래서 2 + 3 squared는 11이에요. 무엇보다 먼저 squared가 3에 가니까요. 2 raisedTo: 3 + 1은 16이고요. 키워드 메시지는 인자 계산이 끝나기를 기다리니까요.

산술을 유명한 기벽으로 맨 앞에 내세우는 대신, 세 단계를 먼저 가르치고 산술은 이항 규칙의 예로만 쓰고 싶은 마음이 있어요. 그게 더 나은지는 아직 모르겠어요. 사람들이 그걸 별난 점이라고 부르지 않게만 돼도 그게 어디예요.

이어지는 대화 1

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

    규칙을 먼저 두는 순서에 찬성합니다. 다만 규칙도 예제만큼 정확하게 적어야 합니다. 세 단계가 있고, 단항, 이항, 키워드 순이며, 같은 단계 안에서는 왼쪽에서 오른쪽입니다. 그런 다음 예제 하나가 조항 하나를 시험합니다. 2 + 3 squared는 단항이 이항보다 앞선다는 것을, 3 + 4 * 2는 왼쪽에서 오른쪽이라는 것을, 2 raisedTo: 3 + 1은 이항이 키워드보다 앞선다는 것을 확인합니다. 세 개를 모두 맞힌 학습자는 규칙을 가진 것이고, 하나를 틀린 학습자는 어느 조항이 빠졌는지 알려 줍니다. SQL을 읽는 사람들은 쉬운 청중일 수 있습니다. a OR b AND c가 a OR (b AND c)라는 것은 대부분 한 번쯤 찾아봐야 했던 우선순위 표이기 때문입니다.

같은 질문의 다른 갈래

  1. round(2.5)가 2라는 걸 학습자들은 안 믿는다

    학습자들은 자꾸 round(2.5)가 3일 거라고 짐작하는데, 제가 주로 쓰는 두 언어는 다 2라고 해요. Python은 정수 2를, Julia는 2.0을 줘요. 둘 다 동점을 짝수 쪽 이웃으로 보내서 round(0.5)는…

  2. 옛 CoffeeScript를 손으로 옮기는 JavaScript 연습

    유행은 지났지만 생각보다 훨씬 잘 먹히는 연습이 있습니다. 배우는 사람에게 작고 오래된 CoffeeScript 파일을 하나 주고, 컴파일러를 돌리지 말고 현대 JavaScript로 다시 쓰게 하는 것입니다. 거의 모든 설탕…

  3. (x, x)는 두 값이 같다는 뜻이 아니다

    OCaml의 (x, x)를 "두 값이 같다"로 읽는 학습자가 계속 나와요. 그런 뜻도 아니고, 애초에 허용되지도 않아요. 처음 배우는 사람은 대개 두 설명 중 하나를 떠올려요. 하나는 앞의 x가 구성 요소에 이름을 붙이고 뒤…

    답글 5ocaml