我有一个emacs lisp列表,上面写着:
(setq states '(
Nebraska
NE
Nevada
NV
New Hampshire
NH
New Jersey)
)
我创建了一个只打印状态名称的函数,而不是缩写:
(defun names (los)
"Get names from list of states"
(when los
(print (car los))
(names (cdr(cdr los)))
)
)
我将该函数称为:(names states)
并获取
Nebraska
Nevada
New
NH
Jersey
如何告诉我的lisp函数(或设置我的列表),以便单词中的空格不是分隔符,只有换行符是分隔符?
由于
答案 0 :(得分:9)
Elisp将空格视为分隔符。要回答这个直接的问题,你可以像帕特里克在评论中所说的那样做,并将字符串放在引号中。
更广泛地说,您应该考虑使用关联列表或属性列表,因为它们是为您考虑的任务而设计的。请阅读assoc
和plist-get
以获取更多信息。例子:
alist版本看起来像:
(setq states-alist '((NH "New Hampshire")
(NE "Nebraska")
(NV "Nevada")))
(cadr (assoc 'NH states-alist))
plist版本看起来像:
(setq states-plist '(NH "New Hampshire"
NE "Nebraska"
NV "Nevada"))
(plist-get states-plist 'NH)
答案 1 :(得分:3)
作为Patrick Collins noted in a comment,您应该将列表项置于双引号内,将其转换为字符串:
(setq states '(
"Nebraska"
"NE"
"Nevada"
"NV"
"New Hampshire"
"NH"
"New Jersey")
)
如果你真的想要,你可以通过使用反斜杠转义空格,将它们保存为符号(就像现在一样),例如: New\ Hampshire
。是否使用符号或字符串取决于您要使用它们的目的。