小编ToB*_*ced的帖子

我什么时候应该使用clojure箭头宏?

在努力保持功能风格时,我很难理解何时应该更喜欢:

(-> [1 2 3] reverse last)
Run Code Online (Sandbox Code Playgroud)

过度:

(last (reverse [1 2 3]))
Run Code Online (Sandbox Code Playgroud)

当我在一个项目中遇到这两种风格时,我发现它打破了我的流程,因为我必须在思考函数组合和思考中间值状态之间切换.

我应该在什么时候使用哪个?

syntax macros clojure operators

18
推荐指数
3
解决办法
2762
查看次数

在Python 3中连接序列的首选方法是什么?

在Python 3中连接序列的首选方法是什么?

现在,我正在做:

import functools
import operator

def concatenate(sequences):
    return functools.reduce(operator.add, sequences)

print(concatenate([['spam', 'eggs'], ['ham']]))
# ['spam', 'eggs', 'ham']
Run Code Online (Sandbox Code Playgroud)

需要导入两个单独的模块才能做到这一点似乎很笨拙.

另一种选择可能是:

def concatenate(sequences):
    concatenated_sequence = []
    for sequence in sequences:
        concatenated_sequence += sequence
    return concatenated_sequence
Run Code Online (Sandbox Code Playgroud)

但是,这是不正确的,因为您不知道序列是列表.

你可以这样做:

import copy

def concatenate(sequences):
    head, *tail = sequences
    concatenated_sequence = copy.copy(head)
    for sequence in sequences:
        concatenated_sequence += sequence
    return concatenated_sequence
Run Code Online (Sandbox Code Playgroud)

但这似乎很容易出错 - 直接调用复制?(我知道head.copy()列表和元组的作用,但copy不是序列ABC的一部分,所以你不能依赖它......如果你得到了字符串怎么办?).你必须复制以防止变异,以防你被交给a MutableSequence.此外,此解决方案会强制您首先解压缩整个序列集.再试一次:

import copy 

def concatenate(sequences):
    iterable = iter(sequences)
    head = next(iterable)
    concatenated_sequence = copy.copy(head)
    for …
Run Code Online (Sandbox Code Playgroud)

python-3.x python-3.3

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

如何使用clojure.edn/read来获取文件中的一系列对象?

引入了Clojure 1.5 clojure.edn,其中包括一个需要a的读取功能PushbackReader.

如果我想阅读前五个对象,我可以这样做:

(with-open [infile (java.io.PushbackReader. (clojure.java.io/reader "foo.txt"))]
  (binding [*in* infile]
    (let [edn-seq (repeatedly clojure.edn/read)]
      (dorun (take 5 (map println edn-seq))))))
Run Code Online (Sandbox Code Playgroud)

我怎样才能打印出所有对象?考虑到其中一些可能是nils,似乎我需要检查EOF或类似的东西.我希望有一系列类似于我得到的对象line-seq.

clojure edn

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

如果没有本地绑定,核心中的函数如何运行得更快?

这个例子说明了一切:

user> (time (dotimes [i 10000000] (inc i)))
"Elapsed time: 413.948711 msecs"
nil
user> (time (let [new-inc inc] (dotimes [i 10000000] (new-inc i))))
"Elapsed time: 1034.722729 msecs"
nil
Run Code Online (Sandbox Code Playgroud)

optimization clojure

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

如何在内核3.19+上加载设备树覆盖

内核3.19(重新)引入了设备树覆盖.我在Linux内核上3.19.4,通过Fedora(3.19.4-200.fc21.armv7hl).

我有一个覆盖文件overlay.dts,如文档中所述.

overlay.c包含用于叠加的函数,包括用于加载叠加的函数.

内核是否检查要加载叠加层的任何路径?如果是的话,在哪里?如果没有,我如何加载我的叠加层?

linux embedded linux-kernel device-tree

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

由一系列整数划分

什么是基于整数seq而不是仅仅一个整数来划分seq的更惯用的方法?

这是我的实现:

