Вопрос с Common Lisp с заменой списка - PullRequest
0 голосов
/ 24 февраля 2020

Вопрос

базовый c код состоит в том, что

(defun my-replace (lst source target)
  "Replace every first-level occurrence of source with target in lst."
  (cond
    ((null lst) nil)                              ; stopping condition
    ((equalp (car lst) source)
     (cons target
           (my-replace (cdr lst) source target))) ; if head matches source,
                                                  ; replace head with target
    (t                                            ; otherwise use head and
                                                  ; check rest of the list
     (cons (car lst)
           (my-replace (cdr lst) source target)))))

, но он не может работать

1 Ответ

1 голос
/ 24 февраля 2020

Ваш код работает нормально

(defun my-replace (lst source target)
"Replace every first-level occurrence of source with target in lst."
  (cond ((null lst) nil) ; stopping condition
        ((equalp (car lst) source)
          (cons target (my-replace (cdr lst) source target))) ; if head matches source, replace head with target
        (t (cons (car lst) (my-replace (cdr lst) source target))))) ; otherwise use head and check rest of the list

Например,

(my-replace '(a b c) 'b 2) => (A 2 C)

Возможно, вам следует опубликовать сообщение об ошибке.

...