gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:39 26 4
gpt4 key购买 nike

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

非常感谢智慧的话语。

(defn block-seq  ([block-size bytes]    "reads a byte-seq into a sequence of block-size bits."    (block-seq 8 block-size bytes))  ([in-block-size out-block-size bytes]    "converts a seq from in-block-size to out-block-size"  ...

参数:

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

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

user> (map #(java.lang.Integer/toBinaryString %) (block-seq 20 [0xAA 0xAA 0xAA]))("10101010101010101010" "1010")user> 

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

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

最佳答案

目前还不太清楚您想做什么,但您似乎想知道 block-seq 返回最后一个 block 中填充的位数的最佳方法。当然,如果您想适本地偷懒,那是不可能的,因此必须在最后一个 block 中或之后返回数字。

如果不使用元数据,您可以只返回一个列表

(1 2 3 :pad 12)

使用元数据,您可以将填充信息添加到最后一个缺点(Clojure 无法将元数据添加到整数),因此最后一个缺点等同于

(with-meta '(3) {:pad 12})

为了链接工作,二进制 block 必须知道填充信息,在这两种情况下,以便能够取消填充然后重新填充最后一个 block 。

不过,如何通过线路传输填充信息是另一个问题。

关于functional-programming - 填充二进制 block 惰性序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033468/

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