在Lisp中循环遍历一个字符串,以获取字母字符或空格。

7
我正在寻找如何在LISP中循环遍历字符串以检查字母字符或空格。像"Coffee is Friend"这样的句子是我想要检查的有效内容。但是当我执行(every #'alpha-char-p "coffee is best")时,由于空格不是技术上的字母字符,它会失败。有什么建议吗?
谢谢!
3个回答

8

只需测试字母或空格:

 (every 
   (lambda (c) (or (alpha-char-p c) (char= c #\Space))) 
   "coffee is best")

every 函数的第一个参数是一个函数,该函数必须对第二个参数中的每个元素返回非 nil 值。


8

使用LOOP

CL-USER > (loop for c across "tea is best"
                always (or (alpha-char-p c)
                           (char= c #\space)))
T

4

根据任务的复杂程度,您可以考虑使用正则表达式。如果您加载 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)

上述表单在需要组合正则表达式时非常有用,因为它比连接和转义字符串要简单得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接