我正在玩QuickCheck,偶然发现了一些奇怪的行为
sample $ elements [1..5]
按预期工作,但是
sample $ elements [1..]
在ghci中挂起,即使使用Int
sample $ elements [(1::Int)..]
为什么它不打印任意(双关语:)大Int
s?
更新
我使用
测试了@ amalloy的解释sample $ elements ([1 .. ] :: [Int8])
终止。
答案 0 :(得分:4)
elements
随机统一选择元素,这意味着平均而言,它会将length / 2
个项目放入列表中。对于无限值,这是不可能的,对于像[1..] :: [Int]
这样的大型有限列表,这仍然达到了10亿个项目,一次一个地通过链表。相当缓慢的操作!
答案 1 :(得分:1)
#!/bin/bash
FINDER="1"
DOCK="2"
CAFF="3"
echo Select an option:
echo 1. killall Finder
echo 2. killall Dock
echo 3. caffeinate
echo Enter you choice:
read CHOICE
if [ "$CHOICE"="$FINDER" ]; then
killall Finder
elif [ "$CHOICE"="$DOCK" ]; then
killall Dock
elif [ "$CHOICE"="$CAFF" ]; then
caffeinate
fi
exit
似乎记录不清。除了非空之外,参数应该是有限。请参阅源代码:
elements
它尝试计算输入列表的长度,这将导致无限列表上的无限循环。