2
$ echo *
a b c
$ cat *
file 1
file 2
file 3
$ factor -e=" \ 
> USING: globs io sequences sorting io.files io.encodings.utf8 ; \ 
> \"*\" glob natural-sort [ utf8 file-lines ] map concat [ print ] each "
file 1
file 2
file 3

使用 Factor 的 glob 和 shell 的 glob 的输出是相同的。输出上的Adiff表明它们完全匹配。

$ factor -e=" \
> USING: math.parser checksums checksums.sha globs io sequences sorting io.files io.encodings.utf8 ; \
> \"*\" glob natural-sort [ utf8 file-lines ] map concat sha-224 checksum-lines bytes>hex-string print "

0feaf7d5c46b802404760778091ed1312ba82d4206b9f93c35570a1a
$ cat * | sha224sum
d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101

但是校验和不匹配,校验和也不匹配md5。为什么是这样?如何在 Factor 中获得与 coreutils 中相同的校验和sha224sum

将编码更改为ascii不会更改输出,也不会"\n" join sha-224 checksum-bytes更改checksum-lines.

4

2 回答 2

2

这种奇怪的行为是由于校验和行中的错误造成的。因素/因素#1708

感谢jonenst发现问题,感谢calsioro在 Factor 邮件列表中提供此代码:

这段代码:

[
    { "a" "b" "c" } 3 [1,b]
    [ number>string "file " prepend [ write ] curry
      ascii swap with-file-writer ] 2each

    "*" glob natural-sort [ utf8 file-lines ] map concat
    [ "\n" append ] map "" join  ! Add newlines between and at the end

    sha-224 checksum-bytes bytes>hex-string print
] with-test-directory

给出相同的哈希:

d1240479399e5a37f8e62e2935a7ac4b9352e41d6274067b27a36101

于 2016-09-10T20:40:22.217 回答
0

jonenst指出

此外,关于您获得的三种不同长度,“exercism/self-update/self-update.factor”在最后一行的末尾缺少一个 '\n' 字符。这就是为什么你会得到令人惊讶的结果。

如果您尝试校验和文件,请确保它们都以尾随换行符结尾。

于 2016-09-11T12:02:32.290 回答