"열정"에서는 제어문도 일등급값
임수서룬뫼한말글 프로그래밍 언어 프로젝트 "열정"에서 드디어 제어문도 변수에 배정할 수 있게 되어버렸습니다.
"열정"에서는 후위 함수 호출을 사용합니다. 즉,
행출력(%('열정', '(My', 'Everything)').조합(' '))"
과 같이 사용하는 것이 아니라
%('열정', '(My', 'Everything)').조합(' ') 행출력
과 같이 사용합니다. %( ... )는 괄호의 일종으로, 함수 호출문이 아닙니다.
그리고 제어문 구조는 원래 이렇게 생겼습니다:
(달=10 이면서 날=16)이면
'Happy birthday, only one' 행출력
마침
...이랬던 것이 '이면'을 '특수문'형을 반환하는 내장 함수로 정의하는 것으로 되어버렸습니다. 이제 변수에 '특수문'을 배정할 수 있습니다.
((달=10 이면서 날=16)이면)->생일검사
생일검사
'Happy birthday, only one' 행출력
마침
한줄요약: 제어문 지못미
SICP에서 조건문을 함수로 만들 수 없음을 이야기했던 것으로 기억합니다. 책 좀 찾아봐야겠지만 아마 applicative order에서 조건문을 함수형태로 작성하고 재귀호출을 하면 무한재귀에 빠졌던 것으로 기억나네요.
사용자가 조건문을 함수를 작성할 수 없을 뿐이지, 조건문 자체가 expression으로 정의되어 있으면 문제는 없습니다. C언어에서 if문을 작성할 수는 없지만, 대신 expression으로 해석되는 ()?:를 쓰는 건 됩니다. 딱 한단계에 불과하지만 normal order가 되는 것이죠. 문법적으로 그렇게 규칙을 정하면 되긴 될겁니다.
사용자 정의 제어문 개념에 대해 생각하다가 임시 방편으로 저걸 생각했는데 나름 마음에 들어서 해봤는데 나름 괜찮은 것 같아서 놔두려고 생각하고 있었는데... 마법사책에서 "불가능하다!"고 말했다니 상황은 제 생각보다 심각한가 봅니다.