Получить ascii код символа в Lisp
Формулировка задачи:
Решение задачи: «Получить ascii код символа в Lisp»
(defun task (lst) (cond ((null lst) nil) ((listp (car lst)) (cons (task (car lst)) (task (cdr lst)))) ((and (symbolp (car lst)) (= 1 (strLen (atom2string (car lst))))) (cons (strAsc (atom2string (car lst))) (task (cdr lst)))) (t (cons (car lst) (task (cdr lst)))))) ==> TASK (task '(a (aaa) 7 b bbb 8 c (ccc))) ==> (65 (AAA) 7 66 BBB 8 67 (CCC))
Объяснение кода листинга программы
В данном коде определен функцией task, которая принимает в качестве аргумента список lst. Если список пуст, то возвращается nil. Если первый элемент списка является списком, то рекурсивно вызывается функция task для первого элемента и результат присоединяется к результату вызова функции task для оставшейся части списка. Если первый элемент является символом и его длина равна 1, то возвращается его ASCII код, иначе вызывается функция strAsc для преобразования символа в строку и получения его ASCII кода, после чего результат присоединяется к результату вызова функции task для оставшейся части списка. Если первый элемент не является списком, символом или строкой, то он присоединяется к результату вызова функции task для оставшейся части списка.
Пример использования функции task с аргументом (a (aaa) 7 b bbb 8 c (ccc)) возвращает (65 (AAA) 7 66 BBB 8 67 (CCC)).