在努力保持功能风格时,我很难理解何时应该更喜欢:
(-> [1 2 3] reverse last)
Run Code Online (Sandbox Code Playgroud)
过度:
(last (reverse [1 2 3]))
Run Code Online (Sandbox Code Playgroud)
当我在一个项目中遇到这两种风格时,我发现它打破了我的流程,因为我必须在思考函数组合和思考中间值状态之间切换.
我应该在什么时候使用哪个?
在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) 引入了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.
这个例子说明了一切:
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) 什么是基于整数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)).
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在你可能使用的任何地方使用 …
我试过:
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图片。
我必须更改什么设置才能使用我的颜色而不是图片?
我可以看看/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) 我有一个以多用户模式运行的服务器,它连接到键盘和显示器.在另一台计算机上,我想通过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(打印到监视器).
clojure ×5
device-tree ×2
linux ×2
edn ×1
embedded ×1
gnome ×1
gpio ×1
keyboard ×1
linux-kernel ×1
macros ×1
operators ×1
optimization ×1
python-3.3 ×1
python-3.x ×1
syntax ×1