안녕 얘들 아, 간단한 질문 ...양식 내 연속적인 통화/평가?
XLISP를 사용하여 프로그램을 작성했지만 간단한 근본적인 문제가 발생하여 작동하지 않는 것처럼 보였습니다. .
나는 then 절이 여러 양식을 평가하고 마지막 값을 리턴하는 if 문을 작성하려고합니다. 예에서
:
(setq POSITION 'DINING-ROOM)
(defun LOOK (DIRECTION ROOM) ...)
(defun SETPOS (ROOM) ...)
(defun WHERE() ...)
(defun MOVE (DIRECTION)
(if (not(equal nil (LOOK DIRECTION POSITION))) ; If there is a room in that direction
(; Then-block: Go to that room. Return where you are.
(SETPOS (LOOK DIRECTION ROOM))
(WHERE)
)
(; Else-block: Return error
(list 'CANT 'GO 'THERE)
)
)
의도 동등한 논리는 다음
: 는function Move (Direction)
{
if(Look(Direction, Room) != null)
{
SetPos(Look(Direction,Room));
return Where();
}
else
{
return "Can't go there";
}
}
(. 사과 가난한 웹 서식)
I 가지는 문제는 함께
(
(SETPOS (LOOK DIRECTION ROOM))
(WHERE)
)
단순히 WHERE의 평가를 반환하고 싶지만 SETPOS 함수를 먼저 실행해야합니다. XLISP는 여분의 괄호를 좋아하지 않습니다. 외부 세트를 제거하면 WHERE 목록이 다른 것이됩니다 (나는 원하지 않습니다). SETPOS와 WHERE 주변의 세트를 제거하면 SETPOS에 대한 인수처럼 WHERE가 처리됩니다. 나는 또한 그것을 원하지 않는다.
그래서 첫 번째 평가 후 두 번째 평가를하고 마지막으로 평가 한 결과를 어떻게 반환합니까?
변경 :
(
(SETPOS (LOOK DIRECTION ROOM))
(WHERE)
)
사람 :
(let()
(SETPOS (LOOK DIRECTION ROOM))
(WHERE)
)
두 폼을 실행
및
비슷한 질문이 여기에 있습니다 : http://stackoverflow.com/questions/2852249/can-you-execute-multiple-statements-in-with-a-if-statement –