Filter 过滤元组集合

Filter 过滤元组集合,filter,tuples,julia,iterable,Filter,Tuples,Julia,Iterable,我在Julia中玩易懂和理解,并试图编写一个简单的问题:找到所有小于10的数对,其乘积小于10。这是我第一次尝试: solution = filter((a,b)->a*b<10, product(1:10, 1:10)) collect(solution) 解决方案=过滤器((a,b)-> a*bp(1)*p(2)< p>我不认为有一种方法可以按你想的那样做,但是这里有一些你可以考虑的匿名函数: x->let (a,b)=x; a*b<10 end x->((a

我在Julia中玩易懂和理解,并试图编写一个简单的问题:找到所有小于10的数对,其乘积小于10。这是我第一次尝试:

solution = filter((a,b)->a*b<10, product(1:10, 1:10))
collect(solution)

<代码>解决方案=过滤器((a,b)-> a*bp(1)*p(2)< p>我不认为有一种方法可以按你想的那样做,但是这里有一些你可以考虑的匿名函数:
x->let (a,b)=x; a*b<10 end
x->((a,b)=x; a*b<10)
然后
@tup(a,b)->a*b<10
将根据您的喜好进行操作


在Julia中,对于反复做某件事并希望获得专门语法的情况,这是非常有用和常见的。但如果这是一次性的事情,我会避免这种元编程,因为添加新语法意味着学习新语法并使代码更难阅读。

对于这个特定示例,您还可以函数体:
a->prod(a)<10
,但是
@tup
示例的想法非常简洁。
x->let (a,b)=x; a*b<10 end
x->((a,b)=x; a*b<10)
macro tup(ex)
    @assert ex.head == :(->)
    @assert ex.args[1].head == :tuple
    arg = gensym()
    quote
        $arg -> ( $(ex.args[1]) = $arg; $(ex.args[2]) )
    end
end