String 检查字符串中是否有小写字符
我需要返回真或假String 检查字符串中是否有小写字符,string,common-lisp,lowercase,String,Common Lisp,Lowercase,我需要返回真或假 True如果至少有一个小写字符 False无小写字符 我试着用loop和lambda函数来实现它 像这样的 (defun check-lower-word (word) (loop for ch across word ((lambda (c) (if (lower-case-p c) return T) ch) ) ) 如果从来没有工作过,我就需要False“如果”我是按照 (defun check-lower-word
如果至少有一个小写字符True
无小写字符False
(defun check-lower-word (word)
(loop
for ch across word
((lambda (c) (if (lower-case-p c) return T) ch)
)
)
如果从来没有工作过,我就需要False“如果”我是按照
(defun check-lower-word (word)
(block outer
(loop
for ch across word do
(if (lower-case-p ch) (return-from outer T))
)
)
)
通过预定义的函数,您可以使用
一些():
对于循环
语法(),也有类似的操作:
最后,请注意,loop
在迭代终止而不产生结果时总是返回nil
,因此loop
的不那么简洁的用法可能是:
CL-USER> (loop for x across "AbC" if (lower-case-p x) do (return t))
T
CL-USER> (loop for x across "ABC" if (lower-case-p x) do (return t))
NIL
代码错误
您的代码与括号不平衡,结尾缺少一个右括号:
(defun check-lower-word (word)
(loop
for ch across word
((lambda (c) (if (lower-case-p c) return T) ch)
)
) ; <-- closes "(loop"
使用中间文字lambda在这里不会带来任何结果
同样,上面的内容是:如果ch
是小写的,则if的值是绑定到return
变量的值,否则它是T。您确实缺少(return T)
周围的参数。“单臂”的(如果是tx)
最好写成(如果是tx)
另一种方法
您已经有了some
和loop
的示例,您还可以使用短路映射
:
(defun check-lower-word (word)
(block nil
(map ()
(lambda (c)
(when (lower-case-p c)
(return t)))
word)))
使用nil
作为第一个参数调用表示对序列进行迭代以获得效果并返回nil。对于序列中的每个字符(列表或向量),当字符为小写时,返回T。返回
在NIL块之前退出迭代。欢迎使用SO!当Renzo完全回答了你的问题时,你应该考虑读一些关于CL和更重要的CL.的基本语句,如果你使用<代码>从返回,无论如何,你可以使用由函数本身建立和命名的隐式块:<代码>(从校验下词T返回)< /代码>。
(defun check-lower-word (word)
(loop
for ch across word
((lambda (c) (if (lower-case-p c) return T) ch)
)
) ; <-- closes "(loop"
(if (lower-case-p ch) return T)
(defun check-lower-word (word)
(block nil
(map ()
(lambda (c)
(when (lower-case-p c)
(return t)))
word)))