标签: clojure

如何阅读精神上的Lisp/Clojure代码

非常感谢所有美丽的答案!不能只标记一个是正确的

注意:已经是wiki

我是函数式编程的新手,虽然我可以在函数式编程中读取简单的函数,例如计算数字的阶乘,但我发现很难阅读大函数.部分原因是因为我无法在函数定义中找出较小的代码块,部分原因是因为我( )在代码中难以匹配.

如果有人能够引导我阅读一些代码并给我一些关于如何快速破译某些代码的提示,那将是很棒的.

注意:如果我盯着它看了10分钟,我就能理解这段代码,但我怀疑这段代码是用Java编写的,我需要10分钟.因此,我认为在Lisp样式代码中感觉舒服,我必须更快地完成它

注意:我知道这是一个主观问题.我并不是在寻求任何可证实的正确答案.只是评论你如何阅读这些代码,欢迎并非常有帮助

(defn concat
  ([] (lazy-seq nil))
  ([x] (lazy-seq x))
  ([x y]
    (lazy-seq
      (let [s (seq x)]
        (if s
          (if (chunked-seq? s)
            (chunk-cons (chunk-first s) (concat (chunk-rest s) y))
            (cons (first s) (concat (rest s) y)))
          y))))
  ([x y & zs]
     (let [cat (fn cat [xys zs]
                 (lazy-seq
                   (let [xys (seq xys)]
                     (if xys
                       (if (chunked-seq? xys)
                         (chunk-cons (chunk-first xys)
                                     (cat (chunk-rest xys) zs))
                         (cons (first xys) (cat (rest xys) zs)))
                       (when zs …
Run Code Online (Sandbox Code Playgroud)

lisp clojure

73
推荐指数
3
解决办法
8463
查看次数

在Clojure 1.4中,require中的refer是什么用途?

不使用哪些优势:refer:require已经使用过:only:use?以下是同义词吗?

(ns so.example (:use [my.lib :only [function]]))
Run Code Online (Sandbox Code Playgroud)

(ns so.example (:require [my.lib :refer [function]]))
Run Code Online (Sandbox Code Playgroud)

clojure

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

我应该在哪里使用defrecord在clojure?

我在我的clojure程序中使用了很多地图和结构.将这些转换为defrecords有什么好处(除了表现)?

clojure

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

如何比较两个函数的等价性,如(λx.2*x)==(λx.x+ x)?

有没有办法比较两个函数的相等性?例如,(?x.2*x) == (?x.x+x)应该返回true,因为那些显然是等价的.

lisp lambda haskell functional-programming clojure

71
推荐指数
4
解决办法
2万
查看次数

我应该学习哪个Lisp?

我应该学习哪种Lisp(方言),为什么?

CL和Scheme之间的碎片减缓了吸收(至少对我而言!).

所以,请给我"真实答案"!

我试图阅读特征比较,他们似乎陷入了esoterica(我不完全理解),比如方言是否完全是尾递归等等.我希望你们(共同)能够明确区分不透明的差异.

我喜欢的事

良好的库支持,良好的环境和Unicode支持.

我不喜欢的事情

论战.功能在开始时很有用,但会干扰长期学习.


更新

  1. 我一直在使用MzScheme,一旦得到readline支持,我就会很享受.我没有在Unix上运行GUI,所以它对我来说似乎是一个很好的环境选择.

  2. 我也很高兴Clojure在debian上有一个易于安装的.deb软件包,所以它更容易玩.这是一个很大的胜利.尽管下面的一些相当容易激怒的敌意,低进入门槛是一个胜利.我喜欢被舀勺.

  3. 在阅读了更多SICP之后,我确实更了解尾递归的问题.

lisp scheme clojure

69
推荐指数
9
解决办法
2万
查看次数

69
推荐指数
5
解决办法
3万
查看次数

让我们在Clojure中结束

我知道它们是不同的,因为一个用于设置*compile-path*,一个不用.但是,我需要帮助他们为什么不同.

let使用给定的绑定创建一个新的范围,但是binding......?

binding clojure let

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

为什么要夸大其他JVM Lisps:Kawa,Armed Bear还是SISC?

在Clojure到达现场之前,JVM已经有三个Lisps:Kawa,Armed BearSISC.

那些Lisps留下的Clojure填补了什么空白?

lisp jvm clojure kawa

66
推荐指数
8
解决办法
1万
查看次数

如何列出命名空间的功能?

我想知道如何列出Clojure命名空间的所有函数.我做了一些研究,但我还没有.我已经找到了如何使用show方法列出Java类的方法:

(show java.awt.Graphics)
Run Code Online (Sandbox Code Playgroud)

要列出Clojure命名空间的功能,我尝试过这样的show方法:

(show 'clojure.contrib.repl-utils)
Run Code Online (Sandbox Code Playgroud)

这表明一些Java类方法,而不是我在寻找像那些docshow.我怎么能得到那些?

clojure

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

Clojure:休息与下一个

我很难理解Clojure restnextClojure 之间的区别.官方网站关于懒惰的页面表明偏好可能应该是使用rest,但它并没有真正解释两者之间的差异.任何人都能提供一些见解吗?

clojure lazy-evaluation

66
推荐指数
3
解决办法
9254
查看次数