요즘 Io로 시간날 때 이것 저것 장난치며 놀고 있는데, 모든 것이 다 교체가 가능하다는 말에, 한글로 프로그래밍도 제법 가능할까 하는 생각이 들어서, 한번 쑥 바꿔봤습니다. 흐흐. 우선, 기본적으로 Io는 한글이 식별자로 쓰이지 못하기 때문에 패치를 해야하는데, IoLexer.c에서 글자 읽는 부분을 패치를 했습니다. (아직은 임시로 테스트해보기 위한 흉악한 패치입니다. =3)
그래서 이제 코드가 어떻게 보일지 무척 궁금해서 얼마 전에 코드 레이스 관객 문제를 Io로 풀었던 것을 고쳐 봤습니다. 우선, 원래의 Io코드는 이렇게 됐습니다. (창준형이 수정해 줌)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sequence applyByGroup := method(msg, rechar := self at(0) repeats := 0 self asMutable append(0) foreach(ch, if(rechar != ch, msg(rechar, repeats) repeats = 0; rechar = ch) repeats = repeats + 1 ) ) current := "1" (Lobby args at(0) asNumber - 1) repeatTimes( next := Sequence clone current applyByGroup(block(ch, repeats, next appendSeq(ch asCharacter, repeats asString))) current = next ) current linePrint |
이제 한글로 프로그래밍하려면, 기본 객체들이나 메쏘드들 이름을 일일이 바꾸는 초기화 루틴이 필요한데, 그 부분을 이렇게 넣어 봤습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// 기본 오브젝트 메쏘드 슬롯 := getSlot("getSlot") 만약에 := 슬롯("if") 메쏘드 := 슬롯("method") 복사 := 슬롯("clone") 코드뭉치 := 슬롯("block") // 오브젝트 연속열 := Sequence do( 의 := 슬롯("at") 추가 := 슬롯("append") 하나씩 := 슬롯("foreach") 숫자로 := 슬롯("asNumber") 덧붙이기 := 슬롯("appendSeq") 한줄로출력 := 슬롯("linePrint") 변경가능하게 := 슬롯("asMutable") ) 입구 := Lobby do( 인자 := 슬롯("args") ) 숫자 := Number do( 번반복 := 슬롯("repeatTimes") 글자로 := 슬롯("asCharacter") 문자열로 := 슬롯("asString") ) 목록 := List do( 의 := 슬롯("at") ) // 지역객체 Locals 자신 := 메쏘드(self) |
번역은 대충 일단 간단하게만.. 흐흐;; 그러면 위의 개미수열 소스가 이렇게 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
연속열 같은것끼리 := 메쏘드(추가명령, 반복글자 := 자신 의(0) 반복횟수 := 0 자신 변경가능하게 추가(0) 하나씩(글자, 만약에(반복글자 != 글자, 추가명령(반복글자, 반복횟수) 반복횟수 = 0; 반복글자 = 글자) 반복횟수 = 반복횟수 + 1 ) ) 개미 := "1" (입구 인자 의(0) 숫자로 - 1) 번반복( 다음개미 := 연속열 복사 개미 같은것끼리(코드뭉치(코드, 반복횟수, 다음개미 덧붙이기(코드 글자로, 반복횟수 문자열로))) 개미 = 다음개미 ) 개미 한줄로출력 |
이히히. 아무래도 대/소문자 구분이 없다보니 약간 코드가독성이 떨어지는 것 같기도 하고.. 한데, 나름대로 교육용 언어로는 괜찮을 것 같기도 하고… 띄어써야 할 부분이 문법과 다른 게 좀 거시기하고… (애매하군요 -.-;;)
더 어려운거 같아요 -ㅅ-;;;;
Object/Lobby forward랑 Number에 메쏘드(자기자신을 리턴해도 되고 Ordinal/서수라는 객체를 리턴해도 되고) 추가하는 걸 쓰면
> 반복글자 := 자신 의(0)
> 입구 인자 의(0)
을
> 반복글자 := 자신_에서(0 번째)
> 입구 인자_에서(0 번째)
로 바꿀 수 있을 거다. (언더바를 빼고 되게 할 수도 있겠지)
예컨대,
Number th:=method(self)
list(10,20,30,40,50) at(4 th) ==> 50
근데 영어 코드를 국어 코드로 그냥 옮기는 것보다 그 추상차원(영어 설명을 한글 설명으로)에서 먼저 옮기고 나서 그걸 코드화하는 것이 더 좋을지도 모르겠다.
피터 노빅의 Rule of English Translation이라고 있는데:
To insure that you say what you mean:
1. Start with an English description of the algorithm
2. Write the code from the description
3. Translate the code back to english
4. Compare 3 to 1
여기서 English를 Korean으로 바꾸면 우리말에도 적용되겠지.
아뉘… 이런 걸로 장난치며 논단말이야!!!
“정신차려.. 아직 지구는 멸망하지 않아!!”
암튼, 교육용 언어로 한글의 사용은 많이 고민해봐야 할 문제인거 같아. 🙂
갑자기 ‘씨앗’이 생각나는군요.
역시 학교를 다니시니..
뭔가 친분이 많은 분들과의 소통이 활발한듯해여..
인간관계도 좋으신 퍼키님이시라니.. 대단~
우리말로 뭔가 해보려고 하시는게 좋군요.
어느분이 그러더군요 평소에 우리말로 된 낱말을 모아서 글을 쓸 때 주욱 쓰는데 한 700개쯤 쓰니까 쓴 낱말 또 쓰고 또 쓰고 계속 반복 되더랍니다.
그래서 결국 글쓰기를 그만두고 낱말공부를 하기로 했다고 합니다.
이럴때 요긴하게 책상에 두고 두루두루 열어볼 책이 있으면 참 좋겠지요.
그런때 생기면 참고할수 있도록 몇개 적습니다.
—-
우리말 갈래사전 —한글 문화원—
새 우리말 갈래사전 —서울대학교 출판부—
겨레말 갈래 큰사전 —서울대학교 출판부—
겨레말 갈래 용례사전 —서울대학교 출판부—
겨레말 갈래 전자사전 —?—인터넷시대에 맞춘 사전
이라고 하며 아직 출판은 안됨 —
—이 밖에는 좋은 낱말을 찾아쓰는데 쓸모있는게 북한에서 나온 “조선말 대사전”이 헌책방같은데 보면 있을겁니다.