使用列表项中的空格的Emacs lisp列表处理

mik*_*keb 0 emacs recursion elisp

我有一个emacs lisp列表,上面写着:

(setq states '(
              Nebraska
              NE
              Nevada
              NV
              New Hampshire
              NH
              New Jersey)
)
Run Code Online (Sandbox Code Playgroud)

我创建了一个只打印状态名称的函数,而不是缩写:

(defun names (los)
  "Get names from list of states"
  (when los
    (print (car los))
        (names (cdr(cdr los)))
    )
  )
Run Code Online (Sandbox Code Playgroud)

我把这个函数称为:(names states)和get

Nebraska
Nevada
New
NH
Jersey
Run Code Online (Sandbox Code Playgroud)

如何告诉我的lisp函数(或设置我的列表),以便单词中的空格不是分隔符,只有换行符是分隔符?

谢谢

Dan*_*Dan 9

Elisp将空格视为分隔符.要回答当前的问题,你可以像帕特里克在他的评论中所建议的那样做,并将字符串放在引号中.

更广泛地说,您应该考虑使用关联列表或属性列表,因为它们是为您考虑的任务而设计的.阅读assocplist-get了解更多信息.例子:

alist版本看起来像:

(setq states-alist '((NH "New Hampshire")
                     (NE "Nebraska")
                     (NV "Nevada")))
(cadr (assoc 'NH states-alist))
Run Code Online (Sandbox Code Playgroud)

plist版本看起来像:

(setq states-plist '(NH "New Hampshire"
                     NE "Nebraska"  
                     NV "Nevada"))
(plist-get states-plist 'NH)
Run Code Online (Sandbox Code Playgroud)