2010-12-03 1 views
6

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

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

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

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

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

+1

Возможно, вы также захотите изучить Clojure; это lisp, который работает на JVM и имеет приятный interop. с Java. Я еще не работал с ним, но смотрел несколько лекций, и это выглядит красиво. – paul 2011-01-12 18:10:05

ответ

5

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

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

Нагрузка 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 есть бесплатный выпуск; Я никогда не пробовал, хотя ..

-Я должен ли я перейти на схему обучения?

Nah, Scheme не является таким прагматичным языком.

1

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

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

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

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

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

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

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

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

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

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

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

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

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

Не совсем.

1

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

Я рекомендую посмотреть некоторые скрипасты SLIME (или, что еще лучше, смотреть, как программист Lisp использует SLIME в течение нескольких минут, если у вас есть один удобный). SLIME webpage has a couple.

+0

Спасибо, я определенно думаю, что учебник о SLIME будет полезен. – davesw 2010-12-06 15:17:05

1

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

+0

Мне это кажется интересным. Я рассмотрю этот язык/IDE. – davesw 2010-12-06 15:22:49