1樓:
有人說了racket的read-cdot,我這裡示範下:(這裡為了省個檔案用了submod,一般不要這麼搞)
#lang
s-exp
syntax/module-reader
#:language(λ
()`(submod
(file,(
path->string
cdot
))dot))(
λ(t)
(parameterize
([read-cdot
#t])(t
)))(
require
racket/runtime-path
syntax/location
(for-syntax
racket/base
syntax/location))(
define-runtime-path
cdot
(syntax-source-file-name#'k))(
module
dotracket
(require
(for-syntax
racket/syntax))(
provide
(all-from-out
racket))(
provide
struct-dot
#%dot)(
define-syntax
(struct-dot
stx)
(syntax-case
stx()[(_
Name(Id
...))
(with-syntax
([(Ac
...)
(map(λ
(id)(
format-id
#'Name
"~a-~a"
#'Name
id))
(syntax->list#'(
Id...
)))])#'(
begin
(struct
Name(Id
...))
(define
IdAc
)...
))]))
(define-syntax
#%dot
(syntax-rules
()[(_x
y)(y
x)])))
儲存為cdot.rkt,然後
#lang
reader
"cdot.rkt"
(struct-dotA(
xyz))
(definea(
A123
))a.x
a.ya.z(A
(A'a
'b''
c)'d
'f).x.y輸出1
23'b多簡單
為什麼 Lisp 有許多的方言?
連城 這是因為LISP的廣義表結構和巨集機制非常適合去創造各種方言。而其它語言,諸如C Object C,也許可以看作是C的方言 持保留態度 但開發這些語言的編譯器 直譯器的難度相較於在LISP中開發LISP方言的直譯器的難度,要高出非常多。例如SICP一書作為MIT的本科教材,就非常輕鬆簡單地闡述...
為什麼在時下windows作為主流作業系統的條件下,Hadoop卻要在linux系統上執行
許中 嚇了我一跳 最近怎麼又出了個新的winds作業系統我竟然不知道?老了老了!看看其他回答才明白,原來是windows啊。言歸正傳。首先hadoop是分布式程式設計框架,編出來的程式常常要在幾十台乃至上百臺機器上執行的,如果每台機器都執行windows,這得是多大的一筆開銷啊 windows商業授...
類似 Lua 的指令碼語言為什麼不用編譯和連線呢?
馮東 如其它答案所說,Lua 和很多指令碼語言都是有編譯過程的。但是編譯的時候對 source code 中的 bookkeeping 資訊剝離的並不徹底。不過很多 runtime 用不到的資訊還是會去除掉,比如 local var 和 upval 最新官方文件叫 non local var 的名字...