问题描述
我有一些任务要求我在 LISP 中创建一个列表,所以我在网上使用剪辑,我将此代码用于创建我的列表并执行一些操作
(print (setq y '(2 3 4 5 6 7 8)))
(print (setq y (cons 1 y)))
(print (setq y (append y '(9))))
(print (car y))
(print (second y))
(print (third y))
(print (fourth y))
(print (fifth y))
(print (last y))
(print (second (reverse y)))
(print (setq y (reverse y)))
(print (setq y (cdr y)))
(print (setq y (reverse (cdr (reverse y)))))
(print (length y))
(print (member 9 y))
*** - EVAL: variable has no value
你能帮我理解什么是错的,该怎么做吗? 谢谢
解决方法
你应该问问自己为什么你的代码包含非打印字符。请再次尝试使用没有隐藏字符的程序。
> (length "(print (setq y '(2 3 4 5 6 7 8)))")
63
没有隐藏字符:
> (length "(print (setq y '(2 3 4 5 6 7 8)))")
33
正如 Bruno Haible 提到的,我们可以更清楚地看到:
[1]> (coerce "(print (setq y '(2 3 4 5 6 7 8)))" 'list)
(#\( #\POP_DIRECTIONAL_FORMATTING #\p #\r #\i #\n #\t #\LEFT-TO-RIGHT_OVERRIDE #\Space #\( #\POP_DIRECTIONAL_FORMATTING #\s #\e #\t #\q #\Space #\y #\LEFT-TO-RIGHT_OVERRIDE #\Space #\' #\( #\POP_DIRECTIONAL_FORMATTING #\2
#\LEFT-TO-RIGHT_OVERRIDE #\Space #\POP_DIRECTIONAL_FORMATTING #\3 #\LEFT-TO-RIGHT_OVERRIDE #\Space #\POP_DIRECTIONAL_FORMATTING #\4 #\LEFT-TO-RIGHT_OVERRIDE #\Space #\POP_DIRECTIONAL_FORMATTING #\5 #\LEFT-TO-RIGHT_OVERRIDE
#\Space #\POP_DIRECTIONAL_FORMATTING #\6 #\LEFT-TO-RIGHT_OVERRIDE #\Space #\POP_DIRECTIONAL_FORMATTING #\7 #\LEFT-TO-RIGHT_OVERRIDE #\Space #\POP_DIRECTIONAL_FORMATTING #\8 #\LEFT-TO-RIGHT_OVERRIDE #\) #\) #\)
#\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING
#\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING #\POP_DIRECTIONAL_FORMATTING)