|
Lisp 엔진으로서의 matheTOY 2010/04/28 16:28, 분류 : 분류없음
범용적인 부분까지 처리하다보니, 결국 그 연산 내용이 LISP 처리와 유사해지고 말았다. 현재의 matheTOY 엔진의 처리 과정은 LISP 처리 과정과 동일하며, 수식, 방정식, 함수식, 집합, 행렬, 리스트 등의 지원되는 처리외에 String 등 추가적인 변수 타입, 디바이스 I/O 등을 추가한다면, 훌륭한 Lisp 엔진이 될 것 같다. matheTOY 수식 처리 Language 엔진이 기존 Lisp 언어보다 강력한 것은, (어쩌면 기존 Lisp에도 있을지 모르지만) 1. Trans 함수 예를들어, Tan(x) = Sin(x) / Cos(x) 와 같은 '대입 정의 함수'를 Lisp에서 처리할 수는 있다. 그러나, (A ^ b) * (A ^ c) = A ^ (b + c) 같은 형태의 Trans 식은, LIsp 뿐만 아니라, 여타 랭귀지에서도 지원하지 않는 것으로 안다. (위에서 A, b, c는 단순한 수치가 아니라, 알고리즘이나 함수들을 포함한 함수식이다.) 물론 저것을 기존 제공된 알고리즘으로 풀 수는 있다. 그러나 그 알고리즘을 만드는 것은 Case마다 개별적이며 번거로운 과정이 필요하다. Trans 식은 매우 직관적이고, 수학적이다. 2. IsEqual 함수 두 함수식 또는 두 알고리즘식이 같은 것인지 판단한다. 복잡하게 얽힌 두 함수식, 두 알고리즘식이 같은지 여부를 판단하는 것은 Logic이나 함수, 알고리즘 자체를 원소로 다루는 계산에서 중요한 처리이다. 그것을 처리하도록 고안된 함수이다. 3. Mergin 함수 함수식 내에 Inverse 함수가 중첩되거나, 중복 의미 함수가 존재하거나, Operator-inverse 함수가 존재할 때, 그것은 가장 간단하게 표현되도록 Mergin하는 처리를 담당한다. 기술한 것 외에 여러가지 '함수식을 처리'하는 함수들이 있다. 또한, 그 ['함수식을 처리'하는 함수]가 포함된 함수식 역시 처리되는 대상 인자이다. Lisp을 지원하는 프로그래밍 툴의 희소성은 충분하고, 게다가 보다 강력한 메타 랭귀지 함수를 지원하므로, 도전해볼만 한 것으로 생각된다. 하지만, 무의미한 과부하가 걸리는 것은 아닌지... |
