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