Все везде нахваливают Lisp и я решил тоже потыкать его. Почитал немного документации, а затем написал свою первую программу.
Это преобразователь из инфиксной в префиксную форму. С учётом скобок и приоритетов операций. А ещё с возможностью вызывать функции помимо выполнения математических операций.
То есть пишем что-то вроде (c-expr ( 2 + 2 * 2 + sin ( 1 ) ) / 2 ), а оно преобразует это в нормальную лисповую форму записи - (/ (+ (+ 2 (* 2 2)) (sin 1)) 2), а такое уже легко вычисляется средствами самого Lisp.
Программа работает вроде как и всегда (пробовал несколько тестов) выдаёт верный результат, но вот вопрос - там огромное количество всяких ветвлений и рекурсий. Насколько я рационально её написал, не будет ли проблем с производительностью (быть может, надо как-то оптимизировать)?
Просто в Lisp не принято писать так, как в обычных языках программирования (да и некоторые конструкции при дословном переводе будут некрасиво смотреться), поэтому и советы по оптимизации от них не годятся. Например, если сохранять в локальные переменные все значения, которые используются дважды (чтобы не считать их 2 раза), то будет дикая лапша из let. Или это не нужно? Или это не лапша (и вообще мой код не лучше), а норма?