Как вызвать функцию? - Lisp

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, как вызвать функцию F для поиска минимального остовного дерева? Объединить подсписки списка Ввожу:
(F (1 a b))
выводит ошибку
EVFUN: Не найдена функция 1
==> ERRSTATE
Погите пожалуйста. Просто скажите, как вызвать функцию, это так трудно?

Решение задачи: «Как вызвать функцию?»

textual
Листинг программы
(defun CLEAN_from_Nodes_in_Links (Nodes Links)
 (if Links
  ((lambda (elem result)
    ((lambda (test)
      (cond
       ((< test 2) (cons elem result))
       ((= test 2) (cons (cons (car elem) (reverse (cdr elem))) result))
       ((= test 3) result)))
     (apply '+
      (mapcar '*
      '(1 2)
       (mapcar
        (function (lambda (node)  ; здесь изменение
         (if (member node Nodes) 1 0)))
        (cdr elem))))))
   (car Links)
   (CLEAN_from_Nodes_in_Links Nodes (cdr Links)))))

Объяснение кода листинга программы

В коде представлена функция с именем CLEAN_from_Nodes_in_Links, которая принимает два аргумента: Nodes и Links. Nodes — это список узлов, а Links — это список связей между узлами.

  1. Сначала с помощью условного оператора if проверяется, есть ли связи (Links). Если связей нет, то функция завершается.
  2. В противном случае, определяется анонимная функция (lambda), которая принимает два аргумента: elem и result. Elem — это текущий элемент связи, а result — это результат, который будет накапливаться в процессе обработки.
  3. Внутри анонимной функции определена еще одна lambda-функция, которая принимает тест в качестве аргумента. Тест используется в условном операторе cond для определения текущего состояния.
  4. Если тест меньше 2, то текущий элемент связи (elem) добавляется в результат (result).
  5. Если тест равен 2, то рекурсивно вызывается функция CLEAN_from_Nodes_in_Links для обработки следующего элемента связи (cdr elem). При этом в качестве аргумента для функции передается новый результат (cons (car elem) (reverse (cdr elem))).
  6. Если тест равен 3, то результат (result) передается в функцию apply для выполнения операции сложения (+).
  7. В результате операции сложения получается новый результат, который передается в функцию mapcar для выполнения операции умножения (*).
  8. В качестве аргументов для функции mapcar используется список '(1 2), а в качестве функции — анонимная функция, которая проверяет, является ли узел (node) членом списка Nodes. Если это так, то возвращается 1, в противном случае — 0.
  9. Результатом работы функции mapcar является новый список, который передается в функцию mapcar еще раз. На этот раз в качестве функции используется анонимная функция, которая рекурсивно вызывает функцию CLEAN_from_Nodes_in_Links для обработки следующего элемента связи (cdr elem).
  10. После выполнения всех операций с текущим элементом связи (elem), функция возвращает его (car Links) и рекурсивно вызывает себя для обработки следующего элемента связи (cdr Links). Таким образом, функция CLEAN_from_Nodes_in_Links выполняет очистку связей от узлов, которые не присутствуют в списке Nodes.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.4 из 5
Похожие ответы