你如何定義不可變的變量?我是茱莉亞的新手,一直在閱讀文檔,到目前爲止沒有發現任何內容。如何在julia中聲明不可變的變量?
通過不可交換我的意思是說,如果變量(比如符號)a和b相乘。一個B = \ = B一個
你如何定義不可變的變量?我是茱莉亞的新手,一直在閱讀文檔,到目前爲止沒有發現任何內容。如何在julia中聲明不可變的變量?
通過不可交換我的意思是說,如果變量(比如符號)a和b相乘。一個B = \ = B一個
關於可交換:朱不假定a*b
相同b*a
(例如:讓a
和b
是矩陣)。但是,對於某些特定類型組合,功能*(a,b)
的方法以交換方式進行操作,例如當a
和b
是數字時。
既然你在談論符號,我想那是想用表達式的符號表示。至少有兩種方法可以解決這個問題:
使用表達式的AST。 您可以通過:(expr)
引用任何表達式(有時:expr
是不夠的,取決於運算符優先級):
julia> ex = :(x*y*z)
:(x * y * z)
julia> typeof(ex)
Expr
注意的因素的訂單已保存(儘管關聯性還沒有)。 您可以通過查看檢查Expr
在它的head
和args
領域:
julia> ex.head
:call
julia> ex.args
4-element Array{Any,1}:
:*
:x
:y
:z
的ARGS例如可以是符號(類型爲Symbol
),常量值和其他表達式。 如果你想編寫自己的宏來處理表達式,這個技巧很有效,因爲宏的輸入是它的參數的AST。
定義你自己的類型並且過載*
函數。示例:
abstract Symbolic
# might as well make these immutable
immutable Sym <: Symbolic
name::Symbol
end
immutable Prod <: Symbolic
x::Symbolic
y::Symbolic
end
# The * function is imported by default.
# Usually, we need to import a function
# from Base before extending it.
*(x::Symbolic, y::Symbolic) = Prod(x, y)
你可以做
julia> x, y = Sym(:x), Sym(:y)
(Sym(:x),Sym(:y))
julia> x*y
Prod(Sym(:x),Sym(:y))
因爲我們*(x::Symbolic, y::Symbolic)
功能保留的參數的順序,我們可以看到它在創建Prod
對象。
在大多數語言中,第二種選擇是您唯一的選擇。第一種選擇更直接,因爲您不必爲自己編寫新的AST框架,也不必爲了表達而執行表達式。然而,哪一個更適合取決於應用。如果您想將不同的屬性與變量相關聯,則第二種方法似乎更容易。
這是你想要的東西嗎?
是的!謝謝。我不知道如何深入我需要知道,因爲在Python中它只是一個'交換=虛假'或'交換=真'的術語。 – faceforest 2014-10-02 15:56:14
你能澄清一下你的意思嗎?不可變(const)變量? – 2014-10-02 05:01:12
@ToivoHenningsson我編輯過 - 但我的意思是變量(比如符號)a和b是否相乘。 a * b = \ = b * a – faceforest 2014-10-02 05:02:40
你說那種語言? Prolog的? – StefanKarpinski 2014-10-02 05:34:42