julialang中的循环模拟
我基本上是fortran语言的人。我在用fortran语言编写一个朱莉娅式的循环模拟程序,这让我发疯了。 顺便说一下,goto语句在这种天真的尝试中不起作用:julialang中的循环模拟,julia,Julia,我基本上是fortran语言的人。我在用fortran语言编写一个朱莉娅式的循环模拟程序,这让我发疯了。 顺便说一下,goto语句在这种天真的尝试中不起作用: x == y ? continue : goto mark1 mark1: println("hello") 它提出: syntax: extra token "mark1" after end of expression 我不完全确定这是否是一个格式良好的问题,但在实现本地goto时存在一个问题:。甚至还有一个原型实现的pull
x == y ? continue : goto mark1
mark1:
println("hello")
它提出:
syntax: extra token "mark1" after end of expression
我不完全确定这是否是一个格式良好的问题,但在实现本地goto时存在一个问题:。甚至还有一个原型实现的pull请求,但它有点停顿。在一个函数中,
@goto
现在已经实现了
function example(y)
for x in 1:1000
x == y ? continue : @goto mark1
end
@label mark1
println("hello")
end
有关更多信息,请参见下文:
尽管传统上不考虑循环,但是
@goto
和@label
宏可用于更高级的控制流。一种使用情形是,一个部件的故障应导致整个功能的重试,这在输入验证中通常很有用:
function getsequence()
local a, b
@label start
print("Input an integer: ")
try
a = parse(Int, readline())
catch
println("Sorry, that's not an integer.")
@goto start
end
print("Input a decimal: ")
try
b = parse(Float64, readline())
catch
println("Sorry, that doesn't look numeric.")
@goto start
end
a, b
end
然而,使用递归,这个用例通常更清晰:
function getsequence()
local a, b
print("Input an integer: ")
try
a = parse(Int, readline())
catch
println("Sorry, that's not an integer.")
return getsequence()
end
print("Input a decimal: ")
try
b = parse(Float64, readline())
catch
println("Sorry, that doesn't look numeric.")
return getsequence()
end
a, b
end
虽然两个例子做的事情相同,但第二个更容易理解。但是,第一种方法性能更好(因为它避免了递归调用)。在大多数情况下,通话费用并不重要;但是在有限的情况下,第一种形式是可以接受的。我的意思是,基本上我想复制一些类似的东西:
doi=1,50…[计算一些东西]。。。如果(条件等式为真)循环其他。。。如果结束,则结束
。这就是我用Fortran实现它的方法,但是julia呢?我也看到过,但看起来很神秘,尽管谷歌搜索了一下,但我并不真正理解Fortran中的cycle
,所以很难给你一个好的答案。然而,Julia对循环有C风格的break
和continue
关键字,这可能会帮助您做您想做的事情:。如果有帮助,在fortran中,cycle
in fortran=continue
in C和exit
in fortran=break
in CAh,是的。我想这基本上回答了这个问题,但我会让OP来决定。这不等于x>y&&continue
?