我怎样才能在clojure中进行取幂?现在我只需要整数取幂,但问题也适用于分数.
在我的应用程序中,我需要转换clojure关键字,例如.:var_name成为字符串"var_name".有什么想法可以做到吗?
在像Haskell这样的纯函数式语言中,是否存在一个算法来获取函数的逆,当它是双射的时(编辑)?是否有一种特定的方式来编程你的功能呢?
我知道cons返回一个seq并conj返回一个集合.我也知道conj将项目"添加"到集合的最佳末端,并cons始终将项目"添加"到前面.这个例子说明了这两点:
user=> (conj [1 2 3] 4) //returns a collection
[1 2 3 4]
user=> (cons 4 [1 2 3]) //returns a seq
(4 1 2 3)
Run Code Online (Sandbox Code Playgroud)
对于矢量,地图和集合,这些差异对我来说很有意义.但是,对于列表,它们似乎相同.
user=> (conj (list 3 2 1) 4) //returns a list
(4 3 2 1)
user=> (cons 4 (list 3 2 1)) //returns a seq
(4 3 2 1)
Run Code Online (Sandbox Code Playgroud)
是否有任何使用列表的示例,其中conjvs cons表现出不同的行为,或者它们是否真的可以互换?换句话说,有一个例子,列表和seq不能等效使用吗?
我的公司刚刚要求我在Clojure中重写一个较大的(50,000行单行代码)Java应用程序(使用JSP和servlet的Web应用程序).有没有其他人得到关于我应该注意什么的提示?
请记住,我非常了解Java和Clojure.
我做了重写,然后投入生产.这是非常奇怪的,因为重写最终进展得如此之快,以至于它在大约6周内完成.因为不需要很多功能,它最终更像是3000行的Clojure.
我听说他们对系统感到满意,并且完全按照自己的意愿行事.唯一的缺点是,维护系统的人必须从零开始学习Clojure,并且他被踢进去并且尖叫着.前几天我确实接到了他的电话说他现在喜欢Lisp ..好笑:)
另外,我应该好好提一下Vaadin.使用Vaadin可能占用了Clojure所节省的时间和代码的短缺.Vaadin仍然是我曾经使用的顶级Web框架,尽管现在我正在愤怒地学习ClojureScript!(请注意,Vaadin和ClojureScript都使用了Google的GUI框架.)
有问题的图书馆是东京内阁.
我想要在一个JAR文件中包含本机库,JNI库和所有Java API类,以避免重新分发问题.
似乎在GitHub尝试了这个,但是
问题是,我可以将所有内容捆绑在一个JAR中并重新分发吗?如果有,怎么样?
PS:是的,我意识到它可能具有可移植性的含义.
是否有一个中等大小的Clojure示例应用程序可以用作"最佳实践"示例,并且是一种很好的方法来查看这样的应用程序在代码和代码组织方面会是什么样子?Web应用程序对我来说特别有趣,但最重要的是该程序执行一些通常有用的东西(例如,博客,错误跟踪,CMS),而不是我从未在真实中实现过的数学世界(解决N-queens问题,模拟生命,生成Fibonacci序列,以及功能编程语言的常用功能).
谢谢!
人们使用Clojure的真实应用是什么?
我使用Groovy作为胶水,Java用于大型系统,Python/Perl脚本用于解析和粘合.我可以看到自己从Java调用Clojure,但我无法看到我自己在哪里使用它.令我感到震惊的是,几乎任何脚本语言都可以更容易地用于特殊任务.
无论如何我不是Groovy专家或粉丝,但它让我觉得它有更好的支持框架,工具和许多语言结构(闭包,函数式编程).Scala也是如此.
难道它的未来是作为嵌入其他系统的语言吗?
Clojure开发人员犯了哪些常见错误,我们如何避免这些错误呢?
例如; Clojure的新人认为这个contains?功能的作用是一样的java.util.Collection#contains.但是,contains?只有在使用索引集合(如地图和集合)并且您正在寻找给定键时,它才会起作用:
(contains? {:a 1 :b 2} :b)
;=> true
(contains? {:a 1 :b 2} 2)
;=> false
(contains? #{:a 1 :b 2} :b)
;=> true
Run Code Online (Sandbox Code Playgroud)
与数字索引集合(向量,数组)一起使用时,contains? 仅检查给定元素是否在有效索引范围内(从零开始):
(contains? [1 2 3 4] 4)
;=> false
(contains? [1 2 3 4] 0)
;=> true
Run Code Online (Sandbox Code Playgroud)
如果给出一个列表,contains?将永远不会返回true.
我知道人工基准是邪恶的.他们只能针对非常具体的狭隘情况显示结果.我不认为一种语言比另一种语言更好,因为有些愚蠢的替补.但我想知道为什么结果如此不同.请在底部查看我的问题.
基准测试是简单的数学计算,可以找到相差6的素数对(所谓的性感素数).例如,100以下的性感素数将是:(5 11) (7 13) (11 17) (13 19) (17 23) (23 29) (31 37) (37 43) (41 47) (47 53) (53 59) (61 67) (67 73) (73 79) (83 89) (97 103)
在表中:以秒为单位的计算时间 运行:所有除了因子在VirtualBox中运行(Debian unstable amd64 guest,Windows 7 x64主机)CPU:AMD A4-3305M
Sexy primes up to: 10k 20k 30k 100k
Bash 58.00 200.00 [*1] [*1]
C 0.20 0.65 1.42 15.00
Clojure1.4 4.12 8.32 16.00 137.93
Clojure1.4 (optimized) 0.95 1.82 2.30 16.00
Factor n/a n/a 15.00 …Run Code Online (Sandbox Code Playgroud)