Задать вопрос
@thewizardplusplus

Как упростить LISP?

Для академических целей хочу использовать задачу по написанию интерпретатора LISP. Достаточно распространённая практика. Однако для моих целей LISP всё же слишком сложен, поэтому хочу его упростить. И так как не являюсь профессионалом этого языка, решил посоветоваться, не выкину ли я что-то необходимое.

Итак, я хочу сделать следующее:
1) из атомов оставить только целые десятичные числа и идентификаторы (состоящие из букв и символа подчёркивания);
2) убрать точечные пары вообще (их можно заменить списками из двух элементов);
3) оставить только эти функции: cons, car, cdr, if, defun, quote и ещё арифметические.

Останется ли данный язык полным по Тьюрингу? Не выкинул ли я что-то необходимое? Или наоборот, может оставил что-то избыточное?

Моя цель - сохранить дух LISP, максимально сократив синтаксис.
  • Вопрос задан
  • 3257 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 5
Yoschi
@Yoschi
(cons 1 2) => '(1 . 2)
А список из двух элементов это (cons 1 (cons 2 nil))
Так что, боюсь, без точечных пар вам не обойтись. Они имеют отношение не именно к "парам элементов", а к конструированию списковых ячейкеек. Попробуйте выполнить (cons 1 (cons 2 3)) и убедитесь.
Кстати, упомянутый nil (ну и соответственно T) вам тоже понадобится.
Обязательна возможность сравнения. Не исключаю, что вы её присовокупили к арифметическим функциям, но сравнение логических значений тоже дело совершенно необходимое.
Ну и наконец необходима возможность отличать список от атома. Насколько помню, atomp либо consp обязательно включается в ядро лисп. Это вроде как не влияет на тьюринг-полноту, но реализовать это вне ядра, в виде функции с помощью примитивов не получится.
Ответ написан
webus
@webus
Golang | Python | NodeJS | Java
Посмотрите на реализацию Clojure
Ответ написан
ilammy
@ilammy
По тьюрингу Лисп останется полным даже если в нём оставить одну lambda.

И сам по себе Лисп является очень простым языком. Не хотите реализовывать самостоятельно всякие плавающие точки и строки — пишите интерпретатор на самом же Лиспе.
Ответ написан
Комментировать
@benoni
программер-любтель, иногда подрабатываю фрилансом
mr.gy/software/microlisp

з.ы. сам в л\испоподобных языках пока полный чайник, поэтому не знаю, насколько этот диалект, что я дал ссыль подходит под задачу) но раз микро, значит там оставлено тока самое необходимое - по идее)
Ответ написан
Комментировать
@MDtox
Не забудьте скобки убрать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы