為什麼lisp系的語言不用 操作符

時間 2021-06-03 11:19:12

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 的名字...