7

我是一位经验丰富的 C++/.NET/Java Windows/web 程序员,正在尝试学习(通用)Lisp。我正在阅读Practical Common Lisp并使用SLIME

我很容易获得 Lisp 语言,但我在探索开发机制时遇到了麻烦。我的问题之一是处理 Emacs。我没有使用它的经验,并且发现它通常与难以查找/弄清楚的命令混淆。

具体问题:

  • 我得到了REPL,但我不太明白如何有效地使用它。当我需要更改函数时,我必须重新键入 defun 并进行更改(繁琐且容易出错)。我怎样才能做得更好?
  • 我如何从在 REPL 输入代码到实际拥有一个程序?我习惯了 C 模型,您可以在其中查看、编辑和重新编译代码文件。我知道 Lisp 有类似的东西(通过加载函数),但是如何将我刚刚定义并测试的函数放入要保存的文件中?我希望有比我目前的选择+复制+粘贴更好的方法。
  • 你如何调试错误?有没有像使用其他语言一样进入代码的能力?
  • 只要 S 表达式有效,我在输入(defun ...). 直到我尝试使用它才发现它无效。有什么方法可以更快地出错(即编译代码)?
  • 是否有一些 IDE 对我来说更熟悉或让我更容易使用该语言?
  • 我应该改用学习计划吗?

任何提示将非常感谢!

4

4 回答 4

5

- 我得到了 REPL,但不太明白如何有效地使用它。当我需要更改函数时,我必须重新键入 defun 并进行更改(繁琐且容易出错)。我怎样才能做得更好?

-我如何从在 REPL 输入代码到实际拥有一个程序?我习惯了 C 模型,您可以在其中查看、编辑和重新编译代码文件。我知道 lisp 有类似的东西(通过加载函数),但是如何将我刚刚定义并测试的函数放入要保存的文件中?我希望有比我目前的选择+复制+粘贴更好的方法。

加载粘液。在文件中输入代码.lisp,然后运行slime-eval-buffer以将所有代码加载到 Lisp 中。然后,对于您正在运行的 Lisp 中对 Ce、Cj 进行修改的特定功能,以重新定义它。

- 你如何调试错误?有没有像使用其他语言一样进入代码的能力?

是的。( trace 'my-function) - 或一些变体 - 当my-function被调用时,它将进入调试器。

- 只要 S 表达式有效,我在输入 (defun ...) 时不会出现任何错误。直到我尝试使用它才发现它无效。有什么方法可以更快地出错(即编译代码)?

在某种程度上,这是动态语言(Python、Perl、Ruby、Lisp 等)的特征。尝试SBCL以获得更好的错误检查。

- 是否有一些 IDE 对我来说更熟悉或让我更容易使用该语言?

Emacs 是Lisp免费 IDE。我相信 Allegro 有一个免费版本;不过我没试过。。

-我应该改用学习计划吗?

不,Scheme 不是一种实用的语言。

于 2010-12-03T15:27:05.033 回答
2

我是一位经验丰富的 C++/.NET/Java Windows/Web 程序员,正在尝试学习(通用)Lisp。我正在阅读 Practical Common Lisp 并使用 SLIME。

也可以使用LispWorks 个人版来学习 Lisp。它有一些限制,完整的产品是商业的,但它更容易使用。

我得到了 REPL,但不太明白如何有效地使用它。当我需要更改函数时,我必须重新键入 defun 并进行更改(繁琐且容易出错)。我怎样才能做得更好?

REPL 有一段历史。使用键盘命令,您可以取回先前的输入并进行更改。除此之外,只需编辑一个 Lisp 文件并从那里编译代码。在 Lisp 中,您可以编译/评估单个表达式和定义。像 SLIME、LispWorksAllegro CL这样的典型 IDE允许您也从普通的 Lisp 文本窗口运行代码 - 除了在 REPLA(又名监听器)中执行表达式。

我如何从在 REPL 输入代码到实际拥有一个程序?我习惯了 C 模型,您可以在其中查看、编辑和重新编译代码文件。我知道 Lisp 有类似的东西(通过加载函数),但是如何将我刚刚定义并测试的函数放入要保存的文件中?我希望有比我目前的选择+复制+粘贴更好的方法。

复制并粘贴一件事。但正确的方法是在编辑器窗口中处理文本文件。可以编译/加载表达式、编辑器缓冲区或相关文件。

你如何调试错误?有没有像使用其他语言一样进入代码的能力?

参见 STEP、TRACE 和相关。SLIME、LispWorks 和 Allegro CL 有很多附加功能。

只要 S 表达式有效,我在输入 (defun ...) 时不会出现任何错误。直到我尝试使用它才发现它无效。有什么方法可以更快地出错(即编译代码)?

在许多情况下,使用编译器。编译器会发现一系列错误,并且还会在出现异常情况时进行记录(例如,函数不存在或变量尚未定义)。

- 是否有一些 IDE 对我来说更熟悉或让我更容易使用该语言?

LispWorks、Allegro CL是Windows下最好的。有一些替代品,比如Corman Lisp(我不知道它现在是否得到维护)甚至 Ufasoft Lisp。

我应该改用学习计划吗?

并不真地。

于 2010-12-03T16:08:25.663 回答
1

这听起来不像你真的在使用 SLIME,或者至少不是按照它的预期使用方式。(“必须重新输入 defun”,“你有代码文件的 C 模型”)

我建议观看一些 SLIME 截屏视频(或者,如果你手头有的话,最好看几分钟 Lisp 程序员使用 SLIME)。SLIME 网页有几个.

于 2010-12-03T19:34:41.527 回答
1

听起来您会非常喜欢 DrRacket IDE。Racket更接近于 Scheme,而不是 Common Lisp,但是你可以在没有 Emacs 开发风格的减速带的情况下涉足 Lisp 家族。

于 2010-12-04T18:17:42.577 回答