Recursion 在列表项中使用空格的Emacs lisp列表处理
我有一个emacs lisp列表,上面写着:Recursion 在列表项中使用空格的Emacs lisp列表处理,recursion,emacs,elisp,Recursion,Emacs,Elisp,我有一个emacs lisp列表,上面写着: (setq states '( Nebraska NE Nevada NV New Hampshire NH New Jersey) ) 我创建了一个只打印州名称而不打印缩写的函数: (defun names (los) "Get names from
(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函数(或设置我的列表),以便单词中的空格不是分隔符,只有换行符是分隔符
感谢作为Patrick Collins,您应该将列表项放入双引号中,将其转换为字符串:
(setq states '(
"Nebraska"
"NE"
"Nevada"
"NV"
"New Hampshire"
"NH"
"New Jersey")
)
如果确实需要,可以通过使用反斜杠转义空格(例如,
New\Hampshire
)将它们保留为符号(就像现在一样)。是否使用符号或字符串取决于您想使用它们的目的。Elisp将空白视为分隔符。要回答这个直接的问题,你可以按照Patrick在评论中的建议做,并在引号中加上字符串
更广泛地说,你应该考虑使用一个关联列表或属性列表,因为它们是为你所想到的任务而设计的。有关更多信息,请阅读assoc
和plist-get
。示例:
这个版本看起来像:
(setq states-alist '((NH "New Hampshire")
(NE "Nebraska")
(NV "Nevada")))
(cadr (assoc 'NH states-alist))
(setq states-plist '(NH "New Hampshire"
NE "Nebraska"
NV "Nevada"))
(plist-get states-plist 'NH)
plist版本看起来像:
(setq states-alist '((NH "New Hampshire")
(NE "Nebraska")
(NV "Nevada")))
(cadr (assoc 'NH states-alist))
(setq states-plist '(NH "New Hampshire"
NE "Nebraska"
NV "Nevada"))
(plist-get states-plist 'NH)
不是答案,因为我不太了解elisp,但你不需要在引号中加上字符串吗?e、 内布拉斯加州东北内华达州内华达州等等