Questions tagged «clojure»

Clojure是支持交互式开发的通用语言,它鼓励功能性的编程风格,并简化了多线程编程。

4
Python装饰器和Lisp宏
在查看Python装饰器时,有人声明,它们与Lisp宏(尤其是Clojure)一样强大。 看一下PEP 318中给出的示例,在我看来,它们只是在Lisp中使用普通的旧高阶函数的一种奇特方式: def attrs(**kwds): def decorate(f): for k in kwds: setattr(f, k, kwds[k]) return f return decorate @attrs(versionadded="2.2", author="Guido van Rossum") def mymethod(f): ... 在任何示例中都没有看到任何代码转换,如Clojure Macro的解剖中所述。另外,Python缺少同源性 可能使代码转换变得不可能。 那么,这两个如何比较,您能说他们在做事上大致相等吗?证据似乎与此相反。 编辑:根据评论,我正在寻找两件事:比较“功能强大”和“易于处理”。
18 python  lisp  clojure  macros 

1
如何编写可读的Clojure代码?
我是Clojure的新手。我可以理解我编写的代码,但是以后很难理解。 括号很难匹配。 在各种情况下,有关命名约定和缩进的通用约定是什么? 例如,我写了一个示例性的解构示例来理解,但是第二次看起来却完全不可读。 (defn f [{x :x y :y z :z [a b c] :coll}] (print x " " y " " z " " a " " b " " c)) 在进行解构的情况下,最好直接在参数级别执行此操作,还是启动一个let表格然后再继续执行?

3
Clojure与Java有多独立?
我对Clojure世界很陌生。我很欣赏一个事实,即可以通过Clojure互操作功能轻松访问所有Java库,但是我想知道Clojure靠自己站了多少。 当然,有些平台(例如Android)始终需要与Java互操作,因为核心库是用Java编写或公开的。此外,由于Clojure字符串是Java字符串,因此我希望字符串操作库可以作为Java String方法的包装。 但是对于其他任务,我看不出为什么无法开发本地Clojure库的原因。考虑一下Http,日期处理,XML解析,模板,JSON序列化和反序列化,OAuth,数学库等。 所以我的问题是: Clojure在多大程度上变得独立于Java生态系统?它是否具有自己的惯用库来执行大多数这些任务和其他任务?

1
Clojure与Scala中的模式匹配
这两种语言的模式匹配之间的主要区别是什么?我不是在指语法,而是功能,实现细节,用例范围和必要性。 Scala应用程序(例如Lift和Play)自豪地谈到了语言模式匹配能力。另一方面,Clojure具有一个库core.match,并内置了解构功能,该功能似乎也很强大。 *注:之所以被问到这个问题,是因为我看到了一篇博客文章,其中的一个程序员作为实验,使用Scala和Clojure构建了一个Lisp解释器。他说,克洛瑞尔(Clojure)比赛在经过一定长度后就中断了,但无法解释原因,但我真的很想知道。您可以在以下位置找到此帖子:http : //www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

2
我们可以建造一台功能正常的计算机吗?
就像FP一样,最终,我们所有的程序都是结构化的。也就是说,我们制作它们的纯度或功能无关紧要-它们始终会转换为汇编,因此实际上在幕后运行的是指令,状态和循环。我们有点模仿FP。 作为硬件新手,我的问题是:为什么我们不使用实际上以功能样式计算事物的计算机体系结构?例如,一台计算机可能由原始的“功能芯片”组成,例如“ concat”,“ map”和“ reduce”,而程序只会告诉计算机如何在这些芯片之间流动数据以计算所需的结果,例如连接语言。 这真的没有道理,但可以说明我在想什么。

2
Clojure中的方括号和花括号是否仍然是S表达式?
我正在尝试学习Lisp,并查看那里的所有Lips及其差异。 我看到在Scheme的某些实现中,您可以将方括号与圆括号互换使用以提高可读性,因此,由于对它们进行了相同的处理,因此我认为它们仍然像其他所有内容一样只是S表达式。 但是,在Clojure中,我看到方括号和花括号用于表示不同的数据类型,例如向量等。这些还是仍然有效的S表达式,还是必须将它们视为原子?这不是“破坏”整个S表达式的概念,从而使Clojure成为“不纯的” Lisp吗?
12 lisp  clojure 


2
在Clojure中使用SICP代替Scheme
我是软件工程课程的大三学生,我提出了将SICP读给一位顾问的想法,以便对我们设计的所有软件背后的原理有更深入,更基本的了解。 他建议不要学习Scheme来完成本书(因为它不像Lisp的现代方言那么普遍),而应该使用Clojure进行练习。 这本已经很困难的书,如果我在更现代的Clojure中尝试该书的练习,那将如何工作?例如,我找不到任何实际的解决方案,他们为Scheme教的语法是不同的,等等。
11 clojure  scheme  sicp 

