大家好,简单的问题...
使用 XLISP 编写程序,但我似乎遇到了一个我似乎无法解决的简单基本问题:也许有人有一个快速修复。
我正在尝试编写一个 if 语句,该语句的 then 子句评估多个表单并返回最后一个的值。
例如:
(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";
}
}
(为糟糕的网络格式道歉。)
我遇到的问题是:
(
(SETPOS (LOOK DIRECTION ROOM))
(WHERE)
)
我只是想返回 WHERE 的评估,但我需要先执行 SETPOS 函数。XLISP 不喜欢多余的括号:如果我删除了外部集合,我的 WHERE 列表就变成了我的 else(我不想要那个)。如果我删除 SETPOS 和 WHERE 周围的集合,它会将 WHERE 视为 SETPOS 的参数;我也不想要那个。
那么,我如何简单地评估第一个,然后是第二个,然后返回最后一个评估的值?