Первая лабораторная по ЛИСП - Lisp
Формулировка задачи:
Здравствуйте, в институте прохожу предмет ЛИСП (Common Lisp), но никак не могу в него въехать...настолько он ломает мозг после С++ и др. С первой же лабораторной работой начались проблемы. Вот задание:
Описать функцию f (x y z) от трёх аргументов, которая формирует из своих аргументов список и выполняет его обработку. Проверить, является ли первый элемент списка строкой или символом. Если является, то вернуть исходный список без первого элемента, иначе поменять местами первый и второй элементы исходного списка.
Вопрос, как можно проверить, если такой функции(проверка на строку или символ) нет (есть АТОМ, на NIL), или я что то не понимаю? Кто нить может написать такую функцию проверки? Заранее спасибо...!
Решение задачи: «Первая лабораторная по ЛИСП»
textual
Листинг программы
- (defun list&process (a b c)
- (if (or (stringp a) (symbolp a))
- (cons b (cons c nil))
- (cons b (cons a (cons c nil)))))
- > (list&process "a" 2 3)
- (2 3)
- > (list&process 1 2 3)
- (2 1 3)
Объяснение кода листинга программы
В данном коде определён функцией list&process
с тремя аргументами a
, b
, c
.
Если a
— строка или символ, то возвращается nil
и вторая и третья аргументы объединяются в список.
Если a
— не строка и не символ, то возвращается nil
и вторая и третья аргументы добавляются в начало списка, который образуется из первых двух аргументов.
Значит, вызов list&process
a2 3
вернёт (2 3)
, а вызов list&process 1 2 3
вернёт (2 1 3)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д