2010-12-03 73 views
6

我是一名有经验的C++/.NET/Java Windows/Web程序员,尝试学习(Common)Lisp。我在阅读Practical Common Lisp并使用SLIME学习针对Windows/C++程序员的Common Lisp技巧

我很容易就能看到Lisp语言,但是我在开发机制方面遇到了麻烦。我的一个问题是处理Emacs。我没有使用它的经验,并且发现它通常很难找到/找出命令。

具体的问题:

  • 我得到的REPL,但我不完全得到我该如何有效地使用它。当我需要更改函数时,我必须重新输入defun并进行更改(乏味和容易出错)。我怎样才能做得更好?
  • 我如何从在REPL输入代码实际获得程序?我习惯于C模型,您可以在其中查看,编辑和重新编译代码文件。我知道Lisp有类似的东西(通过加载函数),但是如何获得我刚刚定义并测试的函数以保存文件?我希望有比我现在的select + copy + paste更好的方法。
  • 如何调试错误?有没有像其他语言一样进入代码的能力?
  • 只要S表达式有效,输入(defun ...)时不会出现任何错误。直到我尝试使用它,我发现它是无效的。有什么方法可以更快地获得错误(即编译代码)?
  • 是否有一些IDE会让我更加熟悉,或者让我更容易使用该语言?
  • 我应该改用Scheme吗?

任何提示将不胜感激!

+1

你可能也想看看Clojure;它是一个在JVM上运行并具有良好互操作性的lisp。与Java。我还没有使用它,但已经看了几个讲座,它看起来不错。 – paul 2011-01-12 18:10:05

回答

5

- 我得到了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是 Lisp的免费IDE。 Allegro有我认为的免费版本;我从来没有尝试过,但..

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

那么,计划是不是一种实用的语言。

1

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

也可以使用LispWorks Personal Edition来学习Lisp。它有一些限制,完整的产品是商业的,但它使用起来相当容易。

我得到REPL,但没有完全得到我如何有效地使用它。当我需要更改函数时,我必须重新输入defun并进行更改(乏味和容易出错)。我怎样才能做得更好?

REPL有历史。使用键盘命令,您可以恢复之前的输入并对其进行更改。除此之外,编辑一个Lisp文件并从那里编译代码。在Lisp中,您可以编译/评估个别表达式和定义。像SLIME,LispWorksAllegro CL这样的典型IDE允许您也从正常的Lisp文本窗口运行代码 - 除了在REPLA(又名Listener)中执行表达式。

我如何从在REPL中输入代码实际获得程序?我习惯于C模型,您可以在其中查看,编辑和重新编译代码文件。我知道Lisp有类似的东西(通过加载函数),但是如何获得我刚刚定义并测试的函数以保存文件?我希望有比我现在的select + copy + paste更好的方法。

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

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

查看STEP,TRACE及相关信息。 SLIME,LispWorks和Allegro CL有很多附加功能。

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

对于很多情况下使用编译器。编译器会查找一系列错误,并且在某些异常情况下(例如,函数不存在或者变量未定义)也会记录。

- 是否有一些IDE可以让我更熟悉,或者让我更容易使用该语言?

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

我应该改用Learning Scheme吗?

不是。

1

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

我建议观看一些SLIME截屏视频(或者,甚至更好,观看Lisp程序员使用SLIME几分钟,如果你有一个方便)。 SLIME webpage has a couple

+0

谢谢,我绝对认为有关SLIME的教程将会有所帮助。 – davesw 2010-12-06 15:17:05

1

听起来你真的很喜欢DrRacket IDE。 Racket比Common Lisp更接近Scheme,但是您可以将脚趾浸入Lisp家族中,而不需要Emacs风格的开发速度。

+0

这听起来很有趣。我会看看这种语言/ IDE。 – davesw 2010-12-06 15:22:49