【问题标题】:Learning Common Lisp tips for a Windows/C++ programmer为 Windows/C++ 程序员学习 Common Lisp 技巧
【发布时间】:2011-05-19 19:33:59
【问题描述】:

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

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

具体问题:

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

任何提示将不胜感激!

【问题讨论】:

  • 您可能还想研究 Clojure;它是一个在 JVM 上运行并具有良好互操作性的 lisp。用Java。我还没有使用它,但是看过一些关于它的讲座,它看起来不错。

标签: emacs lisp slime


【解决方案1】:

-我得到了 REPL,但不太明白如何有效地使用它。当我 需要更改我必须的功能 重新输入 defun 并进行更改 (乏味且容易出错)。我怎样才能 这样做更好吗?

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

加载粘液。在 .lisp 文件中输入代码,然后运行 ​​slime-eval-buffer 将所有代码加载到 Lisp 中。然后,对于一个特定的函数,你在 C-e、C-j 上修改以在你运行的 Lisp 中重新定义它。

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

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

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

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

-是否有一些 IDE 让我更熟悉或让我更轻松地使用该语言?

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

-我应该改用学习Scheme吗?

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

【讨论】:

    【解决方案2】:

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

    也可以使用LispWorks Personal Edition 来学习 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。

    我应该改用学习方案吗?

    不是真的。

    【讨论】:

      【解决方案3】:

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

      我建议您观看一些 SLIME 截屏视频(或者,如果您手头有的话,最好看几分钟 Lisp 程序员使用 SLIME)。 SLIME webpage has a couple

      【讨论】:

      • 谢谢,我绝对认为有关 SLIME 的教程会有所帮助。
      【解决方案4】:

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

      【讨论】:

      • 这听起来很有趣。我来看看这个语言/IDE。
      猜你喜欢
      • 2011-05-06
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多