欢迎!请查看 关于 页面以了解更多信息。
如果您将 'n' 或 'step' 的非正数值传递给 partition,您将得到一个无限循环。以下是一些示例
(partition 0 (链: 1 2 3))(partition 1 -1 (链: 1 2 3))
原因:partition 和 partition-all 并没有检查 n 和 step 是否为正。
方法:在 partition 和 partition-all 中添加检查以确保 n 和 step 是正数。
补丁:clj-1647_3.patch
预审人员:Alex Miller
评论者:alexmiller
另请参阅 CLJ-764
完成时需要性能检查。
评论者:kworam
修复 clj-1647 的补丁文件
由于 'n' 和 'step' 在从初始函数调用到所有递归自调用的过程中保持不变,我只需要在初始调用时验证它们是正数一次。
因此,我创建了 'internal-partition' 和 'internal-partition-all' 函数,它们的实现与 'partition' 和 'partition-all' 的当前版本相同。
我将 'step' 和 'n' 必须为正的先决条件添加到 'partition' 和 'partition-all' 函数中,并分别调用 'internal-partition' 和 'internal-partition-all' 来执行工作。
在这个补丁中有很多无关的空白更改 - 你能提供一个只包含问题的更改的更小的补丁吗?还需要测试。
我将提供一个不带空白更改的补丁文件。
我知道在 test_clojure\sequences.clj 和 test_clojure\transducers.clj 中有一些针对 'partition' 和 'partition-all' 的现有功能测试。我认为我不需要添加更多功能测试,但我认为我应该添加
你能否给我一些关于如何开发和添加这些测试的指导?
你应该将 #1 添加到补丁中。对于 #2,你可以在前后进行时间测量(criterium 是一个很好的工具),并将结果放入说明中。
您是否使用 mvn clean?或者 rm target?
是的,我使用了 mvn clean 并在执行交互式测试之前检查 clojure-1.7.0-master-SNAPSHOT.jar 的期望日期时间戳。我甚至在我的 Macbook 上重新追踪了我的步骤,因为我觉得可能存在特定于 Windows 的构建问题。
我对 partition-all 的更改按预期工作,但对我的 partition 的更改没有工作。然而,如果我将 (source partition) 调用的结果复制并执行它(将 clojure.core/partition 替换为 user/partition),user/partition 则按预期工作。我不明白为什么我的 clojure.core/partition 的更改没有生效。
评论者:jafingerhut
Kevin,我不知道你的 Clojure 源树的历史,但如果你曾经在其中运行过 'ant',那么会在根目录中创建 jar 文件,而 'mvn package' 则会在目标目录中创建它们。从我上面的更长评论中不清楚你运行的 'java -cp ...' 命令是指向目标目录中的那个。这可能不是你看到的问题的原因,但我还没有其他猜测。
这个状态如何?
Alex,我最近搬到西雅图,在微软担任了永久职位。这使我非常繁忙,几乎没有时间关注Clojure。我可能还要一个月或两个月才能抽出时间做Clojure。
谢谢提醒。
评论者:alex+import
Kevin,Alex,如果你们愿意,我可以接手这个工作吗?