Первая лабораторная по ЛИСП - 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&processa2 3 вернёт (2 3), а вызов list&process 1 2 3 вернёт (2 1 3).