gpt4 book ai didi

clojure - 修改 vector 以便可以使用两个参数调用它

转载 作者:行者123 更新时间:2023-12-04 02:05:28 25 4
gpt4 key购买 nike

我正在玩 Clojure 中的矩阵实现,我这样做是为了乐趣和更多地了解 Clojure,而不是因为我想创建世界上最好最快最酷的矩阵实现。

像这样的代码所需的主要操作之一是能够返回矩阵中给定行和列的值,当然我已经将其编写为函数

(mat-getrc m 2 3)

说“给我矩阵 m 中第 2 行第 3 列的值”。非常好的 Clojure,但冗长且丑陋。我宁愿

(m 2 3)

但当然 A) 向量(在我的包中矩阵只是向量)只响应单个参数,并且 B) 向量不知道如何使用行号和列号来确定正确值的存储位置.

从看the docs for IFn (应该实现哪些向量)似乎存在 invoke 的双参数版本 - 但如何让我的“矩阵”向量实现并响应它?

任何建议和指向正确的方向表示赞赏。

最佳答案

你不能修改向量的调用方式,因为它内置在向量的实现中,但你可以定义你自己的类型来包装向量,充当向量,并且可以调用 deftype。您将需要扩展向量实现的许多相同接口(interface)(但是这是一个很大的列表):

user=> (ancestors clojure.lang.PersistentVector)
#{clojure.lang.IEditableCollection clojure.lang.ILookup
java.util.concurrent.Callable java.lang.Runnable clojure.lang.IMeta
java.lang.Comparable clojure.lang.IReduceInit
clojure.lang.IPersistentCollection clojure.lang.IHashEq java.lang.Iterable
clojure.lang.IReduce java.util.List clojure.lang.AFn clojure.lang.Indexed
clojure.lang.Sequential clojure.lang.IPersistentStack java.io.Serializable
clojure.lang.Reversible clojure.lang.Counted java.util.Collection
java.util.RandomAccess java.lang.Object clojure.lang.Seqable
clojure.lang.Associative clojure.lang.APersistentVector
clojure.lang.IKVReduce clojure.lang.IPersistentVector clojure.lang.IObj
clojure.lang.IFn}

关于clojure - 修改 vector 以便可以使用两个参数调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com