한글로 Io 프로그래밍

요즘 Io로 시간날 때 이것 저것 장난치며 놀고 있는데, 모든 것이 다 교체가 가능하다는 말에, 한글로 프로그래밍도 제법 가능할까 하는 생각이 들어서, 한번 쑥 바꿔봤습니다. 흐흐. 우선, 기본적으로 Io는 한글이 식별자로 쓰이지 못하기 때문에 패치를 해야하는데, IoLexer.c에서 글자 읽는 부분을 패치를 했습니다. (아직은 임시로 테스트해보기 위한 흉악한 패치입니다. =3)

그래서 이제 코드가 어떻게 보일지 무척 궁금해서 얼마 전에 코드 레이스 관객 문제를 Io로 풀었던 것을 고쳐 봤습니다. 우선, 원래의 Io코드는 이렇게 됐습니다. (창준형이 수정해 줌)

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

이제 한글로 프로그래밍하려면, 기본 객체들이나 메쏘드들 이름을 일일이 바꾸는 초기화 루틴이 필요한데, 그 부분을 이렇게 넣어 봤습니다.

// 기본 오브젝트 메쏘드
슬롯 := 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)

번역은 대충 일단 간단하게만.. 흐흐;; 그러면 위의 개미수열 소스가 이렇게 됩니다.

연속열 같은것끼리 := 메쏘드(추가명령,
    반복글자 := 자신 의(0)
    반복횟수 := 0
    자신 변경가능하게 추가(0) 하나씩(글자,
        만약에(반복글자 != 글자,
            추가명령(반복글자, 반복횟수)
            반복횟수 = 0; 반복글자 = 글자)
        반복횟수 = 반복횟수 + 1
    )
)

개미 := "1"
(입구 인자 의(0) 숫자로 - 1) 번반복(
    다음개미 := 연속열 복사
    개미 같은것끼리(코드뭉치(코드, 반복횟수,
        다음개미 덧붙이기(코드 글자로, 반복횟수 문자열로)))
    개미 = 다음개미
)
개미 한줄로출력

이히히. 아무래도 대/소문자 구분이 없다보니 약간 코드가독성이 떨어지는 것 같기도 하고.. 한데, 나름대로 교육용 언어로는 괜찮을 것 같기도 하고… 띄어써야 할 부분이 문법과 다른 게 좀 거시기하고… (애매하군요 -.-;;)

7 thoughts on “한글로 Io 프로그래밍”

  1. Object/Lobby forward랑 Number에 메쏘드(자기자신을 리턴해도 되고 Ordinal/서수라는 객체를 리턴해도 되고) 추가하는 걸 쓰면

    > 반복글자 := 자신 의(0)
    > 입구 인자 의(0)

    > 반복글자 := 자신_에서(0 번째)
    > 입구 인자_에서(0 번째)

    로 바꿀 수 있을 거다. (언더바를 빼고 되게 할 수도 있겠지)

    예컨대,

    Number th:=method(self)

    list(10,20,30,40,50) at(4 th) ==> 50

  2. 근데 영어 코드를 국어 코드로 그냥 옮기는 것보다 그 추상차원(영어 설명을 한글 설명으로)에서 먼저 옮기고 나서 그걸 코드화하는 것이 더 좋을지도 모르겠다.

    피터 노빅의 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으로 바꾸면 우리말에도 적용되겠지.

  3. 아뉘… 이런 걸로 장난치며 논단말이야!!!
    “정신차려.. 아직 지구는 멸망하지 않아!!”

    암튼, 교육용 언어로 한글의 사용은 많이 고민해봐야 할 문제인거 같아. 🙂

  4. 역시 학교를 다니시니..
    뭔가 친분이 많은 분들과의 소통이 활발한듯해여..
    인간관계도 좋으신 퍼키님이시라니.. 대단~

  5. 우리말로 뭔가 해보려고 하시는게 좋군요.

    어느분이 그러더군요 평소에 우리말로 된 낱말을 모아서 글을 쓸 때 주욱 쓰는데 한 700개쯤 쓰니까 쓴 낱말 또 쓰고 또 쓰고 계속 반복 되더랍니다.

    그래서 결국 글쓰기를 그만두고 낱말공부를 하기로 했다고 합니다.

    이럴때 요긴하게 책상에 두고 두루두루 열어볼 책이 있으면 참 좋겠지요.

    그런때 생기면 참고할수 있도록 몇개 적습니다.

    —-
    우리말 갈래사전 —한글 문화원—

    새 우리말 갈래사전 —서울대학교 출판부—

    겨레말 갈래 큰사전 —서울대학교 출판부—

    겨레말 갈래 용례사전 —서울대학교 출판부—

    겨레말 갈래 전자사전 —?—인터넷시대에 맞춘 사전
    이라고 하며 아직 출판은 안됨 —

    —이 밖에는 좋은 낱말을 찾아쓰는데 쓸모있는게 북한에서 나온 “조선말 대사전”이 헌책방같은데 보면 있을겁니다.

Comments are closed.