Lisp로 주문 외기 - 7 -

2009-02-04

라이센스 - The GNU Free Documentation License 원저자 - Conrad Barski, M.D. 원본 출처 - http://lisperati.com/casting.html

게임 세계를 돌아다녀 보기

좋아요, 이제 세계를 볼 수 있습니다. 그러니 돌아다닐 수 있도록 해 줄 코드를 짜 볼까요. walk-direction(함수식 스타일은 아니지만) 함수가 방향을 잡고 거기로 갈 수 있도록 해 줄겁니다. (defun walk-direction (direction) (let ((next (assoc direction (cddr (assoc location map))))) (cond (next (setf location (third next)) (look)) (t ‘(you cant go that way.)))))

let이라는 특별한 명령이 플레이어가 가기를 원하는 방향을 경로 묘사 함수에 전달하게 할 지역변수 next을 허가합니다. cdr은 목록에서 첫 번째 항목을 그냥 잘라냅니다. 만일 사용자가 부적합한 방향을 입력했다면, next 변수는 nil이 됩니다. cond 명령은 Lisp에서 if-then 명령의 연쇄와 비슷합니다. 각 줄에는 cond가 검사할 값과 할 행동이 있습니다. 이 경우, next location이 nil이 아니라면, setf명령으로 플레이어의 위치는 새 방향을 묘사하고 있는 기호 목록의 목록의 세 번째 항목이 됩니다. 그 다음 사용자에게 새 장소를 보여줍니다. next location 이 nil이라면, 다음줄로 떨어져 내려서, 사용자에게 경고합니다. 해 봅시다. (walk-direction ‘west) ==> (YOU ARE IN A BEAUTIFUL GARDEN. THERE IS A WELL IN FRONT OF YOU. THERE IS A DOOR GOING EAST FROM HERE. YOU SEE A CHAIN ON THE FLOOR. YOU SEE A FROG ON THE FLOOR.) 이제, 플레이어가 치기 편한 look 명령어를 만들어서 묘사 함수를 간략화 할 수 있게 되었습니다. 비슷하게, walk-direction명령도 좀 조정하면 좋을 겁니다. 그럼 플레이어가 따옴표를 치느라 고생할 필요가 없겠죠. 하지만, 배운 대로, 컴파일러가 코드 모드로 형식을 읽기 때문에, 코드 모드에서는 작은 따옴표로 그러지 말라고 하지 않으면 전부 다 인수로 읽힐 겁니다. 컴파일러에게 작은 따옴표 없이도 west 는 그냥 데이터 조각이라고 말해줄 수 있는 방법이 있을까요?

이것이 공부다 真っ赤な空を見ただろうか - BUMP OF CHICKEN
comments powered by Disqus