我正在寻找如何在LISP中循环遍历字符串以检查字母字符或空格。像"Coffee is Friend"这样的句子是我想要检查的有效内容。但是当我执行(every #'alpha-char-p "coffee is best")时,由于空格不是技术上的字母字符,它会失败。有什么建议吗?
谢谢!
谢谢!
只需测试字母或空格:
(every
(lambda (c) (or (alpha-char-p c) (char= c #\Space)))
"coffee is best")
every
函数的第一个参数是一个函数,该函数必须对第二个参数中的每个元素返回非 nil 值。
使用LOOP
:
CL-USER > (loop for c across "tea is best"
always (or (alpha-char-p c)
(char= c #\space)))
T
根据任务的复杂程度,您可以考虑使用正则表达式。如果您加载 CL-PPCRE,您可以编写以下代码:
(ppcre:scan "^[ a-zA-Z]*$" "Coffee is Friend")
该库接受的正则表达式是类似 Perl 的字符串或解析树。例如,调用 (ppcre:parse-string "^[ a-zA-Z]*$")
将返回:
(:SEQUENCE
:START-ANCHOR
(:GREEDY-REPETITION 0
NIL
(:CHAR-CLASS #\
(:RANGE #\a #\z)
(:RANGE #\A #\Z)))
:END-ANCHOR)