Изучение советов Common Lisp для программиста Windows / C ++ - PullRequest
6 голосов
/ 03 декабря 2010

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

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

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

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

Любые советы будут с благодарностью!

Ответы [ 4 ]

5 голосов
/ 03 декабря 2010

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

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

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

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

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

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

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

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

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

- Должен ли я вместо этого перейти на изучение Схемы?

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

1 голос
/ 04 декабря 2010

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

1 голос
/ 03 декабря 2010

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

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

1 голос
/ 03 декабря 2010

Я опытный программист на C ++ /. NET / Java Windows / Web и пытаюсь выучить (Common) Lisp.Я читаю Practical Common Lisp и использую SLIME.

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

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

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

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

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

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

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

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

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

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

LispWorks, Allegro CL - лучшие под Windows.Есть некоторые альтернативы, такие как Corman Lisp (я не знаю, поддерживается ли он сейчас) или даже Ufasoft Lisp.

Стоит ли вместо этого переключаться на изучение Схемы?

Не совсем.

...