代码之家  ›  专栏  ›  技术社区  ›  Hasan A Yousef Michael Benjamin

将“limits”作为函数参数传递

  •  0
  • Hasan A Yousef Michael Benjamin  · 技术社区  · 6 年前

    我正在尝试构建一个接受2个输入的函数 limits Function ,所以我写了以下内容:

    function Σ(limits, f::Function)
        @show limits
        @show f
    end
    
    Σ((i=1:3), :(x->x^2))
    

    但无法运行,错误如下:

    错误:LoadError:函数不接受关键字参数

    我不明白我应该在函数声明或函数执行中更改什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Hasan A Yousef Michael Benjamin    6 年前

    看起来错误是在传递 函数时,在正确的代码下面,解决了这个问题:

    函数(limits,f::function)
    prefix,start,stop=limits.args[2].args
    out=0
    对于i=开始:停止
    输出+= f(i)
    结束
    外面的
    结束
    
    结果=(:(i=1:6),n->(6n+2))
    @显示结果
    < /代码> 
    
    

    其他4种解决方法是:

    使用对 Julia>函数(限制,F::函数) out=0 开始=限制。首先 停止=限制.秒 对于i=开始:停止 输出+= f(i) 结束 外面的 结束 (1方法的通用函数) Julia>(1=>6,n->(6n+2)) 一百三十八 < /代码>

    使用范围 Julia>函数(范围,F::函数) out=0 I=范围 输出+= f(i) 结束 外面的 结束 (1方法的通用函数) Julia>(1:6,N->(6N+2)) 一百三十八 < /代码>

    最后一个选项,可以重写为:

    函数(range,f::function)
    out=0
    (对于i=范围;out+=f(i);结束)
    外面的
    结束
    
    结果=(1:6,n->(6n+2))
    @显示结果
    < /代码> 
    
    

    通过使用已经存在的sumfunction,下面是一行代码:

    (range,f::function)=sum(f(i)for i in range)
    
    结果=(1:6,n->(6n+2))
    @显示结果
    < /代码> 
    
    

    或者,简单地说:

    f(n)=6n+2
    结果=总和(n=1:6时f(n)
    @显示结果
    < /代码> 
    
    

    也可以简化为:

    f(n)=6n+2
    结果=总和(f,1:6)
    @显示结果
    < /代码> 
    

    enter image description here

    其他4种解决方法是:

    # Using Pair
    julia> function Σ(limits, f::Function)
               out = 0.0
               start = limits.first
               stop = limits.second
               for i = start:stop
                   out += f(i)
               end
               out
           end
    Σ (generic function with 1 method)
    
    julia> Σ(1=>6, n->(6n + 2))
    138.0
    

    而且,

    # Using range
    julia> function Σ(range, f::Function)
               out = 0.0
               for i = range
                   out += f(i)
               end
               out
           end
    Σ (generic function with 1 method)
    
    julia> Σ(1:6, n->(6n + 2))
    138.0
    

    最后一个选项,可以重写为:

    function Σ(range, f::Function)
        out = 0.0
        (for i = range; out += f(i) ; end)
        out
    end
    
    result = Σ(1:6, n->(6n + 2))
    @show result
    

    通过使用已经存在的sum函数,下面是一个单行函数:

    Σ(range, f::Function) = sum(f(i) for i in range)
    
    result = Σ(1:6, n->(6n + 2))
    @show result
    

    或者,简单地说:

    f(n) = 6n + 2
    result = sum(f(n) for n=1:6)
    @show result
    

    也可以简化为:

    f(n) = 6n + 2
    result = sum(f, 1:6)
    @show result