Recursion 在列表项中使用空格的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

我有一个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函数(或设置我的列表),以便单词中的空格不是分隔符,只有换行符是分隔符

感谢作为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、 内布拉斯加州东北内华达州内华达州等等