我在使用Lisp时遇到了两个问题,但我找不到任何教程或网站来解释这些问题。如何将字符串拆分为单个字符?以及如何将这些字符更改为它们对应的ASCII值?如果有人知道任何解释这些问题的网站或教程视频,那将不胜感激。
我在使用Lisp时遇到了两个问题,但我找不到任何教程或网站来解释这些问题。如何将字符串拆分为单个字符?以及如何将这些字符更改为它们对应的ASCII值?如果有人知道任何解释这些问题的网站或教程视频,那将不胜感激。
CL-USER 87 > (coerce "abc" 'list)
(#\a #\b #\c)
CL-USER 88 > (map 'list #'char-code "abc")
(97 98 99)
split-string
函数基于正则表达式分隔符将字符串拆分为子字符串。每个分隔符的匹配定义了一个拆分点;在拆分点之间的子字符串被组成一个列表并返回。如果省略参数 omit-nulls 或其值为 nil,则结果包含空字符串,当有两个连续的分隔符匹配或者匹配位于字符串的开头或结尾时。如果参数 omit-nulls 的值为 t,则这些空字符串将从结果中省略。如果参数 separators 的值为 nil 或者省略,则默认值为 split-string-default-separators。
作为特殊情况,当参数 separators 的值为 nil
或者省略时,空字符串总是会从结果中省略。因此:
(split-string " two words ") -> ("two" "words")
The result is not ("" "two" "words" ""), which would rarely be useful. If you need
such a result, use an explicit value for separators:
(split-string " two words " split-string-default-separators) -> ("" "two" "words" "")
More examples:
(split-string "Soup is good food" "o") -> ("S" "up is g" "" "d f" "" "d")
(split-string "Soup is good food" "o" t) -> ("S" "up is g" "d f" "d")
(split-string "Soup is good food" "o+") -> ("S" "up is g" "d f" "d")
你也可以使用elt或aref从字符串中获取特定字符。
深入介绍Common Lisp的最佳网站之一是Practical Common Lisp book(链接到数字、字符和字符串部分)的网站。整本书都可以免费在线阅读。去看看吧。
length
函数来获取字符串的长度。除了适用于任何序列的 elt
和适用于任何数组的 aref
,你还可以使用仅适用于字符串的函数 char
。 - Rörd