Изучение общих советов Lisp для программиста Windows/c++

Я опытный C++/.NET/Java Windows/веб-программист, пытающийся изучить (общий) Lisp. Я читаю Практический Общий Lisp и с помощью муть.

Я достаточно легко получаю язык Lisp, но у меня возникли проблемы с механикой развития. Одна из моих проблем связана с Emacs. У меня нет опыта работы с ним, и я нахожу его вообще запутанным с трудом найти / выяснить команды.

конкретные вопросы:

  • получить REPL, но я не совсем понимаю, как я могу использовать его эффективно. Когда мне нужно изменить функцию, я должен перепечатать дефан и внести изменения (утомительно и подвержено ошибкам). Как я могу сделать это лучше?
  • как я могу получить от ввода кода в REPL до фактического наличия программы? Я привык к модели C, где у вас есть файлы с кодом, которые вы можете просматривать, редактировать и перекомпилировать. Я знаю, что Lisp имеет что-то подобное (через функцию загрузки), но как получить функцию, которую я только что определил и протестировал в файл для сохранения? Я надеюсь, что есть лучший метод, чем мой текущий select+copy+paste.
  • как вы отлаживаете ошибки? Есть ли возможность войти в код, как я сделал бы с другими языками?
  • пока s-выражение действительно, я не получаю никаких ошибок при вводе (defun ...). Только когда я пытаюсь использовать его, я узнаю, что он недействителен. Есть ли способ получить ошибки раньше (т. е. скомпилировать код)?
  • есть ли какая-то IDE, которая была бы мне более знакома или позволяла бы мне играть с языком проще?
  • должен ли я переключиться на обучение схемы?

любые советы были бы очень признательны!

4 ответов


- я получаю REPL, но не совсем понимаю, как я могу использовать его эффективно. когда я нужно изменить функцию, которую я должен повторно введите defun и внесите изменения (утомительно и чревато ошибками). Как я могу так лучше?

- как я могу получить от ввода кода в REPL до фактического наличия программы? Я привык к модели, с которой вы файлы кода, которые можно просматривать, редактировать и перекомпилировать. Я знаю, что у lisp есть что-то подобное (через нагрузку функция), но как получить функция I только что определена и протестирована в файл для сохранения? Я надеюсь есть лучший способ, чем мой текущий выбор + копировать + вставить.

загрузить слизь. Введите код .lisp файл, а затем запустите slime-eval-buffer чтобы загрузить весь код в Lisp. Затем для определенной функции вы взламываете C-e, C-j, чтобы переопределить ее в своем запущенном Lisp.

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

да. (trace 'my-function) - или какой-то вариант на этом - и когда my-function вызывается, он будет прорываться в отладчик.

-пока s-выражение действительно, я не получаю никаких ошибок при вводе (сайт defun ...). Нет, пока я не попытаюсь. используйте его, чтобы я узнал, что он недействителен. Есть ли способ получить ошибки раньше (т. е. скомпилировать код)?

в некоторой степени это характерно для динамических языков (Python, Perl, Ruby, Lisp и т. д.). Попробуй!--23-->SBCL для лучшей проверки ошибок.

-есть ли какая-то IDE, которая была бы мне более знакома или позволяла бы мне играть с языком проще?

Emacs-это the бесплатная IDE для Lisp. У Аллегро есть бесплатная версия, я думаю; хотя я никогда не пробовал..

- должен ли я вместо этого переключиться на схему обучения?

нет, схема не такой прагматичный язык.


не похоже, что вы действительно используете слизь или, по крайней мере, не так, как она должна была использоваться. ("нужно перепечатать defun","модель C, где у вас есть файлы кода")

Я рекомендую смотреть некоторые Slime screencasts (или, еще лучше, смотреть, как программист Lisp использует SLIME в течение нескольких минут, если у вас есть один удобный). The слизь веб-страница имеет пару.


похоже, вам действительно понравится IDE DrRacket. ракетка ближе к схеме, чем к Common Lisp, но вы можете окунуть пальцы ног в семейство Lisp без ускорения стиля разработки Emacs.


Я опытный C++/.NET/Java Windows/веб-программист, пытающийся изучить (общий) Lisp. Я читаю практический Common Lisp и использую слизь.

можно использовать Lispworks Personal Edition для обучения Lisp. Он имеет некоторые ограничения, и полный продукт является коммерческим, но он довольно прост в использовании.

Я получаю REPL, но не совсем понимаю, как я могу использовать его эффективно. Когда мне нужно изменить функцию, которую я имею перепечатывать сайт defun и внести изменения (нудно и ошибок). Как я могу сделать это лучше?

REPL имеет историю. С помощью команд клавиатуры вы можете вернуть предыдущий ввод и изменить его. Кроме этого, просто отредактируйте файл Lisp и скомпилируйте код оттуда. В Lisp вы можете компилировать / оценивать отдельные выражения и определения. Типичные Иды, как слизь,LispWorks или Allegro CL позволяет запускать код также из обычных текстовых окон Lisp-дополнительно для выполнения выражений в REPLA (он же прослушиватель).

Как я могу получить от ввода кода в REPL до фактического наличия программы? Я привык к модели C, где у вас есть файлы с кодом, которые вы можете просматривать, редактировать и перекомпилировать. Я знаю, что Lisp имеет что-то подобное (через функцию загрузки), но как получить функцию, которую я только что определил и протестировал в файл для сохранения? Я надеюсь, что есть лучший метод, чем мой текущий select+copy+paste.

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

Как вы отлаживаете ошибки? Есть ли возможность войти в код, как я сделал бы с другими языками?

см. раздел шаг, трассировка и связанные. SLIME, LispWorks и Allegro CL имеют множество дополнительных функций.

пока s-выражение допустимо, я не получаю никаких ошибки при вводе (defun ...). Только когда я пытаюсь использовать его, я узнаю, что он недействителен. Есть ли способ получить ошибки раньше (т. е. скомпилировать код)?

во многих случаях используется компилятор. Компилятор найдет диапазон ошибок, а также заметит, когда что-то необычно (например, функция не существует или переменная не определена).

- есть ли какая-то IDE, которая была бы мне более знакома или позволяла бы мне играть с языком легче?

LispWorks, Allegro CL являются лучшими под Windows. Есть несколько альтернатив, таких как Корман Сюсюкать (Я не знаю, поддерживается ли это прямо сейчас) или даже Ufasoft Lisp.

должен ли я вместо этого переключиться на схему обучения?

Не совсем так.