将函数参数非交互地传递到Julia

时间:2015-12-30 17:12:12

标签: julia

我在文件中有一个Julia函数。让我们说它是下面的。现在我想将参数传递给这个函数。我试着做了

julia filename.jl randmatstat(5) 

但这会产生一个错误('令牌是意料之外的。不确定解决方案是什么。如果有一个主要功能/如何编写一个完整的解决方案,我也有点不知所措使用Julia。例如,Julia程序的起点/入口点是什么?

function randmatstat(t)
    n = 5
    v = zeros(t)
    w = zeros(t)
    for i = 1:t
        a = randn(n,n)
        b = randn(n,n)
        c = randn(n,n)
        d = randn(n,n)
        P = [a b c d]
        Q = [a b; c d]
        v[i] = trace((P.'*P)^4)
        w[i] = trace((Q.'*Q)^4)
    end
    std(v)/mean(v), std(w)/mean(w)
end

3 个答案:

答案 0 :(得分:5)

您可以尝试这样运行:

julia -L filename.jl -E 'randmatstat(5)'

答案 1 :(得分:3)

将以下内容添加到您的Julia文件中:

### original file
function randmatstat...
...
end

### new stuff
if length(ARGS)>0
    ret = eval(parse(join(ARGS," ")))
end
println(ret)

现在,你可以运行:

julia filename.jl "randmatstat(5)"

最初的尝试。请注意添加的附加引号以确保括号不会弄乱命令。

说明:Julia定义了ARGS变量,用于保存运行该文件的命令的参数。由于Julia是一个解释器,我们可以join将这些参数转换为字符串,将其解析为Julia代码,运行它并打印结果(代码对应于此描述)。

答案 2 :(得分:2)

朱莉娅没有这样的“切入点”。 当你从终端呼叫julia myscript.jl时,你基本上要求julia执行脚本并退出。因此,它需要是一个脚本。如果您脚本中的所有内容都是函数定义,那么除非您稍后从脚本中调用该函数,否则它将无法执行任何操作。

至于参数,如果你调用julia myscript.jl 1 2 3 4,所有剩余的参数(即在这种情况下,1,2,3和4)将成为一个特殊名称为ARGS的字符串数组。您可以使用此特殊变量来访问输入参数。

e.g。如果你有一个julia脚本简单地说:

# in julia mytest.jl
show(ARGS)

然后从linux终端调用它将得到这个结果:

<bashprompt> $ julia mytest.jl 1 two "three and four"
UTF8String["1","two","three and four"]

编辑:所以,根据我对你的程序的理解,你可能想要做这样的事情(注意:在julia中,函数需要在被调用之前定义)。

# in file myscript.jl
function randmatstat(t)
    n = 5
    v = zeros(t)
    w = zeros(t)
    for i = 1:t
        a = randn(n,n)
        b = randn(n,n)
        c = randn(n,n)
        d = randn(n,n)
        P = [a b c d]
        Q = [a b; c d]
        v[i] = trace((P.'*P)^4)
        w[i] = trace((Q.'*Q)^4)
    end
    std(v)/mean(v), std(w)/mean(w)
end

t = parse(Int64, ARGS[1])
(a,b) = randmatstat(t)
print("a is $a, and b is $b\n")

然后从你的linux终端调用它,如下所示:

julia myscript.jl 5