비 호환 변수를 어떻게 정의합니까? 나는 줄리아에게 새로운 사람이고, 의사를 읽었고, 지금까지 아무것도 발견하지 못했다.줄리아 (Julia)에서 비 교환 변수를 어떻게 선언합니까?
변경할 수없는 것은 변수 (기호) a와 b에 곱해지는 것을 의미합니다. B = \ = B 교환 법칙 소개
비 호환 변수를 어떻게 정의합니까? 나는 줄리아에게 새로운 사람이고, 의사를 읽었고, 지금까지 아무것도 발견하지 못했다.줄리아 (Julia)에서 비 교환 변수를 어떻게 선언합니까?
변경할 수없는 것은 변수 (기호) a와 b에 곱해지는 것을 의미합니다. B = \ = B 교환 법칙 소개
: (예 : a
및 b
이 행렬하자) 줄리아 a*b
가 b*a
과 동일 함을지지 않습니다. 그러나 유형의 특정 조합에 대한 함수 *(a,b)
의 메서드는 a
및 b
이 숫자 인 경우와 같이 교환 가능한 방식으로 작동합니다.
기호에 대해 이야기하고 있으므로 표현의 상징적 표현으로 작업하고 싶습니다. 이 문제를 해결하려면 적어도 두 가지 방법이 있습니다.
표현식의 AST로 작업하십시오. 당신은 :(expr)
으로 어떤 표현을 인용 수 (때로는 :expr
이 충분하다, 연산자 우선 순위에 따라 다름) : (연관성이 없다가 있지만) 요소의 순서가 보존되어있다
julia> ex = :(x*y*z)
:(x * y * z)
julia> typeof(ex)
Expr
하는 것으로.
julia> ex.head
:call
julia> ex.args
4-element Array{Any,1}:
:*
:x
:y
:z
인수가 될 수있다, 예를 들어 : 그것은 head
및 args
필드의에서 당신은보고하여 Expr
을 검사 할 수 있습니다 기호 (유형 Symbol
), 상수 값 및 기타 식. 매크로에 대한 입력이 인수의 AST이므로 표현식을 처리하는 자체 매크로를 작성하려는 경우이 방법이 효과적입니다.
고유 한 유형을 정의하고 *
기능을 오버로드하십시오. 예 : 우리 *(x::Symbolic, y::Symbolic)
함수는 인수의 순서를 유지하기 때문에
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))
을 수행 할 수 있습니다, 우리는 그것이 생성 된 Prod
객체를 볼 수 있습니다.
대부분의 언어에서 두 번째 대안은 유일한 옵션입니다. 첫 번째 대안은 더 직접적입니다. 왜냐하면 새로운 AST 프레임 워크를 직접 작성할 필요가 없으며 표현을 실행하기 위해 표현을 실행하지 않아도되기 때문입니다. 그러나 어느 쪽이 더 적합한지는 응용 프로그램에 달려 있습니다. 다른 속성을 변수와 연관 시키려면 두 번째 방법이 더 쉬워 보입니다.
찾고있는 것이 었습니까?
예! 고맙습니다. 저는 파이썬에서 단순히 '교환 가능 = 거짓'또는 '교환 가능 = 참'이라는 용어를 아는 것이 얼마나 심오했는지 알지 못했습니다. – faceforest
약간의 의미를 명확히 할 수 있습니까? 변경할 수없는 (const) 변수? –
@ ToivoHenningsson 나는 편집했다. 그러나 변수 (기호라고한다) a와 b가 곱해진다는 것을 의미한다. a * b = \ = b * a – faceforest
어떤 언어로 말합니까? 프롤로그? – StefanKarpinski