-
在Scheme里 .
可以作为一个identifier的一部分,我们可以把kvp
直接命名为key.value
。
这个key.value
的命名和assoc里的pair (key . value)
对应,显得非常自然。
-
在Scheme里,^
可以作为一个identifier的一部分,我们可以用它来模拟Haskell里的'
。
比如:数学里经常用到的p' p''
,在Haskell里能够很优雅的表现,但是Scheme也不差p^ p^^
。
这些优雅特性得益于Scheme的Prefix notation。
dcsjx
2
不知道其他怎么样,guile 里能够直接命名 p'
p''
的
Clojure 也可以:
user=> (def a' 1)
#'user/a'
user=> a'
1
user=> (def b'' 2)
#'user/b''
user=> b''
2
@dcsjx @whatacold
在Chez Scheme里:
(define a' 1) ; ok
(lambda (a') 1) ; error
((lambda (x) x) a') ; error
(define a^ 1) ; ok
(lambda (a^) 1) ; ok
((lambda (x) x) a^) ; ok
Clojure '
可以,^
不行:
user=> (defn foo [a'] (* 2 a'))
#'user/foo
user=> (foo 3)
6
user=>
user=> ((fn [b''] (* 3 b'')) 4)
12
user=>
user=> (def c^ 4)
Syntax error reading source at (REPL:16:10).
Metadata must be Symbol,Keyword,String or Map
Syntax error reading source at (REPL:16:11).
Unmatched delimiter: )
user=>
user=> (defn bar [c^] (* 2 c^))
Syntax error reading source at (REPL:18:15).
Unmatched delimiter: ]
Syntax error reading source at (REPL:18:24).
Unmatched delimiter: )
Syntax error reading source at (REPL:18:25).
Unmatched delimiter: )