有人可以build议解释同伦性概念的文章,特别是使用Clojure。 为什么Clojure是同相的,但在Java等其他语言中很难做到这一点?
在实践中,我应该使用letfn与let来定义本地函数吗? 那么我想同时需要本地function和本地非function的情况呢?
我试图编写一个函数,返回在Clojure memoizedrecursion函数,但我有困难使recursion函数看到自己的memoized绑定。 这是因为没有创buildvar? 另外,为什么我不能使用let创build的本地绑定使用memoize? 这个稍微不寻常的斐波那契序列制造商,从一个特定的数字开始,是我希望我能做的一个例子: (defn make-fibo [y] (memoize (fn fib [x] (if (< x 2) y (+ (fib (- x 1)) (fib (- x 2))))))) (let [f (make-fibo 1)] (f 35)) ;; SLOW, not actually memoized 使用with-local-vars似乎是正确的方法,但它也不适用于我。 我想我不能closuresvars? (defn make-fibo [y] (with-local-vars [fib (fn [x] (if (< x 2) y (+ (@fib (- x […]
我最近得知(感谢technomancy),在REPL — 这失败了: user=> (:require [clojure.set :as set]) java.lang.ClassNotFoundException: clojure.set (NO_SOURCE_FILE:24) 而这成功了: user=> (require '[clojure.set :as cs]) nil 在加载clojure.set类。 上下文: 前一行是从名称空间的源文件中复制的。 我的主要问题是: 我们所做的改变是什么,通过交换:和'字符,现在允许后者命令的成功? 我的第二个问题是, 一般情况下,在REPL中做什么的指导方针与在普通clojure源文件中做的事情相比? 假设在这里我们可以从LEININGEN项目的根目录加载我们的repl,所以至less在依赖项子目录中的磁盘上可用。
其中一位花时间评论我关于Clojure / LISP语法的其他问题的人指出,我没有用标准的LISP方式编写示例代码。 所以他很友善地重写代码片段,这是一个很大的帮助。 但是在我的脑海里又提出了另一个问题。 为什么会这样: (if (= a something) (if (= b otherthing) (foo))) 这是标准的LISP格式可以select这种forms: (if (= a something) (if (= b otherthing) (foo) ) ) 这是我的天真格式化代码的方式,因为我的C ++开发背景。 我想知道是否有利于后者的格式,或者它只是一个根深蒂固的标准(如QWERTY键盘)。 我不想争论 – 我很难理解为什么第一种forms更可取。 第二种forms帮助我更容易地看到代码结构。
我是clojure初学者。 我如何从lazySeq创build一个地图? (def fields [:name :age :color]) (def values ["joe" 32 "red"]) (def record (interleave fields values)) (def mymap (into {} record)) ;; ???? ;; (get mymap :age) ;; 32
我有一个简单而令人沮丧的问题在Clojure中,我有一个函数(让我们把它称为读函数),它能够计算出用户想从他的input中做什么,然后调用另一个函数(我们称之为动作函数)。 这个动作函数在完成后调用读取函数,以便用户可以执行另一个任务。 现在我的问题是,如果我把动作函数代码之前的读函数的代码,我得到一个读函数的错误,说它不知道什么动作函数是(因为它的代码是进一步下来),如果我做相反的事情,那么我明显得到一个类似的错误,说阅读function不能解决等。 有一个简单的方法来解决这个问题吗? 实际的代码: (defn ajout [botin] (def botin botin) (readCmd botin) ) (defn readCmd [botin] (println "Entrez une commande svp ") (def botin botin) (let [cmd (read-line)] (if (.equals cmd "a") ((println "Ajout 8o") (ajout botin)) (if (.equals cmd "e") ((println "Elim 8o") (eliminer botin)) (if (.equals cmd "i") ((println "Imprim 8o") (imprimer […]
在风格,惯例,效率等方面定义Clojure常量的最佳实践是什么? 例如,这是正确的吗? (def *PI* 3.14) 问题: 常量是否应该在Clojure中大写? 在风格上,他们应该有一个或两个星号(*)字符? 任何计算效率的考虑我应该知道的?
什么是装饰devise模式的等价function编程? 例如,你将如何在function风格中编写这个特定的例子 ?
最近我读了很多关于FP在并发执行和性能方面的优点的博文, 我对FP的需求很大程度上受到我正在开发的应用程序的影响,我的应用程序是一个基于状态的数据注入到另一个时间非常关键(每秒接近200万事务)的子系统。 我有几个这样的子系统需要testing。 我正在认真考虑使用FP来实现并行性,并希望采取正确的方法,很多SO上的文章都谈到了Scala,Haskell和Clojure的语言结构,库和JVM支持的缺点和优点。 从语言的angular度来看,只要能帮助我达到目标,我就可以学习任何语言。 某些post赞同Haskell的模式匹配和语言的简单性,基于JVM的FP lang在使用现有的java库方面有很大的优势。 JaneStreet是OCAML的大支持者,但是我真的不确定开发者支持和帮助OCAML的论坛。 如果有人处理这样的大数据,请分享您的经验。