2.1 Anchor 에서 '행마식'(move 등)이 칸을 활성화하고 '기준 위치'를 옮긴다는 것을 배웠습니다.
하지만 '행마식'은 한 가지 일을 더 합니다. 바로 실행 후 자신의 상태를 보고합니다.
true): 계획대로 칸을 활성화(혹은 이동)했고, 다음 식을 계속 진행해도 좋습니다.false): 벽, 아군, 또는 규칙(예: move가 적을 만남)에 막혀 아무것도 못 했습니다. 멈춰야 합니다.하나의 식 연쇄 안에서, 일반 식이 false 값을 보고받으면, 해당 식 연쇄의 실행이 중단됩니다.
(일반 식이란 jmp, not 등 특별한 제어식을 제외한 대부분의 식을 의미합니다.)
튜토리얼에서 take-move(1, 0) repeat(1);이 벽이나 기물을 만나면 "알아서" 멈췄던 이유가 바로 이 규칙 때문입니다.
take-move 식은 이렇게 "상태"를 보고합니다.
take-move는 적을 잡는 칸(마지막 칸)을 활성화한 뒤 false를 보고하여 "임무 완수, 연쇄 중단"을 알립니다.
| take-move가 만난 대상 | 칸 활성화 | 위치 이동 | 값 |
|---|---|---|---|
| 빈 칸 | 함 | 함 | true |
| 적 기물 | 함 | 함 | false |
| 아군/벽 | 안 함 | 안 함 | false |
take-move(1, 0) repeat(1);을 다시 살펴보겠습니다.
기물 ♟️은 [c2]에, 아군 ⚪은 [f2]에 있습니다.
| ♟️ | ⚪️ | |||
[c2] -> [d2] (빈 칸)take-move(1, 0) 실행: [d2] 활성화 🔵, 🌟 [d2]로 이동.
| ♟️ | 🔵🌟 | ⚪️ | ||