gpt4 book ai didi

julia - 映射,在 Julia 中用 `|>` 减少

转载 作者:行者123 更新时间:2023-12-04 00:38:04 26 4
gpt4 key购买 nike

在 R 中,使用 dyplr你有 %>%运算符,它允许您将函数的输出通过管道传输到新函数,从而无需存储中间值。在 julia 中,您可以使用 |> 实现非常相似的功能。运营商。

示例用法

2 |> log |> sqrt 

对我来说,这比 sqrt(log(2)) 要好得多。 .尤其是当链条变得很长时。我想使用这种语法,但也适用于 map , reduce Julia 中的 -type 函数。

设置
from = "abcdefghijklmnopqrstuvwxyz"
to = "cdefghijklmnopqrstuvwxyzab"
trans = "g fmnc wms bgblr rpylqjyrc gr zw fylb <>"
d = {from[i] => to[i] for i = 1:26}
d[' '] = ' '

什么有效
map(x -> d[x], filter(x -> isalpha(x) || isspace(x), trans))

这有效,但它的阅读效果不如我想要的。另一种方法是将中间结果存储到变量中,但这似乎也很冗长:
res1 = filter(x -> isalpha(x) || isspace(x), trans)
map(x -> d[x], res1)

我更喜欢什么

R 语法类似于:
trans |> 
filter(x -> isalpha(x) || isspace(x)) |>
map(x -> d[x])

这是行不通的,因为在 Julia 中,映射/过滤器函数位于可迭代对象之前。 R 会通过给你一个中缀来解决这个问题 .您可以使用,在这种情况下,语法看起来更像:
trans |> 
filter(x -> isalpha(x) || isspace(x), .) |>
map(x -> d[x], .)

Julia 有可能发生这样的事情吗? |> operator 有可能将长代码链清理成整洁的操作管道。一种可能更像 Julia 的方式来解决这个问题也被认为是这个问题的答案。

最佳答案

您也可以使用 @as来自 Lazy 的宏包装以更接近您的首选形式:

julia> using Lazy

julia> @as _ trans begin
filter(x -> isalpha(x) || isspace(x), _)
map(x -> d[x], _)
end
"i hope you didnt translate it by hand "

关于julia - 映射,在 Julia 中用 `|>` 减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29525310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com