기본 콘텐츠로 건너뛰기

얼랭 변수가 확정되는 시기.





1. =   패턴매칭 오퍼레이션

      얼랭은 변수 정의가 별도로 없다. 변수가 정의되면 처음으로 할당될 때  변수가 정의 되므로 패턴매칭 연산자를 사용하면 패턴매칭과 동일한 값을 변수에 할당한다.

     X = 1.

    X가 아직 사용하고 있지 않으면 1의 값이 X변수와 바운드된다.

2. 함수 인자 패턴매칭
    함수가 정의되면 인자로 변수가 사용되면 그 인자는 함수가 호출되는 시점에 바운드 된다.

       >F  =  fun(Pid) -> Pid end.
       >F(1).​
       >1​
       > Pid = self().
       > F(Pid).
​       >

       함수가 정의된 부분은 함수 패턴매칭시 변수가 세팅된다.
       함수는 호출할때마다 스택을 만들고  메모리 관리영역을 별도로 생성하므로 함수호출시 마다 변수에 할당된다.

3. 패턴 이나 표현식에 사용한 경우
     처음 바인딩 할때 변수가 정의되므로 바인딩 된 것에 대해 명확히 체크해야 에러가 없다.

댓글

이 블로그의 인기 게시물

golang overload 처럼 처리하기

go 언어에서는 함수명이 같을 경우 재선언 오류를 발생시킨다. 다른 메소드를 만들고 오버로드 처리하도록 설계해서 구현해야 한다. 오버로드 처리를 위해 type switch를 사용해서 들어오는 타입에 따라 메소드 호출하는 처리를 사용한다. 함수나 메소드 인자를 다양하게 처리하려면 []interface{} 로 정의해서 다양한 인자를 받아서 오버로딩 처리하면된다. package main import (  "fmt" ) func main() {  var p Person  p = Person{"dahl"}  var s string = "moon"  fmt.Println(" overloading  ", p.Overload(s))  fmt.Println(" overloading", p.Overload(nil)) } type Person struct {  name string } func (this *Person) Overload(args interface{}) string {  switch args.(type) {  case string:   return this.GetName2("moon")  case nil:   return this.GetName1()  default:   return " no match"  } } func (this *Person) GetName1() string {  return this.name } func (this *Person) GetName2(s string) string {  return this.name }

Python으로 julian date 산출하기

줄리안 일수 산출을 위해서는 윤년여부 체크를 하여 실제 그 해의 해당 일자에 대한 일수를 365 나 366 일수에 해당 일자로 전환하여 산출한다. 현재 일자를 줄리안 즉 시퀀스 일자대로 수정하는 로직이다 #일자 산출 함수 def dayconvert(month) :      convertDay = 0      dayDict = {'01':0, '02':31, '03':59, '04':90, '05':120,      '06':151, '07':181, '08':212, '09':243, '10':273,      '11':304, '12':334}      convertDay = dayDict[month]      return convertDay #줄리안데이 산출 함수 def julian(date):     year = int(date[0:4])    month = date[4:6]    day = int(date[6:8])    #윤년여부 호출   yuncheck = yunyear(year)   # 일자산출   Dday = dayconvert(month)   # 줄리안 데이 산출   Dday = Dday + day   # 유년여부 체크 및 윤년일 경우 일수조정   if yuncheck == 1:       if int(month) > 2 :            Dday = Dday + 1   # 100일 미만일 경우 포맷조정 ...

golang 에서 Array 를 slice 로 convert 하기

golang에서  Array를  Slice 로 컨버전하면 에러가 발생하므로  slice 로 처리해서 컨버전해야 합니다. copy() 함수를 이용하여 슬라이스를 배열로 할당할 수 있는것도  Array 를 슬라이스로 처리하여 세팅해야 한다. type data struct {      id [ 13 ] byte      name [ 20 ] byte } func (this *data) Set(any [] byte ) {      copy (this.id[:], any[ 0 : 13 ])      copy (this.name[:], any[ 13 : 33 ]) } func main() {          var mapping [] byte = make ([] byte , 33 )      mapping = [] byte ( "0123456789012abcdefghijklmnopqrstuvxyz3456789" )      a := new (data)      a.Set(mapping)      fmt.Println( " id " , string ([] byte (a.id[:])))      fmt.Println( " name " , string ([] byte (a.name[:])))      fmt.Println( " mapping " , string (mapping))   ...