Потянуло в лисперы

 

Пока ждал ответа на форуме есть ли рабочий Lisp, стал изучать язык. Для простоты взял newLisp, и после нескольких тыков запустил программу:

(let ((x 255))
(setq x (+ 1 x))
(println x)
(setq x (& 255 x))
(println x))
Исправил лишние строки на:
(let ((x 255))
;(setq x (+ 1 x))
(println x)
(setq x (& 255 (+ 1 x)))
(println x))


Наградой за страдания с кодом был ответ - кинули ссылку на бинарь, а не на паршивку. Может, заработает?

Дополнение 13.04.2026. Нет, на Picocalc не заработало. Поискал IDE, нашел одну программу, жаль что 64бит. Нашел привычную версию x86, которая не работает с перехватом вывода консоли, поэтому исходник редактируется в программе и запускается отдельно в консоли. Удобство программы - подсветка скобок, больше ничего нет.


Полез в строки, хотел написать для тренировки зеркальное отображение. В документации сказано, что функция уже есть - reverse, но она меня не остановила, и я пару часов сидел над кодом.

(set 's "nice fucking life")
(setq l ( length s))
(set 't "")
(for(n 0 l 1)
(set 't (append (n 1 s) t))
)
(println s)
(println t)
(reverse s)
(println s)
Попутно выяснилось, что вместо привычного RPN newLISP использует префиксную запись.

Читал форум фанатов Лиспа и увидел вопрос - преобразование регистра строки и полез в код, чтобы разобраться с нюансами.
(set 's "nice fucking life 1992 aZAza")
(setf l ( length s))


(for(n 0 l 1)
(setf ll (char(n 1 s)))
(if (>= ll 97)

(if (<= ll 122)

(setf (s n) (char (- ll 32)))
)
)
)
(println s)


Осталось разобраться с компиляцией и гуем и с повсюду задаваемым вопросом - в чем разница в set, setf,setq?

Дополнение 14.04.2026. Исправленный вариант преобразования регистра - ввод строки с клавиатуры и объединение двух if
(print "type smth>")
(set 's (read-line))
(setf l ( length s))
(
for(n 0 l 1)
(setf ll (char(n 1 s)))
(
if (and (>= ll 97) (<= ll 122))
(setf (s n) (char (- ll 32)))
)
)
(println s);(upper-case str)
(exit)

Компиляция в программу
newlisp -x uppercase.lsp uppercase.exe


Комментарии