小编Rob*_*lan的帖子

为什么clojure协议方法经常被函数包裹?

通常当我在库中看到clojure协议时,协议方法将被包装在一个函数中,通常几乎没有添加任何功能.例如:

(defprotocol Pfoo
    (foo-method [this]))

(deftype Atype [x y]
    Pfoo
    (foo-method [this] (do-something)))

(defn foo [arg] (foo-method arg))
Run Code Online (Sandbox Code Playgroud)

并且通常期望客户端调用函数foo,而不是协议中的foo方法.(有关此类事情的具体示例,请参阅clojurescript核心顶部的协议.

那么为什么协议经常被屏蔽功能呢?协议方法不能成为面向客户端的部分,而不是包装功能吗?

protocols clojure clojurescript

14
推荐指数
1
解决办法
731
查看次数

为什么网站为网址生成随机字母数字字符串而不是使用行ID?

为什么许多网站(youtube是很好的例子)生成随机数字和字母的字符串而不是使用例如行id?

通常它的东西喜欢这个

bla?v=wli4l73Chc0
Run Code Online (Sandbox Code Playgroud)

而不是像

bla?id=83934
Run Code Online (Sandbox Code Playgroud)

如果你有很多行,它只是保持简短吗?或者还有其他好处吗?因为我可以想象:bla?id = 23934234234看起来不太好看

谢谢和欢呼

youtube url identifier

13
推荐指数
3
解决办法
2393
查看次数

在OS X上使用Clang进行编译时如何增加堆栈大小?

我可以用clang ++指定堆栈大小吗?我找不到任何允许我这样做的编译器选项.我正在使用OS X.

注意:这个问题具体是指Clang,而不是GCC编译器.

macos ld stack-size compiler-options

13
推荐指数
1
解决办法
6414
查看次数

如何实现图形结构堆栈?

好的,所以我想制作一个GLR解析器生成器.我知道存在比我可能做的更好的程序,但我这样做是为了娱乐/学习,所以这并不重要.

我一直在阅读有关GLR解析的内容,我认为我现在对它有了很好的理解.但现在是时候开始做生意了.

图形结构堆栈(GSS)是用于GLR解析器的关键数据结构.从概念上讲,我知道GSS是如何工作的,但到目前为止我所看到的资料都没有解释如何实现GSS.我甚至没有支持的操作权威列表.有人能指出我为GSS提供一些好的示例代码/教程吗?谷歌到目前为止没有帮助.我希望这个问题不要太模糊.

stack parsing graph glr data-structures

12
推荐指数
2
解决办法
1579
查看次数

何时以及如何在clojure中使用独立的层次结构?

Clojure用于创建关键字临时层次结构的系统对于花费一些时间使用该语言的大多数人来说都很熟悉.例如,该语言的大多数演示和演示包括诸如的示例

(derive ::child ::parent)
Run Code Online (Sandbox Code Playgroud)

然后他们继续展示如何将其用于多方法调度.

在我看过的所有幻灯片和演示文稿中,他们使用全局层次结构.但是可以通过使用(derived h :: child :: parent)将关键字关系放在独立的层次结构中,其中h由(make-hierarchy)创建.因此,有些问题:

  • 关于何时有用或必要,是否有任何指导方针?
  • 是否有任何操作层次结构的功能?

合并特别有用,所以我这样做:

(defn merge-h [& hierarchies] 
   (apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies))
Run Code Online (Sandbox Code Playgroud)

但我想知道这些功能是否已存在于某处.

编辑:将"自定义"层次结构更改为"独立"层次结构,因为该术语更好地描述了这种动物.此外,我做了一些研究,并在下面包括我自己的答案.欢迎进一步评论.

clojure hierarchy keyword

12
推荐指数
1
解决办法
741
查看次数

在clojure中的双向地图?

在clojure中实现双向地图的最佳方法是什么?(通过双向映射,我的意思是一个关联映射,它可以提供A-> B和B-> A访问.所以实际上,值本身将是向相反方向前进的键.)

我想我可以设置两个地图,每个方向一个,但有没有更惯用的方法呢?

我对我们想要一个双射的情况感兴趣,暗示没有两个键可以映射到相同的值,以及没有强加该条件的情况.

clojure map bidirectional

11
推荐指数
2
解决办法
1672
查看次数

Clojure的协议功能可以像普通函数一样可变吗?

使用clojure函数,我可以定义:

(defn f [x & xs] (apply some-function x xs))
Run Code Online (Sandbox Code Playgroud)

我试图用协议做同样的事情,例如

(defprotocol foo
  (bar [f])
  (baz [f & gs]))
Run Code Online (Sandbox Code Playgroud)

这编译(至少在REPL中),但任何实现类型似乎都失败了(变量,baz)方法.官方不支持这个吗?我咨询过的消息来源是沉默的.

protocols clojure

11
推荐指数
2
解决办法
1589
查看次数

为什么没有偷看!clojure瞬态向量的函数?

Clojure对其一些持久性数据结构,向量,映射和集合具有瞬态类似物.对于向量,有pop!conj!函数,类似于popconj持久向量,但没有peek!.

是否有技术上的原因使得有效实施peek!不可能?或者在瞬态向量的大多数用例中它是不是必需的?我总能这样做

(defn peek! [tvec] (get tvec (dec (count tvec))))
Run Code Online (Sandbox Code Playgroud)

但似乎很奇怪,没有内置的解决方案.

clojure transient data-structures

10
推荐指数
1
解决办法
701
查看次数

图形数据库中是否存在模式这样的东西?

图形数据库中是否存在模式这样的东西?例如,您是否可以指定哪些类型的节点可以与哪些其他类型的节点建立关系?

这样的架构是什么样的?

database schema graph graph-databases

10
推荐指数
2
解决办法
5732
查看次数

我可以使用Instaparse或任何其他clojure库解析基于缩进的语言吗?

可以使用Instaparse或其他Clojure库来解析基于缩进的语言吗?我已经看到了使用Instaparse来解析EBNF/ABNF中表达的语法的示例.有没有一种很好的方法来使用它来解析像Python这样的缩进感知语言?

parsing clojure

10
推荐指数
2
解决办法
920
查看次数