# 세상 속 둘러보기 (Walking Around in our World )

Ok, now that we can see our world, let's write some code that lets us walk around in it. The function walk-direction (not in the functional style) takes a direction and lets us walk there:

이제 세상을 볼 수 있게 되었으니 그 안에서 걸어 다닐 수 있는 코드를 작성해 보겠습니다. (함수형 스타일이 아닌) walk-direction 함수는 방향을 지정하고 그 방향으로 걸어갈 수 있게 해줍니다:

(defn walk-direction [direction]  
  (let [next (first (filter (fn [x] (= direction (first x)))  
                            (rest (location game-map))))]
    (cond next (do (def location (nth next 2)) (look))  
          :else '(you cannot go that way -))))

The special command let allows us to create the local variable next, which we set to the path descriptor for the direction the player wants to walk in - rest just chops the first item off of a list. If the user types in a bogus direction, next will be (). The cond command is like a chain of if-then commands in Lisp: Each row in a cond has a value to check and an action to do. In this case, if the next location is not nil, it will def the player's location to the third item (the one at index 2) in the path descriptor, which holds the symbol describing the new direction, then gives the user a look of the new place. If the next location is nil, it falls through to the next line and admonishes the user. Let's try it:

특수 명령 let을 사용하면 플레이어가 걸어가고자 하는 방향의 경로 설명자로 설정한 다음 로컬 변수를 만들 수 있습니다. 나머지는 목록에서 첫 번째 항목을 잘라냅니다. 사용자가 엉뚱한 방향을 입력하면 다음 변수는 ()가 됩니다. cond 명령은 Lisp의 if-then 명령 체인과 비슷합니다: cond의 각 행에는 확인해야 할 값과 수행해야 할 작업이 있습니다. 이 경우 다음 위치가 nil이 아닌 경우 플레이어의 위치를 경로 설명자의 세 번째 항목(인덱스 2에 있는 항목)으로 정의하고, 이 항목에는 새 방향을 설명하는 기호가 들어 있으며, 사용자에게 새 장소를 표시합니다. 다음 위치가 0이면 다음 줄로 넘어가 사용자에게 경고합니다. 해보겠습니다:

(walk-direction 'west)

user=> (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 frog on the floor -
you see a chain on the floor -)

Little Wizard In Clojure, nil and the empty list ("()") are not the same, this is different from Common Lisp.
작은 마법사 클로저에서는 nil과 빈 목록("()")이 동일하지 않으며, 이는 Common Lisp와 다릅니다.

Now, we were able to simplify our description functions by creating a look command that is easy for our player to type. Similarly, it would be nice to adjust the walk-direction command so that it doesn't have an annoying quote mark in the command that the player has to type in. But, as we have learned, when the compiler reads a form in Code Mode, it will read all its parameters in Code Mode, unless a quote tells it not to. Is there anything we can do to tell the compiler that west is just a piece of data without the quote?

이제 플레이어가 입력하기 쉬운 보기 명령을 만들어 설명 기능을 단순화할 수 있었습니다. 마찬가지로, 플레이어가 입력해야 하는 명령에 성가신 따옴표가 없도록 walk-direction 명령을 조정하면 좋을 것입니다. 하지만 컴파일러는 코드 모드에서 양식을 읽을 때 따옴표로 표시하지 않는 한 코드 모드에서 모든 매개 변수를 읽습니다. 컴파일러에게 west가 따옴표가 없는 데이터 조각임을 알리기 위해 할 수 있는 방법이 있을까요?