问题标签 [clojure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2242 浏览

python - 在 Clojure 中处理来自两个序列的值对

我正在尝试进入 Clojure 社区。我一直在使用 Python,我广泛使用的功能之一是 zip() 方法,用于迭代成对的值。在 Clojure 中是否有一种(聪明而简短的)方法可以实现相同的目标?

0 投票
6 回答
1064 浏览

apache - 将与 Apache Tomcat 一起使用的 Lisp 方言吗?

是否有像 Apache Tomcat 这样的应用程序服务器可以与 Lisp 类似的 Web 语言一起使用?

最近我一直在使用 Arc/Anarki 和 Clojure。但我真正想念的是 Apache 的 mod_arc 或 mod_clojure 之类的东西。我真正怀念的是 Lispy 网络语言的良好 Apache 集成。

Arc 和 Clojure 都使用您在代码中启动的自己的内置网络服务器。我想要 Apache httpd 为我提供的所有功能、弹性和可扩展性。有人在为 Arc 或 Clojure 开发 Apache 模块吗?是否有另一种类似 Lisp 的语言可以与 Apache 一起使用?

我来自 PHP 和 Perl 的背景。但在 C 和 /bin/sh 方面也有很多经验。自从我开始编写 Web 应用程序以来,我一直在使用 cgi-bin 和 stdin 来编写 C 二进制文件。

0 投票
1 回答
3515 浏览

clojure - Binding multiple related variables in Clojure without nested let

I want to use the value of a variable to compute the value of another variable in the same let statement. Is there a way to do this in Clojure without using nested lets?

Nested let solution:

Desired solution:

0 投票
5 回答
3130 浏览

multithreading - Clojure 可变存储类型

我正在尝试从网站上提供的 API 和文档中学习 Clojure。我对 Clojure 中的可变存储有点不清楚,我想确保我的理解是正确的。如果有任何想法我错了,请告诉我。

编辑:当我收到关于其正确性的评论时,我正在更新它。


免责声明:所有这些信息都是非正式的并且可能是错误的。不要使用这篇文章来了解 Clojure 的工作原理。


Vars总是包含一个根绑定,并且可能包含一个每个线程的绑定。它们与命令式语言中的常规变量相当,不适合在线程之间共享信息。(感谢亚瑟乌尔费尔特)

Refs是在支持原子事务的线程之间共享的位置,这些原子事务可以更改单个事务中任意数量的 refs 的状态。在退出同步表达式(dosync)时提交事务,并使用 STM 魔法(回滚、队列、等待等)自动解决冲突

代理是通过调度独立的动作函数来改变代理的状态,使信息能够以最小的开销在线程之间异步共享的位置。代理会立即返回,因此是非阻塞的,尽管在分派函数完成之前不会设置代理的值。

原子是可以在线程之间同步共享的位置。它们支持不同线程之间的安全操作。

这是我基于何时使用这些结构的友好总结:

  • Vars 就像命令式语言中的常规旧变量。(尽可能避免)
  • Atom 类似于 Vars,但具有线程共享安全性,允许立即读取和安全设置。(感谢马丁)
  • 代理就像一个原子,但它不会阻塞它会产生一个新线程来计算它的值,只有在更改值的过程中才会阻塞,并且可以让其他线程知道它已完成分配。
  • Refs 是在事务中锁定自己的共享位置。我们不需要让程序员决定在每段锁定代码的竞争条件下会发生什么,我们只需启动一个事务并让 Clojure 处理该事务中 ref 之间的所有锁定条件。

另外,一个相关的概念是函数future。对我来说,future 对象似乎可以被描述为一个同步代理,其中在计算完成之前根本无法访问该值。它也可以被描述为一个非阻塞的 Atom。这些是对未来的准确概念吗?

0 投票
4 回答
2112 浏览

java - 请推荐一个好的 Slime 教程或截屏视频

我在 Java 中的冒险让我研究了 Clojure,然后又让我(重新)发现了 Emacs 并让我找到了 SLIME。

我对 Emacs 本身有相当不错的处理,并且我有 emacs-starter-kit 以及 clojure-mode/slime/swank 以及其他一些不相关的模式和调整设置和运行。

但是设置一个程序和理解它的能力是不一样的。所以现在在我重新开始试验 Clojure 之前,我想先了解一下关于 Slime IDE 本身以及它可以做什么的更多信息。

谁能推荐一个教程/截屏视频来教我一些基本的 Slime 用法?我已经熟悉使用 Slime 交互执行 Clojure 了,但这肯定不是 Slime 的唯一功能。

本教程不需要涉及 Clojure,但如果涉及,那将是一个加分项,但我感兴趣的主要焦点是 Slime,所以请不要发布 Clojure 教程,除非它们强调 Slime 的用法,而不仅仅是交互式地执行 Clojure 代码。

0 投票
1 回答
695 浏览

functional-programming - 填充二进制块惰性序列

我有 Clojure 函数,它接受一个数字序列,将其切成适当的位数并返回块的惰性序列(首先是最低位)。它填充最后一个块的高位以填充块大小,我需要有关“最佳方式(tm)”的建议来记录填充量,同时保持它的懒惰和功能?

智慧之言大受赞赏。

参数:

  • in-block-size 是输入序列中每个数字的有效位数
  • out-block-size 是返回的惰性序列中每个数字的有效位数。
  • bytes 是从中提取位的惰性数字序列

这是一个示例,它采用三个字节的序列并将其分解为两个 20 位数字的序列(然后将其打印为二进制字符串)。

20 位数字序列中的第二个数字只有四个有效位,并添加了有效的 16 个零。如果我随后将此序列传递给另一个想要对该序列执行某些操作并通过网络发送它的函数;接收端的代码需要知道不打印/存储/等最后 16 位。

PS:这些可以链接。(block-seq 20 15 (block-seq 8 20 (read-bytes-from-file)))

0 投票
2 回答
486 浏览

vector - Refs 的 Clojure 向量

创建不同参考向量的最简单方法是什么?

Using(repeat 5 (ref nil))将返回一个列表,但它们都将引用相同的 ref:

结果相同(replicate 5 (ref nil))

0 投票
5 回答
5115 浏览

clojure - 带有可选标志的 Clojure 参数

将关键字实现为函数的可选标志的最佳方法是什么?我想进行函数调用,例如:

使用 defn,我可以定义一个函数,例如:

但是flags变成了一个列表。我可以编写自己的函数来搜索列表,但是核心库中不包含这样的函数,所以我认为它不是惯用的。

我现在使用的是:

0 投票
2 回答
1880 浏览

arrays - Clojure 表示字节数组

在java中,我会将整个文件读入字节数组并对其进行一些处理。现在我想在 clojure 中实现相同的算法。

我想知道的是我可以使用列表而不是数组吗?

我知道我可以从 clojure 创建数组,但是 lisp 的处理方式是什么?

0 投票
6 回答
14241 浏览

java - Clojure While 循环

我正在尝试clojure,我正在尝试弄清楚如何实现以下算法,

我正在从我想继续阅读的输入流中读取,直到它不是分隔符为止。

我可以用一个while循环在java中做到这一点,但我似乎无法弄清楚如何在clojure中做到这一点?