`
shxiao
  • 浏览: 29782 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
clojure学习

  clojure通过reader来读取字符流,根据不同的读形式来产生不同的数据结构。

reader forms
1: 标识符
      标识符以非数字字符开始,可是包含数字在内的字符,还有*, +, !-,_和?.   /用来分割命名空间,.表示类名修饰引用,标识符中包含.和/被称为被修饰过的, 以“:”开始的符号被保留。
    标识符相当于变量,是对一种事务的命名抽象,通过标识符来引用这个对象。
从标识符的源码中可以看到, 标识符实现了IFn和Named接口, 标识符有所属的命名空间(Named), 引用符号是会在TR中寻找标识符的对象。

2: 常量:
   字符串 "sss"
   数字: 整数,浮点数和有理数
  字符: \s eg: (str "ss" \newline)
  nil: 表示什么都没有和空值,相当于null和false
  布尔值: true false
关键字:像标识符除了(”:"开始, 不包含.和类名) { :name "s", :age 22}

3: 列表:
  ( a b c ) 常量列表'( 1 2 3)
4: 向量:
    [ 1 2 3 ]
5: Map:
   { :s "s" :d 12 :f 3} 或 { :s "s", :d 12, :f 3}
6: 集合
   #{ 1 2 3 } #{ :s :d }

宏符号:
    宏符号是reader读取forms的快捷方式。宏字符不能用于标识符
   1: Quote 引用(')
       'form => (quote form)表示引用form, form可以为上面所有的form, 'd , '1 'nil
   2: Character字符(\)
         产生一个字符常量, \s
   3注释 (;)
       单行注释
   4:Meta 元数据(^)
     ^form => (meta form) 查看对象的元数据
   5: Deref 用引(@)
     @form = ( deref form)解引用,取引用的值,相当于'的饭作用
   6: Dispatch分派(#)
       #“pattern" 正则表达式
       #^设置元数据 标识符,列表,向量和字典有元数据  , 这个宏符号读取第一个map把他设置都后面的对象上。
               #^String x, 表示 #^{:tag String} x, 用来存储类型信息
      #’ var-quote
           #'x = (var x)表示标识符本身
      #()匿名函数 %n参数位置, %&表示剩余参数
        #() = (fn [args] (...)) ( #(+ %1 %2) 1 2 )

语法语录 Syntax-quote( `note, ~Unquote, ~@Unquote-splicing)
    除了标识符,列表,向量,字典 `s和‘s是相同的
       对于标识符,`d 引用目前上下文中的标识符,产生一个修饰标识符, 如果标志没有命名空间并且以'#’结束,它引用一个相同的名字加_再加一个唯一id组
     对于列表,向量,字典,`建立一个相应数据结构的模板,在这个模板内,没有修饰的forms就像·递归的应用,但是form的`递归应用能够通过~和~@修饰来消除, ~产生值, ~@产生序列值
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics