学习Windows / C ++程序员的常见Lisp技巧

时间:2010-12-03 15:17:31

标签: emacs lisp slime

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

我很容易获得Lisp语言,但是我无法理解开发的机制。我的一个问题是处理Emacs。我没有经验,发现它一般令人困惑,很难找到/弄清楚命令。

具体问题:

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

任何提示都将不胜感激!

4 个答案:

答案 0 :(得分: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有一个免费版我相信;我从来没有试过它..

  

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

Nah,Scheme不是一种务实的语言。

答案 1 :(得分: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(aka Listener)中执行表达式。

  

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

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

  

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

参见STEP,TRACE和相关内容。 SLIME,LispWorks和Allegro CL具有许多附加功能。

  

只要S表达式有效,我输入(defun ...)时就不会出现任何错误。直到我尝试使用它,我发现它无效。有没有办法尽快得到错误(即编译代码)?

对于许多情况,人们使用编译器。编译器会发现一系列错误,并会注意到某些异常情况(例如函数不存在或未定义变量)。

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

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

  

我应该改用学习计划吗?

不是。

答案 2 :(得分:1)

听起来你并没有真正使用SLIME,或者至少没有像预期的那样使用SLIME。 (“必须重新键入defun”,“你有代码文件的C模型”)

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

答案 3 :(得分:1)

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