Node 里的代码是多线程的吗, 为什么有的代码重复执行了多次?[失误.. Closed]
一段效率很低的代码… LiveScript… 古怪字符比较多的样子… 然后很奇怪地发现运行过程打印了很多遍… 按照代码的逻辑. 同样的列表只可能打印一次的呀…
global <<< require \prelude-ls
show = console.log
primes = [2 3 5]
n = 5
not-even = (a, b) -> (mod a, b) isnt 0
is-prime = (n) ->
s = 0
e = (length primes) - 1
for i in [s to e]
m = primes[i]
if (mod n, m) is 0 then return no
yes
loop
n += 2
if n >= 20000
show sum primes
# show primes
return
if is-prime n
primes.push n
# show n
show primes[((length primes) - 5) to ]
打印的结果, 我按了 ctrl + c 取到个一个片段… 明显重复了… 这是为什么?
[ 14831, 14843, 14851, 14867, 14869 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14843, 14851, 14867, 14869, 14879 ]
[ 14851, 14867, 14869, 14879, 14887 ]
[ 14851, 14867, 14869, 14879, 14887 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14867, 14869, 14879, 14887, 14891 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
[ 14869, 14879, 14887, 14891, 14897 ]
发现是我理解错误… 抱歉, 废贴了
2 回复
看不懂这个所谓的LiveScript是个神马东西,猜一下应该是这段代码的问题:
loop
n += 2
if n >= 20000
show sum primes
# show primes
return
if is-prime n
primes.push n
# show n
show primes[((length primes) - 5) to ]
那个loop貌似是一个循环,但是没有循环退出条件,就像JavaScript中这样的死循环了:
for (;;) {
// ......
}