Цикл, хотя строки - PullRequest
       10

Цикл, хотя строки

0 голосов
/ 13 февраля 2012

Кажется, я застрял, пытаясь перебрать строки, чтобы найти символы, которых нет в другой строке. Цель программы - зациклить хотя бы одну строку и документировать символы, которых нет в другой строке. Символы, которых нет в другой строке, будут распечатаны после завершения проверки. Они могут не повторяться, поэтому я пытаюсь использовать три цикла.

Я пытаюсь отладить приведенный ниже код, поскольку в конечном итоге мне приходится проверять обе строки друг на друга, и я хочу сделать это вручную для получения ноу-хау.

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): 

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Вам необходимо проверить синтаксис LOOP: http://www.lispworks.com/documentation/HyperSpec/Body/m_loop.htm

(loop for i from start1
      for j from start2
      do ...)

В вашем коде добавлены скобки, отсутствуют do слова и странные символы, такие как /.

Если ваш вопрос - домашнее задание, пометьте его так. Если нет, вы можете использовать SET-DIFFERENCE.

(set-difference (coerce "abc" 'list) (coerce "bcd" 'list))
-> (#\a)
3 голосов
/ 13 февраля 2012

Как насчет этого?

(defun remove-unsafe (str unsafe)
  (remove-duplicates
   (remove-if #'(lambda (c) (find c unsafe)) str)))
...