printing - 为什么我得到一个 (# # #) 结果?
问题描述
我尝试解决一项任务并尝试转换此参数:
(DEFPARAMETER AUSSAGEN '(
(THE OFFICE IS EAST OF THE HALLWAY)
(THE KITCHEN IS NORTH OF THE OFFICE)
(THE GARDEN IS WEST OF THE BEDROOM)
(THE OFFICE IS WEST OF THE GARDEN)
(THE BATHROOM IS NORTH OF THE GARDEN)
(THE BEDROOM IS SOUTH OF THE LAVATORY)
(THE BATHROOM IS WEST OF THE LAVATORY)
(THE KITCHEN IS WEST OF THE BATHROOM)
(THE KITCHEN IS EAST OF THE STUDIO)
(THE HALLWAY IS SOUTH OF THE STUDIO)))
到这个列表:
((HALLWAY EAST OFFICE) (OFFICE WEST HALLWAY)
(OFFICE NORTH KITCHEN) (KITCHEN SOUTH OFFICE)
(BEDROOM WEST GARDEN) (GARDEN EAST BEDROOM)
(GARDEN WEST OFFICE) (OFFICE EAST GARDEN)
(GARDEN NORTH BATHROOM) (BATHROOM SOUTH GARDEN)
(LAVATORY SOUTH BEDROOM) (BEDROOM NORTH LAVATORY)
(LAVATORY WEST BATHROOM) (BATHROOM EAST LAVATORY)
(BATHROOM WEST KITCHEN) (KITCHEN EAST BATHROOM)
(STUDIO EAST KITCHEN) (KITCHEN WEST STUDIO)
(STUDIO SOUTH HALLWAY) (HALLWAY NORTH STUDIO))
这是我的代码:
(DEFUN WB-GEN (AUSS)
(COND ((NULL AUSS))
(T (LIST (FirstList(REVERSE (CAR AUSS)))(SecondList (CAR AUSS))(WB-GEN (CDR AUSS)))))
)
(Defun FirstList (AUSS)
(LIST (CAR AUSS) (CADDDR AUSS) (CADDR(CDDDR AUSS)))
)
(DEFUN SecondList (AUSS)
(LIST (CADR AUSS) (let ((x(CADDDR AUSS)))(COND
((EQL x 'NORTH)'SOUTH)
((EQL x 'EAST)'WEST)
((EQL x 'SOUTH)'NORTH)
((EQL x 'WEST)'EAST))) (CAR (LAST AUSS)))
但我不知道为什么我会得到类似这个列表的结果 (# # #)
我的代码的完整结果:((HALLWAY EAST OFFICE) (OFFICE WEST HALLWAY) ((OFFICE NORTH KITCHEN) (KITCHEN SOUTH OFFICE) ((BEDROOM WEST GARDEN) (GARDEN EAST BEDROOM) (# # #))))
解决方案
有很多事情使您的代码难以阅读:
- 格式不正确
- cadddddddddr函数太多了
使用编辑器很容易修复格式。
摆脱cadddddddddr是由
- 使用诸如
first
,second
, ...之类的函数 loop
或通过在and中使用列表模式destructuring-bind
更轻松:
CL-USER 8 > (flet ((opposite (direction)
(case direction
(above 'below)
(below 'above))))
(loop for (nil what1 nil direction nil nil what2)
in '((the bath is above of the kitchen)
(the roof is above of the bath))
collect (list what2 direction what1)
collect (list what1 (opposite direction) what2)))
((KITCHEN ABOVE BATH)
(BATH BELOW KITCHEN)
(BATH ABOVE ROOF)
(ROOF BELOW BATH))
推荐阅读
- python - 我如何使用熊猫在一周中的几天中找到列的平均值 CVS
- python - 获取每个主题的最可能单词
- c - 获取两个给定字符之间的字符串
- javascript - 如何使用嵌套的动态路由生成静态页面
- python-3.x - 为什么这种方法不适用于这个问题?
- python - Python 速成课程,第 2 版。侧身射手。外星人继续向下移动,直到顶行撞到底部
- r - 删除行,直到列在多个数据帧上相同
- firebase - Flutter Firestore 离线数据库
- vsto - 选择具有相似格式 Office JS 的文本
- alsa - Raspberry Pi - 尝试通过声卡录制声音和播放时出现 ALSA 错误