Translate

2018년 7월 21일 토요일

ruby lisp 비교

2011년 1월 6일 목요일

리스프는 함수형 언어입니다. 아래에 보듯 괄호 안의 가장 왼쪽 것이 함수입니다.
아래 아래 부분에 루비 소스에서 가장 왼쪽에 있는 토큰이 함수입니다.
그렇다고 해서 크게 힘든 건 하나도 없고 리스트에서 함수 만들듯이 하면 됩니다.
Glyph 클래스 내에 메소드 만들어 주고 block 을 받아서 instance_eval 해주면 됩니다.
리스프 예찬자들은 code as data, data as code 라고 예찬을 하는데,
그것이 아니라 list as data, data as list 라고 해야 옳습니다.
루비에서는 string as data, data as string 으로 또한 잘 됩니다. 가끔 리스프와 비교하여 단점이라고 하는 사람이 있는데 리스프에서 defmacro를 보면 code 가 아니라 list 로서 인자(argument)를 넘겨줍니다.
list 는 code의 부분 집합(subset)입니다.
리스프에서 코드를 데이터로 다룰려면 (quote (a b c)) 이런 식으로 써야 됩니다.
결국 루비에서 "(큰따옴표) 로 묶는 것이랑 별반 차이가 없습니다.
아래의 예제는 quote, " 를 사용한 예가 아니라 DSL 로서의 비교를 한 예입니다.

Glyph do
    name "L_BB"
    xMin 309
    yMin 827
    xMax 1743
    yMax 1542

    contour do
#       pt "x" => 1743, "y" => 827, "on" => 1
        pt 1092,827,1
        pt 1092,1542,1
        pt 1233,1542,1
        pt 1233,1288,1
        pt 1602,1288,1
        pt 1602,1542,1
        pt 1743,1542,1
    end # of contour

    contour do
        pt 961,827,1
        pt 309,827,1
        pt 309,1542,1
        pt 451,1542,1
        pt 451,1288,1
        pt 819,1288,1
        pt 819,1542,1
        pt 961,1542,1
    end # of contour
end # of glyph

(Glyph
    (name "L_BB")
    (xMin 309)
    (yMin 827)
    (xMax 1743)
    (yMax 1542)

    (contour
;       (pt "x" => 1743  "y" => 827  "on" => 1)
        (pt 1092 827 1)
        (pt 1092 1542 1)
        (pt 1233 1542 1)
        (pt 1233 1288 1)
        (pt 1602 1288 1)
        (pt 1602 1542 1)
        (pt 1743 1542 1)
    ) ; of contour

    (contour
        (pt 961 827 1)
        (pt 309 827 1)
        (pt 309 1542 1)
        (pt 451 1542 1)
        (pt 451 1288 1)
        (pt 819 1288 1)
        (pt 819 1542 1)
        (pt 961 1542 1)
    ) ; of contour
) ; of glyph

댓글 없음:

댓글 쓰기

응용 어플 끝글자 버그 잡는 거 진짜 개쉽습니다

그 동안 제가 끝글자 버그를 잡지 않고 방치한 이유 우선 책임, 의무가 없습니다. 제가 해당 어플 개발자도 아닐 뿐더러 오픈소스가 원래가 유지보수 의무, 보증 책임이 없습니다 . 이렇게 개떡 같은 게 오픈소스입니다. 전 과거 libhwp 하냐고...