Функция Lisp, которая принимает два списка и возвращает их произведение. - PullRequest
0 голосов
/ 14 декабря 2018

Это для домашней работы, и я не понимаю, с чего начать.например: первый список (1 2 3), второй список (3 4 6), возвращают 29, потому что (1 * 3) + (2 * 4) + (3 * 6)

1 Ответ

0 голосов
/ 14 декабря 2018

Не портит ответ, но вот подсказка того, что вы могли ожидать:

(defun sum-lists% (x y z)  ...)
(defun sum-lists (x y) ... )

Трассировка обеих функций:

(trace sum-lists sum-lists%)

Ваш пример:

(sum-lists '(1 2 3) '(3 4 6))

  0: (SUM-LISTS (1 2 3) (3 4 6))
    1: (SUM-LISTS% (1 2 3) (3 4 6) 0)
      2: (SUM-LISTS% (2 3) (4 6) 3)
        3: (SUM-LISTS% (3) (6) 11)
          4: (SUM-LISTS% NIL NIL 29)
          4: SUM-LISTS% returned 29
        3: SUM-LISTS% returned 29
      2: SUM-LISTS% returned 29
    1: SUM-LISTS% returned 29
  0: SUM-LISTS returned 29

И если вы позаботитесь о угловых коробках, вы также можете иметь:

 (sum-lists '(1 2 3 4) '(3 4))

  0: (SUM-LISTS (1 2 3 4) (3 4))
    1: (SUM-LISTS% (1 2 3 4) (3 4) 0)
      2: (SUM-LISTS% (2 3 4) (4) 3)
        3: (SUM-LISTS% (3 4) NIL 11)
          4: (SUM-LISTS% (4) NIL 14)
            5: (SUM-LISTS% NIL NIL 18)
            5: SUM-LISTS% returned 18
          4: SUM-LISTS% returned 18
        3: SUM-LISTS% returned 18
      2: SUM-LISTS% returned 18
    1: SUM-LISTS% returned 18
  0: SUM-LISTS returned 18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...