2014-10-02 1 views
0

비 호환 변수를 어떻게 정의합니까? 나는 줄리아에게 새로운 사람이고, 의사를 읽었고, 지금까지 아무것도 발견하지 못했다.줄리아 (Julia)에서 비 교환 변수를 어떻게 선언합니까?

변경할 수없는 것은 변수 (기호) a와 b에 곱해지는 것을 의미합니다. B = \ = B 교환 법칙 소개

+0

약간의 의미를 명확히 할 수 있습니까? 변경할 수없는 (const) 변수? –

+0

@ ToivoHenningsson 나는 편집했다. 그러나 변수 (기호라고한다) a와 b가 곱해진다는 것을 의미한다. a * b = \ = b * a – faceforest

+0

어떤 언어로 말합니까? 프롤로그? – StefanKarpinski

답변

3

: (예 : ab이 행렬하자) 줄리아 a*bb*a과 동일 함을지지 않습니다. 그러나 유형의 특정 조합에 대한 함수 *(a,b)의 메서드는 ab이 숫자 인 경우와 같이 교환 가능한 방식으로 작동합니다.

기호에 대해 이야기하고 있으므로 표현의 상징적 표현으로 작업하고 싶습니다. 이 문제를 해결하려면 적어도 두 가지 방법이 있습니다.

  1. 표현식의 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 
    

    인수가 될 수있다, 예를 들어 : 그것은 headargs 필드의에서 당신은보고하여 Expr을 검사 할 수 있습니다 기호 (유형 Symbol), 상수 값 및 기타 식. 매크로에 대한 입력이 인수의 AST이므로 표현식을 처리하는 자체 매크로를 작성하려는 경우이 방법이 효과적입니다.

  2. 고유 한 유형을 정의하고 * 기능을 오버로드하십시오. 예 : 우리 *(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 프레임 워크를 직접 작성할 필요가 없으며 표현을 실행하기 위해 표현을 실행하지 않아도되기 때문입니다. 그러나 어느 쪽이 더 적합한지는 응용 프로그램에 달려 있습니다. 다른 속성을 변수와 연관 시키려면 두 번째 방법이 더 쉬워 보입니다.

찾고있는 것이 었습니까?

+0

예! 고맙습니다. 저는 파이썬에서 단순히 '교환 가능 = 거짓'또는 '교환 가능 = 참'이라는 용어를 아는 것이 얼마나 심오했는지 알지 못했습니다. – faceforest