Lisp 循环遍历字符串
我似乎被困在尝试循环字符串以查找其他字符串中没有的字符。该程序的目标是循环遍历一个字符串,并记录不在另一个字符串中的字符。其他字符串中不包含的字符将在所有检查完成后打印出来。它们可能不会重复,因此我尝试使用三个循环 我正在尝试调试下面的代码,因为我最终必须检查这两个字符串是否相互匹配,并且我希望手动执行此操作,以获取相关技术Lisp 循环遍历字符串,lisp,common-lisp,Lisp,Common Lisp,我似乎被困在尝试循环字符串以查找其他字符串中没有的字符。该程序的目标是循环遍历一个字符串,并记录不在另一个字符串中的字符。其他字符串中不包含的字符将在所有检查完成后打印出来。它们可能不会重复,因此我尝试使用三个循环 我正在尝试调试下面的代码,因为我最终必须检查这两个字符串是否相互匹配,并且我希望手动执行此操作,以获取相关技术 CG-USER(258): (defun stringprod (string1 string2) (let ((newString nil)) (let ((lette
CG-USER(258): (defun stringprod (string1 string2)
(let ((newString nil))
(let ((letterSearchOn nil))
(loop for i from 0 below (length string1)
always
(setf (letterSearchOn (char string1 i))
(loop for j from 0 below (length string2)
(for ch = (char string2 j)
(/when (find ch letterSearchOn :test #'equal)
(append newString ch)))))))))
STRINGPROD
CG-USER(260): (stringprod "abc" "abc")
Error: (FOR CH = (CHAR STRING2 J)
(/WHEN (FIND CH LETTERSEARCHON :TEST #'EQUAL)
(APPEND NEWSTRING CH))) found where LOOP keyword expected.
Current LOOP context: FOR J FROM 0 BELOW (LENGTH STRING2)
(FOR CH = (CHAR STRING2 J)
(/WHEN (FIND CH LETTERSEARCHON :TEST #'EQUAL) (APPEND NEWSTRING CH))).
[condition type: PROGRAM-ERROR]
CG-USER(261):
像这样的怎么样
(defun remove-unsafe (str unsafe)
(remove-duplicates
(remove-if #'(lambda (c) (find c unsafe)) str)))
您需要检查循环的语法: 您的代码添加了括号,缺少
do
单词和奇怪的字符,如/
如果你的问题是家庭作业,你应该把它贴上这样的标签。如果没有,您可以使用设置差异
(set-difference (coerce "abc" 'list) (coerce "bcd" 'list))
-> (#\a)
这是一个很棒的解决方案,尽管我希望调试代码中列出的错误消息。谢谢——将标记更新为家庭作业。我正在尝试使用not运算符(如果可能),但找不到。据我所知,我应该能够像我那样添加for循环,但它似乎不起作用。我需要一些帮助来获得正确的语法。
(set-difference (coerce "abc" 'list) (coerce "bcd" 'list))
-> (#\a)