3
字节码编织与Lisp宏
我一直在阅读人们为Java和C#等语言编写的库,这些库利用字节代码编织来完成诸如拦截函数调用,插入日志记录代码之类的事情。我还一直在阅读Lisp / Clojure宏试图更好地了解如何利用它们。我对宏的了解越多,它们似乎提供的功能与字节码编织库相同。功能是指在编译时处理代码的能力。 我一直在查看的库示例包括AspectJ,PostSharp和Cecil。 有什么可以做的而不是另一种?他们实际上解决了相同的问题,还是我在比较苹果和橙子?

2
Java的新发展将如何影响其与Scala和Clojure等语言的互操作性?
据我了解,Scala和Clojure都被设计为新的语言, 取决于JVM,并且 从某种意义上说,它们可以轻松地与Java代码集成,因为它们允许在Scala和Clojure代码中使用Java类。 从Java 8开始(或者在后续的Java版本中可能更强大),Java语言的语义将发生变化。 我想问一下这些变化将如何影响Java与Scala / Clojure之间的互操作性,以及将会带来什么后果。例如,由于Java 8中的lambda不是对象(请参见here),所以Scala和Clojure可能必须处理不是对象的Java值。这会是个问题吗? 我可以想到以下情形: Scala或Clojure语言将得到扩展,以适应新的Java语义(以处理新的非对象值)并支持与Java的互操作性。 Scala或Clojure语言将不会扩展。仅当新的Java功能(例如函数值)可以映射到现有概念时,这才有可能。例如,在Scala中,甚至函数都是对象,因此我猜Java函数在对Scala可见时会再次被包装到某种对象中。 Scala或Clojure语言将继续支持直至Java 6或7的互操作性,而无需关注Java的最新发展。这将要求仍旧支持Java的较早版本(至少由OpenJDK或其他项目支持),以便这些语言可以基于Java的更为保守/稳定的分支。 总结:我们可以期望Java的未来发展会对Scala和Clojure等语言产生影响,以保持与Java的互操作性吗?已经有一些(链接到)有关此主题的正在进行的讨论吗? 注意 我可以想象Scala,Clojure和其他基于JVM的语言在将其实现更新到较新版本的JVM时不会有任何重大问题(并且新的JVM功能将使此实现更加容易)。我的问题集中在Java语言的功能以及其他JVM语言是否能够/如何“看到” /使用这些新功能,而不是基于JVM的语言是否可以在最新的JVM上运行。
11 java  scala  clojure 


3
Scala或Clojure函数式编程最佳实践
我做了很多自学编码,并获得了并行编程模型的经验:Actor,软件事务存储,数据流。 当我尝试将这些体系结构应用于现实生活时(应用于高负载Web应用程序中),任何模型都不支持数据的持久性和持久性。现实生活中的任务需要最后保存数据。这意味着我仍然必须使用数据库并捕获数据库同步,可能的可伸缩性瓶颈等。 有谁知道使用Akka Actor 或软件事务存储器并最终实现持久性的体系结构(src或文本,图表或蓝图)的好例子吗? 欢迎在现实生活中使用事务处理内存,参与者,数据流,元组空间的任何好的示例/想法。

1
软件事务存储的可组合性示例
经常被提及的软件事务存储的主要优点之一是可组合性和模块化。可以将不同的片段合并以产生更大的成分。在基于锁的程序中,通常不是这种情况。 我正在寻找一个简单的示例,用实际代码对此进行说明。我希望在Clojure中举一个例子,但是Haskell也很好。如果该示例还展示了一些不易编写的基于锁的代码,则可以加分。
11 haskell  clojure  stm 

3
如果可以使用def重新定义变量,那么如何将其视为不可变的?
尝试学习Clojure会让您不停地被告知,Clojure是如何处理不可变数据的。但是您可以使用defright 轻松地重新定义变量?我知道Clojure开发人员可以避免这种情况,但是您可以避免在任何语言中都一样地更改变量。有人可以向我解释这有什么不同,因为我认为我正在阅读的教程和书籍中缺少此内容。 举个例子 a = 1 a = 2 在Ruby(或blub,如果您愿意)中与 (def a 1) (def a 2) 在Clojure中?
10 clojure 

2
当我们将计算与副作用分开时,我们将“询问世界”的代码放在哪里?
根据命令查询分离原则,以及使用Clojure演示的“ 数据中的思考”和“ DDD”,应将副作用(修改世界)与计算和决策分开,以便更容易理解和测试这两个部分。 这就留下了一个悬而未决的问题:我们应该把“问世界”放在边界的哪个位置?一方面,从外部系统(例如数据库,扩展服务的API等)请求数据不是参照透明的,因此不应与纯计算和决策代码放在一起。另一方面,将它们从计算部分中分离出来并作为参数传递是有问题的,甚至是不可能的,因为因为我们可能事先不知道可能需要请求哪些数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.