(defn partition-by-seq
  "Return a lazy sequence of lists with a variable number of items each
  determined by the n in ncoll.  Extra values in coll are dropped."
  [ncoll coll]
  (let [partition-coll (mapcat #(repeat % %) ncoll)]
    (->> coll
         (map vector partition-coll)
         (partition-by first)
         (map (partial map last)))))
Run Code Online (Sandbox Code Playgroud)

然后(partition-by-seq [2 3 6] (range))收益率((0 1) (2 3 4) (5 6 7 8 9 10)).

clojure

9
推荐指数
1
解决办法
197
查看次数

core.logic中的distincto与fd/distinct

fd/distinct在元素将在有限域而不是distincto?的情况下使用的优点是什么?

以下全部返回([0 1] [1 0]).

;;; With distincto
(run* [q]
  (fresh [x y]
    (fd/in x y (fd/interval 1))
      (distincto [x y])
      (== q [x y])))

;;; With fd/distinct
(run* [q]
  (fresh [x y]
    (fd/in x y (fd/interval 1))
      (fd/distinct [x y])
      (== q [x y])))

;;; Without fd at all. 
(let [interval [0 1]]
  (run* [q]
    (fresh [x y]
      (membero x interval)
      (membero y interval)
      (distincto [x y])
      (== q [x y]))))
Run Code Online (Sandbox Code Playgroud)

值得注意的是,虽然看起来你可能会distincto在你可能使用的任何地方使用 …

clojure clojure-core.logic

7
推荐指数
1
解决办法
329
查看次数

如何在 Gnome 3 中以编程方式将背景设置为纯色?

我试过:

gsettings set org.gnome.desktop.background primary-color '#000000'
gsettings set org.gnome.desktop.background secondary-color '#000000'
gsettings set org.gnome.desktop.background color-shading-type 'solid'
Run Code Online (Sandbox Code Playgroud)

但是,我的背景仍然是默认的heisenbug图片。

我必须更改什么设置才能使用我的颜色而不是图片?

gnome

7
推荐指数
1
解决办法
4747
查看次数

如何在Linux内核3.17上编辑BeagleBone Black的pinmux?

我可以看看/sys/kernel/debug/pinctrl/44e10800.pinmux/pins我感兴趣的引脚:

pin 38 (44e10898.0) 00000037 pinctrl-single 
Run Code Online (Sandbox Code Playgroud)

这对应于GPIO[2]4,或P8.10.

我正在使用带有内核的Fedora 21 3.17.7-300.fc21.armv7hl.

我想将多路复用器更改为0x27.总之,这会将引脚配置为具​​有内部下拉电阻(之前,它是上拉电阻).

期望的输出是:

pin 38 (44e10898.0) 00000027 pinctrl-single 
Run Code Online (Sandbox Code Playgroud)

可以做些什么?

注意:没有/sys/devices/bone_capemgr.*,因为这不是Angstrom.典型的DTO方法通过修改开普管理器来导出更改.这不是一个选择.

编辑:经过tad思考,我做了: dtc -I dtb -O dts -o ~/am335x-boneblack.dts /boot/dtb-3.17.7-300.fc21.armv7hl/am335x-boneblack.dtb.我编辑了这个文件:

...
    pinmux@44e10800 {
        ...

        example { 
            pinctrl-single,pins = <0x898 0x27>;
        };
    };
...
Run Code Online (Sandbox Code Playgroud)

然后,我再次编译它dtc,插入/boot/dtb-3.17.7-300.fc21.armv7hl/并重新启动.然而,没有任何改变.发生了什么?

编辑:

正如Charles Steinkuehler所指出的那样,0x800需要从偏移量中减去,而"某些东西"需要引用"示例".

如果我添加0x098 0x27到我的条目中user_leds_s0,则会观察到所需的行为:

...
    user_leds_s0 {
        pinctrl-single,pins = <0x54 0x7 0x58 0x17 …
Run Code Online (Sandbox Code Playgroud)

linux-device-driver gpio device-tree beagleboneblack

7
推荐指数
1
解决办法
9534
查看次数

如何在Linux上捕获键盘事件并将监视器用作文本显示?

我有一个以多用户模式运行的服务器,它连接到键盘和显示器.在另一台计算机上,我想通过SSH连接到服务器并运行一个程序,该程序从键盘捕获输入并将文本打印到监视器.键盘和显示器永远不会用于任何其他目的.

现在,当服务器启动时,监视器上会显示(文本)登录屏幕.我知道我可以写相应的/dev/tty设备.但是,键盘也会写入同一个地方.

如何在Linux上捕获键盘事件并将监视器用作文本显示?

我可能会遗漏一些关于Linux上硬件接口的基础知识.我需要知道什么?

耗尽时间 - 如果有人想要进一步充实,我会相应地奖励:

我做了以下以防止任何登录程序启动:

systemctl mask serial-getty@ttyO0
systemctl mask systemd-logind
systemctl mask getty@tty1
Run Code Online (Sandbox Code Playgroud)

然后我在需要时运行我的程序:

openvt -c 1 -f /path/to/my/program
Run Code Online (Sandbox Code Playgroud)

除了麻烦之外,这将是一个完全令人满意的解决方案-f.什么在运行tty1?有什么办法可以阻止吗?我应该停下来吗?

值得注意的是,这个解决方案确实满足了我的所有需求 - 据我了解,我接管了tty,从而可以访问其stdin(从键盘接收输出)和stdout(打印到监视器).

linux keyboard hardware-interface

6
推荐指数
1
解决办法
992
查看次数