본문 바로가기
Allegro Skill Language

[Allegro Skill] 함수(Procedure) 정의하는 방법

by 지식 퓨저니스트 2024. 5. 13.

포스팅 목차

    다른 프로그래밍 언어와 마찬가지로, Skill도 여러 번 사용하는 기능들을 함수로 만들어서 사용하곤 한다.

    이를 유저 정의 함수(User define function)라고 한다. 

    계산만 하는 것뿐만이 아니라, Shape, Void, Cline 등을 만드는 Skill 함수를 만들어 Skill Command로 간단히 만들 수 있다.

     

    Procedure을 통한 함수 사용 방법

    Skill에서 함수는 Procedure과 let을 사용해서 정의하곤 한다.

    정의 방법은 아래와 같으며, 아래 함수는 간단히 Local variable을 print 하는 기능을 한다.

    구성적인 측면에서만 참고하면 되고 자세한 내용은 아래 예제를 통해서 다루도록 하겠다.

    Procedure( function_name(input1, input2, input3, input4) # function_name 함수 이름 정의, input1~4 함수에서 필요한 input 값들
    	let((Local_var1,Local_var2)							 # let 내에서 사용할 Local variable 설정
        	Local_var1 = 1
            Local_var2 = 2
        		printf("Local_var1 = %d, Local_var2 = %d" Local_var1 Local_var2)	#함수 내용 Print 함수
            )
    )

     

    함수 정의 예제(distance)

    먼저 지난번에 작성했던 Code Grouping 예제를 Function으로 변경해 보자면 아래와 같다.

    기존 코드와 큰 차이점은 a1, a2, b1, b2을 설정해 주는 방법이다.

    기존 코드에서는 해당 변수(a1~b2)들을 Code group 내에서 정리해 주지만, 함수로 만들어줬을 때, 함수를 사용할 때 해당 값들을 설정해 준다. 이는 사소한 차이로 보일지 모르지만 사용하다 보면 코드를 바꾸지 않고 함수의 Input 값만 바꿔서 사용한다는 것은 엄청나게 편리한 것을 느낄 수 있다. 

     

     

     

    ## 기존 코드
    
    
    distance = {
    			a1=100
                a2=200
                b1=300
                b2=400
                dela = a1 - a2
                delb = b1 = b2
                sprt( dela**2 + delb**2)
                }

     

    ## 함수 정의
    
    procedure( distance(a1 a2 b1 b2)  #distance 함수 선언 및 input 선언 a1,a2,b1,b2 
    	let((dela delb))
                	dela = a1 - a2
                	delb = b1 = b2
                	sprt( dela**2 + delb**2)
           )
    )

     

    정의된 함수 사용하는 방법

    정의된 함수는 Skill interpreter에서 불러와서 사용할 수 있다.

    (Allegro skill interpreter는 Command 창에서 'set telskill' 명령어를 가지고 열 수 있다.)

    정의한 함수 distance에 input 값 4개를 집어넣어서 사용하면 된다. 아래에서는 1,2,3,4를 input으로 집어넣었음.

     

    Skill > load("./myskill.il")		# Skill 코드 파일 로드
    skill > distance(1 2 3 4)			# distance 함수 사용
    1.414								# procedure 마지막 expression 값 호출: sqrt( dela**2 + delb**2)