LAMBDA, LAMBDAP 함수 소개 [2]
지난 게시물에서 IDL 8.4 버전에서 새로 도입된 LAMBDA에 관한 소개를 드린데 이어서 오늘은 LAMBDAP에 대한 소개를 해보도록 하겠습니다. 지난번 소개한 LAMBDA가 사용자 정의 함수(Function)를 간단하게 생성할 수 있는 기능을 제공한다면, LAMBDAP는 사용자 정의 프로시저(Procedure)를 간단하게 생성할 수 있는 기능을 제공한다고 보면 됩니다. 예를 들어 두 개의 인자값을 받아들여 간단한 계산을 수행하여 그 결과를 출력해주는 사용자 정의 프로시저형 부프로그램을 가정한다면, 우리가 알던 통상적인 방식으로는 다음과 같이 만들 수 있습니다.
PRO mycalc, a, b
PRINT, 'Result is', SQRT(a^2+b^2)
END
이렇게 만들어서 컴파일해놓고 메인 루틴에서 mycalc, 3, 4를 수행하면 Result is 5와 같은 결과를 얻는 방식이 되겠죠. 그런데 이와 동일한 작업을 LAMBDAP를 사용하면 다음과 같이 할 수 있습니다.
mycalc = LAMBDAP(a, b : PRINT, 'Result is', SQRT(a^2+b^2))
mycalc, 3, 4
전반적인 문법은 LAMBDA의 경우와 유사합니다. 사용될 인자변수들을 먼저 적고 :를 적고 그 뒤에 실제 수행내용을 그냥 적으면 됩니다. 물론 여기서 수행되는 실제 작업 내용은 단 한 줄로 되어 있는 경우입니다. 사실 LAMBDA의 경우는 이와 같이 단 한 줄 짜리 작업만 허용이 되었는데요. LAMBDAP의 경우는 약간 달라서 여러 줄 짜리 작업도 가능합니다. 예를 들어 다음과 같이 두 줄의 작업을 수행하는 프로시저형 부프로그램이 있을 수 있습니다.
PRO mycalc, a, b
PRINT, 'Result 1 is', a+b
PRINT, 'Result 2 is', a*b
END
이러한 부프로그램을 mycalc, 3, 4와 같은 방식으로 사용하면 그 결과는 두 줄에 걸쳐 다음과 같이 출력이 되겠지요.
mycalc, 3, 4
Result 1 is 7
Result 2 is 12
이와 같은 작업을 LAMBDAP로는 다음과 같이 수행할 수 있습니다.
mycalc = LAMBDA(a, b : PRINT, 'Result 1 is', a+b & 'Result 2 is', a*b)
mycalc, 3, 4
즉 & 기호를 이용하여 여러 줄의 내용을 연결시키는 방식을 사용하면 됩니다. 물론 정말로 많은 줄 수의 작업이 필요할 경우에는 이렇게 LAMBDAP를 사용하는 것보다는 전통적인 방식으로 프로시저형 부프로그램을 따로 정의하는 것이 더 효율적이긴 합니다. 하지만 단순한 내용의 프로시저형 부프로그램에 해당되는 작업이라면 이렇게 LAMBDAP를 사용하는 것도 나름 괜찮을 것으로 보입니다.
지금까지 2회에 걸쳐서 LAMBDA, LAMBDAP에 관한 간략한 소개를 해봤습니다. 처음 도입된 기능이라 아직은 널리 활용되고 있지는 않을 것 같지만, 사용하기에 따라서는 프로그래밍의 효율성에 있어서 도움이 될만한 부분이 있을 것 같습니다. 각각에 대한 좀 더 자세한 내용은 IDL 8.4의 도움말에서 찾아볼 수 있다는 점 참조하시면 되겠습니다.