【问题标题】:Learning Clojure coming from Lisp [closed]从 Lisp 学习 Clojure [关闭]
【发布时间】:2011-01-21 21:58:26
【问题描述】:

我正在认真考虑让 Clojure 成为我的新黑客语言,因为我喜欢 Lisp,但在 CL 和 Scheme 方面存在一些问题。我以前从未在 Java 环境中工作过,我的 lisp 经验仅限于通过“SICP”和“The Little Schemer”工作。

我需要知道什么?关于“Clojure 方式”有什么好的资源吗?关于 Clojure 风格的任何资源?我找到了 Mark Volkmann 的优秀页面,但我看过的书似乎有点多余。

另外,关于 Java,我需要了解什么?我宁愿不学习 Java 只是为了学习 Clojure,但我想我至少必须知道一点。另外,工作流程是什么样的?我的经验仅限于动态语言,所以我不知道如何在 JVM 上分发没有源的应用程序。

我显然已经在谷歌上搜索过了,但是信息量很大,而且不是很多“clojure 特定”的东西。

我想我正在寻找一些关于我应该以某种逻辑顺序阅读的文学类型的明智建议。

【问题讨论】:

  • 学究式地,Clojure 是一个 Lisp。
  • 大声笑,我意识到我的帖子让我听起来好像我不知道。这就是我选择clojure的原因。因为它是 lisp。

标签: clojure jvm jvm-languages


【解决方案1】:

观看尽可能多的Clojure videos on Blip.tv 不会出错,尤其是 Rich Hickey 本人的那些。这些确实有助于深入理解 Clojure 独有的概念点和方面。

如果您对 Lisp 概念足够熟悉,您可能希望最初专注于学习 Clojure 如何“映射”到您使用过的 Lisp。在"Clojure for Lisp Programmers."上观看 Rich Hickey 的视频

您确实需要熟悉 Java,因为 Clojure 不会回避使用它。在智能的地方使用 Java 并不是出于某种原因(据我所知)。对于java.langjava.io 包,我至少会略读API docs,因为java.lang 在您的Clojure 程序中自动可用并且java.io 经常使用。

考虑到我的 Clojure-to-Lisp 字典和我的 Java 基础知识,我会选择一个小项目来做。将 Clojure 和 Clojure-contrib API 文档放在手边(在 Web 上或使用 REPL 中的 (doc) 命令),并仔细阅读那里的许多 Clo​​jure 博客。我最喜欢的两个是http://nakkaya.com/http://stuartsierra.com/。如果您使用 Diigo,大量博客已被添加到 clojure group 的书签。

注意:不要沉迷于您的开发环境。 Getting Started wiki page 上列出了许多选项。为了学习 Clojure 和你的第一个小项目,我会选择你选择的纯文本编辑器,学习并使用 Leiningen 的基础知识来获得一个很好的项目目录设置,并处理好你的所有路径和依赖项,然后使用命令“lein repl”启动一个 REPL,所有依赖项都已加载并可用。假设您使用 Emacs(基于您之前的 Lisp 经验),您可以将 describe-variable 您的 inferior-lisp-program 设置为 lein repl,然后只需从示例项目的根目录启动 Emacs 即可自动运行。

您可以阅读书籍,尤其是 Clojure 的乐趣、Clojure 编程和实用 Clojure。后两者比第一个更“实用”,后者更“哲学”(请原谅粗略的概括)。实用 Clojure 与 Clojure 1.2 是最新的,而编程 Clojure 则稍旧一些。

最后,加入 #clojure IRC 频道并使用 Clojure Google 群组,因为这里有一群聪明、友好的人,他们乐于帮助他人。

【讨论】:

  • 对于 emacs,我更喜欢 swank-clojure 而不是原始的 suberial-lisp 接口。此外,paredit 对于任何 emacs lisp 编辑 IMO 都是必不可少的。没有什么可以添加到这个不错的回复中了:)
  • 我还推荐 Clojure in Action,它可以通过 MEAP 获得,例如 Clojure 的乐趣。本书包含许多示例,与 Practical Clojure 进行比较,并与 Programming Clojure 进行比较
  • 去买了 Clojure in Action 的 MEAP;虽然它充满了非常有趣的材料并探索了一些独特的问题领域,但我发现它不像我读过的其他 MEAP 那样精巧,有时作者没有看到一个概念或例子直到它的结论或足够详细。也就是说,关于数据存储、处理、网络和消息传递的章节值得一读。
【解决方案2】:

只是从另一个方向(Java -> Clojure)来到 Clojure 的人的快速视角

  • 实际上,一旦掌握了语法和常用习语,我发现 Clojure 的 Lispy 部分很容易学习。我希望这对您来说会更容易。
  • 您实际上并不需要太多的 Java 知识来完成大多数事情 - 如果您愿意,您可以在纯 Clojure 中完成几乎所有事情。
  • 可能只有当您开始想要使用 Java 库时,您才需要深入研究 Java 互操作。幸运的是,互操作非常简单 - 它更像 LISP 风格而不是 Java 风格,所以您唯一需要弄清楚的是如何理解 Java 接口并从 Clojure 端进行适当的调用。

对于我的环境,我使用Eclipse + Counterclockwise。如果您喜欢 IDE 和/或认为您最终可能也想在 Java 中做一些工作,那么这非常有效。它不需要进一步的依赖,给你一个优秀的调试器,有一个完整的 REPL(我相信一个嵌入式的 nREPL),做所有的项目文件管理(Git,SVN 等),并自动为你处理像 Java 类路径设置这样的事情(这可能是 Java 新手的主要障碍!)。如果您认为这可能适合您的风格,我建议您查看一下,我也听说过关于 Enclojure 的好消息。

如果您不喜欢 IDE,那么您可能最好使用自己喜欢的文本编辑器和命令行工具,正如 semperos 在他的出色回答中所建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2010-12-09
    • 2011-02-22
    • 2010-11-03
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多