Использование Lisp: напишите функцию Common Lisp с именем myList, которая создает следующий список и возвращает его

#list #function #lisp #common-lisp #construction

#Список #функция #lisp #common-lisp #построение

Вопрос:

Это был приведенный список:

 (4 (7 22) "art" ("math" (8) 99) 100)
  

но у меня все еще возникают проблемы с поиском правильного кода для решения этой проблемы

все, что я придумал, это

 (defund myList() (4 (7 22) "art" ("math" (8) 99 100) ) 
  

но, очевидно, это неверно

Ответ №1:

Вам нужно заключить список в кавычки, чтобы он не обрабатывался как вызов функции.

defund это опечатка для defun , и вы пропустили закрывающую скобку.

 (defun myList()
  '(4 (7 22) "art" ("math" (8) 99 100)))
  

Если вам нужны непостоянные данные, используйте LIST функцию для создания новых списков на каждом уровне.

 (defun myList ()
  (list 4 (list 7 22) "art" (list "math" (list 8) 99 100)))
  

Комментарии:

1. Вы можете утверждать, что это не создает список: (eq (mylist) (mylist)) будет true . Беспокоил ли исходный вопрос об этом, я не знаю.

2. Согласен, что список в кавычках опасен и вряд ли будет педагогической целью. Я подозреваю, что они ищут точное использование CONS .

3. @kennytilton Я добавил код, который создает новые списки.

4. Приятно, но обычно инструкции для чего-то подобного включают «… без использования СПИСКА». Цель, когда это так, состоит в том, чтобы углубить вас в структуру списка с помощью CONS . например, способ создания списка (42) с использованием COND (CONS 42 nil) . Создать список (1 2) довольно сложно : (CONS 1 (CONS 2 nil)) . Tbh, СПИСОК — это синтаксический сахар! И достаточно скоро вам нужно будет пройти мимо этого сахара при работе со списками. hth.

5. Если есть дополнительные ограничения, в вопросе нужно указать это.