首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成布尔函数的Julia宏

生成布尔函数的Julia宏
EN

Stack Overflow用户
提问于 2022-08-02 18:20:35
回答 1查看 46关注 0票数 1

我有一个程序,它的布尔算法模式通常是:(f(a) & g(b)) \x\x (f(b) & g(a))。

例如,

代码语言:javascript
复制
if ((isA(event[1]) && isTens(event[3])) || (isA(event[3]) && isTens(event[1])))
     cnt += 1
end

如何使用宏@pmacro进行同样的操作,以便以这样的方式调用:

代码语言:javascript
复制
if (@pmacro(isA(), isTens(), event[1], event[3]))
     cnt += 1
end

到目前为止,我尝试过这样的方法

代码语言:javascript
复制
function isCombination(f, g, e1, e2)
    if (f(e1) && g(e2)) || (f(e2) && g(e1))
        true
    else
        false
    end
end

和,

代码语言:javascript
复制
julia> isCombination(BJcore.isA, BJcore.isTens, event[1], event[3])

但是,我应该在这里使用元编程吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 19:19:55

你不需要一个宏。由于Julia支持高阶编程,所以您可以定义一个函数(在这里我称之为predicate ),它接受函数fg作为参数,并执行所需的检查。

代码语言:javascript
复制
julia> predicate(f, g, a, b) = (f(a) && g(b) || f(b) && g(a))
predicate (generic function with 1 method)

julia> predicate(iseven, isodd, 4, 3)
true

julia> predicate(iseven, isodd, 3, 3)
false

julia> predicate(iseven, isodd, 3, 4)
true

编辑:对问题的编辑是在我写答案的时候发生的,但是你已经找到了解决方案。isCombinationpredicate的功能基本相同。

至于元编程:当有一个问题的非元编程解决方案时,“我是否应该使用元编程”的答案几乎总是否定的。元编程是一种强大的工具,但如果不谨慎谨慎地应用,您的代码很难阅读和维护。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73212054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档