LINUX.ORG.RU

История изменений

Исправление saufesma, (текущая версия) :

Не могли бы вы подсказать как разложить код пошагово

(defun f-F-a (lst1 lst2)
  (if (or (null lst1) (null lst2))
      ""
    (let ((current (format "%s * %s" (car lst1) (car lst2)))
          (rest (f-F-a (cdr lst1) (cdr lst2))))
      (if (string-empty-p rest)
          current
        (format "%s %s" current rest)))))

(print (f-F-a '("- F1" "+ F2" "- F3")  '("a1" "a2" "a3")))
попробовал разложить код пошагово
первый шаг
current => (format "%s * %s" (car lst1) (car lst2)) => "- F1 * a1"
rest => (f-F-a (cdr lst1) (cdr lst2)) => '("+ F2" "- F3")  '("a2" "a3")
(format "%s %s" current rest) => (format "%s %s" "- F1 * a1" '("+ F2" "- F3")  '("a2" "a3")) => "- F1 * a1 (+ F2 - F3)"
второй шаг
(format "%s * %s" (car "- F1 * a1 (+ F2 - F3)") (car '("a2" "a3"))) => format: Wrong type argument: listp, "- F1 * a1 (+ F2 - F3)"
тут я споткнулся. Где вот у меня ошибка? Я не вижу, а код работает, да ещё как.

Исправление saufesma, :

Не могли бы вы подсказать как разложить код пошагово

(defun f-F-a (lst1 lst2)
  (if (or (null lst1) (null lst2))
      ""
    (let ((current (format "%s * %s" (car lst1) (car lst2)))
          (rest (f-F-a (cdr lst1) (cdr lst2))))
      (if (string-empty-p rest)
          current
        (format "%s %s" current rest)))))

(print (f-F-a '("- F1" "+ F2" "- F3")  '("a1" "a2" "a3")))
попробовал разложить код пошагово
первый шаг
current => (format "%s * %s" (car lst1) (car lst2)) => "- F1 * a1"
rest => (f-F-a (cdr lst1) (cdr lst2)) => '("+ F2" "- F3")  '("a2" "a3")
(format "%s %s" current rest) => (format "%s %s" "- F1 * a1" '("+ F2" "- F3")  '("a2" "a3")) => "- F1 * a1 (+ F2 - F3)"
второй шаг
(format "%s * %s" (car "- F1 * a1 (+ F2 - F3)") (car '("a2" "a3"))) => format: Wrong type argument: listp, "- F1 * a1 (+ F2 - F3)"
тут я споткнулся. Где вот у меня ошибка? Я не вижу

Исходная версия saufesma, :

(defun f-F-a (lst1 lst2)
  (if (or (null lst1) (null lst2))
      ""
    (let ((current (format "%s * %s" (car lst1) (car lst2)))
          (rest (f-F-a (cdr lst1) (cdr lst2))))
      (if (string-empty-p rest)
          current
        (format "%s %s" current rest)))))

(print (f-F-a '("- F1" "+ F2" "- F3")  '("a1" "a2" "a3")))

попробовал разложить код пошагово

первый шаг
current => (format "%s * %s" (car lst1) (car lst2)) => "- F1 * a1"
rest => (f-F-a (cdr lst1) (cdr lst2)) => '("+ F2" "- F3")  '("a2" "a3")
(format "%s %s" current rest) => (format "%s %s" "- F1 * a1" '("+ F2" "- F3")  '("a2" "a3")) => "- F1 * a1 (+ F2 - F3)"
второй шаг
(format "%s * %s" (car "- F1 * a1 (+ F2 - F3)") (car '("a2" "a3")))
тут я споткнулся. Где вот у меня ошибка, я не вижу?