2017-09-15 12 views
0

Juliaには、特に関数定義がありますか?はいの場合はBNFは何ですか?それが持つ関数宣言と関数呼び出しを持つたとえばJuliaの関数定義

BNF

•Function Declaration 
function name (arguments :: type) 
     #expressions 
End 

<function> → (function <identifier> (<arguments>) <expressionList> end) | 
<identifier>(<arguments>) <expressionList> end 
<arguments> → <identifier> :: <type> | (<identifier> :: <type>),arguments>|e 

•Function Call 
     x = sum (12 , y :: Int32) 

<funcall> → <identifier> = <identifier> (<parameterList>) 
<parameterList> → <parameter> :: <type>, < parameterList> | <parameter> ::<type> | <parameter>, <parameterList> 
<parameter> → <identifier> | <element> | e 
+0

Julia構文はコンテキストフリーではありません。参照:https://groups.google.com/d/msg/julia-users/LwewtNffleo/f-AqxMulbFwJ –

答えて

0

マットB.コメントで述べたように、ジュリアの構文は文脈自由ではありません。

<...>が有効な関数呼び出しの場合、一般的に次は、有効な方法で定義されている:

function <...>; (body); end 
<...> = (body) 

さらには、関数呼び出しに戻り値の型注釈の追加を許可されています

function <...>::ReturnType; (body); end 
<...>::ReturnType = (body) 

返される型の代わりに、または返される型に加えて、whereの任意の数の句も使用できます。

function <...>::ReturnType where T; (body); end 
(<...>::ReturnType) where S = (body) 
function <...> where T where S; (body); end 
<...> where {S, T} = (body) 

短期および長期の両方の形式は、特定の修飾子をサポート:関数呼び出し自体は、いくつかの形で来ることができることを

global function <...>; (body); end 
local <...> = (body) 

は注意を。たとえば、これらはそれぞれ有効です。

x ← y = x + y 
function (x ← y)::Int; 10; end