标签: clojure

Mac OS X上的Clojure编辑器/ IDE建议

我开始学习Clojure编程语言.在Mac OS X上是否有针对Clojure编辑器/ IDE的建议?

更新2009-09-23:自从我最初发布此问题以来,Clojure空间发生了巨大变化.下面的许多链接,特别是那些与Emacs引用clojure模式的链接都是过时的.我发现的最好的Clojure IDE 是最近发布的Enclojure Netbeans插件(2009-08-25).

更新2010-04-30:关于这个主题的另一篇非常好的文章是Clojure IDEs - Lau B. Jensen 的Grand Tour.另外,对于我自己的clojure开发,我实际上已经转移到了Emacs/swank-clojure.

ide macos editor clojure

52
推荐指数
7
解决办法
3万
查看次数

Clojure关键字参数

在Common Lisp中你可以这样做:

(defun foo (bar &key baz quux)
  (list bar baz quux))

(foo 1 :quux 3 :baz 2) ; => (1 2 3)
Run Code Online (Sandbox Code Playgroud)

Clojure没有关键字参数.一种选择是:

(defn foo [bar {:keys [baz quux]}] 
  (list bar baz quux))

(foo 1 {:quux 3 :baz 2}) ; => (1 2 3)
Run Code Online (Sandbox Code Playgroud)

这是太多的嵌套括号,必须一直打字和阅读.它还需要将显式散列映射作为参数而不是平面列表传递.

什么是最惯用的Clojure相当于关键字参数,看起来没有人引发标点炸弹?

lisp binding clojure common-lisp params-keyword

52
推荐指数
3
解决办法
1万
查看次数

你对Clojure有什么看法?

你们对Clojure有什么看法?我正在考虑接下来学习它,目前正在使用Erlang并且除了记录惨败之外总体上对它很满意...... Clojure和LISP一样强大吗?

lisp clojure

51
推荐指数
8
解决办法
2万
查看次数

51
推荐指数
4
解决办法
7114
查看次数

如何执行系统命令?

如何在Clojure中执行特定于系统的命令并获得响应?例如,假设我们在Linux机器上,我如何调用top或free获取结果以进行进一步处理?

clojure

51
推荐指数
2
解决办法
1万
查看次数

在Clojure中使用命名空间的常见约定是什么?

我在Clojure中找到使用命名空间的好建议和常用做法时遇到了麻烦.我意识到命名空间与Java包不同,所以我试图梳理Clojure中的约定,这似乎很难确定.

我想我非常清楚如何将函数分成clj文件,甚至大致如何将这些文件组织到目录中.但除此之外,我无法为我的开发环境找到机制.一些相互关联的问题:

  1. 对于Clojure命名空间,我是否使用与通常用于Java包的相同的唯一性约定?[即backwards-company-domain.project.subsystem]
  2. 我应该将文件保存在与我的命名空间匹配的目录结构中吗?[ala Java]
  3. 如果我有多个名称空间,是否需要将所有代码编译到jar中并将其添加到我的类路径中以使其可访问?
  4. 每个命名空间应该编译成一个jar吗?或者我应该创建一个包含来自许多名称空间的clj代码的jar?

谢谢...

namespaces conventions clojure project-organization

50
推荐指数
2
解决办法
6554
查看次数

为什么Clojure会动态输入?

我非常喜欢的一件事是阅读不同的编程语言.目前我正在学习Scala,但这并不意味着我对Groovy,Clojure,Python和其他许多人都不感兴趣.所有这些语言都具有独特的外观和一些特征.在clojure的情况下,我不理解这些设计决策之一.据我所知,Clojure非常强调其功能范式,并且几乎迫使你尽可能地使用不可变的"变量".因此,如果您的一半值是不可变的,为什么语言会动态输入?clojure网站说:

首先,Clojure是动态的.这意味着Clojure程序不仅仅是您编译和运行的东西,而是您可以与之交互的东西.

那听起来很奇怪.如果程序已编译,则无法再更改它.当然你可以与它"互动",这就是用户所使用的UI,但网站当然并不意味着整洁的"动态"GUI.

Clojure如何从动态类型中受益

我的意思是Clojure的特殊情况,而不是动态类型的一般优点.

动态类型系统如何帮助改进函数式编程

再一次,我知道没有溢出"int a;"的乐趣.整个源代码,但类型推断可以缓解很多痛苦.因此,我想知道动态类型如何支持函数式语言的概念.

paradigms functional-programming language-design clojure dynamic

50
推荐指数
5
解决办法
1万
查看次数

返回满足谓词的map/list/sequence中的第一项

我正在寻找一个函数,它返回序列中的第一个元素,其中fn的计算结果为true.例如:

(first-map (fn [x] (= x 1)) '(3 4 1))
Run Code Online (Sandbox Code Playgroud)

上面的假函数应该返回1(列表中的最后一个元素).在Clojure中有类似的东西吗?

clojure

49
推荐指数
6
解决办法
3万
查看次数

哪里可以为Clojure.Spec提供规格?

所以,我正在深入探讨Clojure.Spec.

我偶然发现的一件事是,在哪里提出我的规格.我看到三个选择:

全局规范文件

在大多数示例中,我发现在线,有一个大spec.clj文件,在主命名空间中需要.它具有所有(s/def),并(s/fdef)为所有的"数据类型"和功能.

优点:

  • 一个文件来统治它们

魂斗罗:

  • 这个文件可能很大
  • 违反单一责任原则?

生产命名空间中的规范

你可以把你(s/def)和(s/fdef)旁边你的产品代码.这样,实现和规范共存于同一个命名空间中.

优点:

  • 实施和规范的共同定位
  • 一个名称空间 - 一个问题?

魂斗罗:

  • 生产代码可能会变得混乱
  • 一个命名空间 - 两个问题?

专用的spec命名空间结构

然后我想,也许Specs是第三种代码(在生产和测试之后).所以也许他们应该拥有自己的命名空间结构,如下所示:

?? src
?  ?? package
?     ?? a.clj
?     ?? b.clj
?? test
?  ?? package
?     ?? a_test.clj
?     ?? b_test.clj
?? spec
   ?? package
      ?? a_spec.clj
      ?? b_spec.clj
Run Code Online (Sandbox Code Playgroud)

优点:

  • specs的专用(但相关)命名空间

魂斗罗:

  • 您必须获取并需要正确的命名空间

谁有使用其中一种方法的经验?
还有其他选择吗?
您如何看待不同的选择?

clojure clojure.spec

49
推荐指数
3
解决办法
4236
查看次数

成熟的Clojure Web框架?

成熟的Clojure Web框架目前有哪些选择?我正在寻找某种特征矩阵,告诉我流行的框架支持什么程度,包括:

  • 响应模板(用Clojure或其他标记编写的响应 - 例如像带有Tiles的JSP)
  • HTTP会话
  • REST,自动将URL映射到action-functions和params
  • HTML表单(params可用作map,错误处理,验证)
  • 应用程序流(从Java框架中获知 - 请求处理程序返回最终由呈示器处理的操作标识符)

frameworks clojure web-frameworks

48
推荐指数
3
解决办法
2万
查看次数