小编Kev*_*vin的帖子

什么在减慢这个Clojure功能?

我正在Clojure的Project Euler问题14上工作.我有一个很好的通用算法,我得到了正确的结果,但我很难理解为什么我的函数与Java中的等效函数相比(我相信)是如此之慢.这是我的Clojure函数,用于从给定的起始编号获取Collat​​z链的长度:

(defn collatz-length
  [n]
  (loop [x n acc 1]
    (if (= 1 x)
      acc
      (recur (if (even? x)
               (/ x 2)
               (inc (* 3 x)))
             (inc acc)))))
Run Code Online (Sandbox Code Playgroud)

这是我的Java函数做同样的事情:

public static int collatzLength(long x) {
    int count = 0;
    while (x > 1) {
        if ((x % 2) == 0) {
            x = x / 2;
        } else {
            x = (x * 3) + 1;
        }
        count++;
    }
    return count;
}
Run Code Online (Sandbox Code Playgroud)

为了计算这些函数的性能,我使用了以下Clojure代码:

(time (dorun (map collatz-length (range …
Run Code Online (Sandbox Code Playgroud)

java performance clojure

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

如何在后台执行几个bash函数但是等待输出?

我正在尝试使用bash函数来执行多个Web抓取(使用curl等),我想让它们全部在后台执行,并且所有打印输出到stdin.这怎么可能?

parallel-processing bash

4
推荐指数
1
解决办法
6825
查看次数

为什么字符串索引返回整数值而不是字符?

看起来,当将Ruby代码放在可执行脚本中时,String的索引行为与IRB中的行为不同,或者直接运行Ruby代码.例如:

$ cat > test
#!/usr/bin/ruby -w
puts 'hello'[0]
$ chmod +x test
$ ./test
104
$ ruby -e "puts 'hello'[0]"
h
Run Code Online (Sandbox Code Playgroud)

为什么是这样?而且,如何使可执行脚本的行为与"普通"Ruby代码相同?

ruby bash executable

3
推荐指数
1
解决办法
389
查看次数

为什么Java会切断这个长的高阶位?

请考虑以下代码:

System.out.println(1 + 0xFFFFFFFFL);
System.out.println(1L + 0xFFFFFFFF);
Run Code Online (Sandbox Code Playgroud)

第一行打印预期值,4294967296.但第二行打印出一个0.我检查了两个表达式的类型(通过将它们传递给方法),并且两者都被longJVM 识别.Lava 7语言规范指出,对于二进制操作,"如果任一操作数的类型为long,则另一个操作数转换为long".这似乎正在发生,但我有两个问题:

  1. 如果两个操作数最终都是long,为什么第一个表达式中的高阶位被切断?

  2. 为什么订单很重要?

java types jvm casting type-conversion

2
推荐指数
1
解决办法
192
查看次数