Seminar:MetaSystem 어제 Lisp의 메타시스템에서 생각하다가, 최종원님이 마소에 기고한 Common Lisp 기사를 찾아서 읽어 보고 잇다. 그러다 문득 워드 커닝험의 언어에 대한 이야기, 필요에 의해 잠시 학습중인 ["R"]에 대한 경험(MatLab과 비슷하다). 그리고 DomainSpecificLanguage 에 링크걸린 글, Squeak의 E-toy, 요즘 만들려고 하는 텍스트 형식간의 변환(Outline Format to Wiki Format)을 위한 파서 간에 공통점이 모아지고 있다. --2005년 어린이날 아이디어를 쉽게 표현하는 도구에 대한 생각. "아이디어를 쉽게 표현하는 도구는 어떤 것(?)을 좀더 '간단하게 바꾸어주어', 도구를 쓰는 사람은 남는 에너지로 '아이디어' 자체에 집중하도록 도와준다" http://en.wikipedia.org/wiki/Metaprogramming ---- 가만 생각해보니 MetaSystem은 System의 타당성이나, 안정성 검사에 많은 노력을 들일 필요가 없네, 연산은 그 자체로 구성이 되었으니 당연히 시스템에 닫혀있으니깐. 그래서 시스템이 커져도 일관성을 유지하기 쉽고.. 음 AlanKay가 OOP system을 구현 한달 만에 했다구 하는데, 그 이유가 MetaSystem이기 때문이라고 했다. 왜 그런가? 생각해보자. 배아의 줄기가 자라나듯 한다? 일관성있는 디자인 때문에 자연스럽게 조직할 수 있다. (구현할때 시간이 적게 든다.)? 구현과정상 배워야 할게 자기 스스로 이다? (다른 시스템 위에서 새로운 시스템 만들 경우 배워야 할 것이 많다. 그리고 문제도 많이 생기고 복잡하다. ''원숭이가 사람을 잉태 할려면 얼마나 많은걸 알아야 하나! 천재 생물 박사도 하기 힘들다. 그런데 사람이 사람을 잉태하는일은 아가씨가 있으면 나도..ㅋㅋ 암튼!'') 부분과 전체가 동일한 능력을 가지고 있다? (프로토콜!) 음 과연 그런가? ---- Expression에 2개의 atom을 가진 리스트가 \'(a,b) 들어 가면 어디 cond 에서 처리하는거지? 종일 봐도 모르겠네. -_-; (defun eval. (e a) (cond ((atom e) (assoc. e a)) ((atom (car e)) (cond ((eq (car e) 'quote) (cadr e)) ((eq (car e) 'atom) (atom (eval. (cadr e) a))) ((eq (car e) 'eq) (eq (eval. (cadr e) a) (eval. (caddr e) a))) ((eq (car e) 'car) (car (eval. (cadr e) a))) ((eq (car e) 'cdr) (cdr (eval. (cadr e) a))) ((eq (car e) 'cons) (cons (eval. (cadr e) a) (eval. (caddr e) a))) ((eq (car e) 'cond) (evcon. (cdr e) a)) ('t (eval. (cons (assoc. (car e) a) (cdr e)) a)))) ((eq (caar e) 'label) (eval. (cons (caddar e) (cdr e)) (cons (list. (cadar e) (car e)) a))) ((eq (caar e) 'lambda) (eval. (caddar e) (append. (pair. (cadar e) (evlis. (cdr e) a)) a))))) (defun evcon. (c a) (cond ((eval. (caar c) a) (eval. (cadar c) a)) ('t (evcon. (cdr c) a)))) (defun evlis. (m a) (cond ((null. m) '()) ('t (cons (eval. (car m) a) (evlis. (cdr m) a))))) }}} --http://lib.store.yahoo.net/lib/paulgraham/jmc.lisp