Emacs Lisp基础数据类型

来源:互联网 发布:linux应用增量更新 编辑:程序博客网 时间:2024/06/07 15:49

Table of Contents

  • 1. List Data Types

List Data Types

  1. 基本类型有: integer, float, cons, symbol, string, vector, hash-table, subr, byte-code function
  2. 字符一般以?开头,如(print ?A) => A
  3. Symbol: lisp object的符号表示,用来表示object的名称 (symbol-name ‘foo) => “foo”

    • symbol按照存储方式分为两类,一类属于系统symbol,存储在bucket obarray中;一类属于编程使用symbol,使用make-symbol创建,在obarray中查找不到。
    • 常用函数

      func-nameusagedescsymbol-name(symbol-name ‘foo) => “foo”获取symbol名称,返回字符串名称make-symbol(setq sym (make-symbol “foo”)) => foo (eq sym ‘foo) => nil创建非obarray的symbolintern(setq sym (intern “foo”)) => foo (eq sym ‘foo) => t创建obarray 的symbolintern-soft(setq sym (intern “frazzle”)) => frzzle (intern-soft “frazzle”) => frazzle测试symbol是否存在mapatoms(setq count 0) => 0 (defun count-sym (s) (setq count (1+ count))) => count-sym (mapatoms ‘count-syms) => nil count => 1871 unintern delete a symbol in obarray
    • 变量

      var-namedescobarrayit’s a hash-table, used to stored intern symbol
  4. String相关函数

    func-namedescstringp objcheck whether object is string typestring-or-null-p objret t if obj is a string or ‘nil’char-or-string-p objret t if obj is a string or charmake-string cnt charret a string made up of COUNT repetitions of CHARstring &rest charsret a string containing the CHARssubstring string st &opt end(substring “abcdefg” 0 3)=> “abc”substring-no-properties str &opt st endlike substring but discards all text propertiesconcat &rest sequencesret new string containing sequencessplit-string str &opt sep omit-nulls trimsplits STRING into substringsvar: split-string-default-separatorssplit-string default sep
  5. Lists

    • Association Lists
      关联链表,如: ‘((a . 1)(b . 2))为key, value的键值对,通过相关函数可以做查询,存取操作。
      ‘(a . 1) 和 ‘(a 1)的区别,’(a . 1)是 a和1组成的,而’(a 1)是a和(1)组成。

      1. 相关函数

        • assoc key alist
          获取第一个匹配key对应的键值对,如:

          (assoc 'a '((a . 1) (b . 2) (a . 3))) => (a . 1)
        • rassoc value alist
          获取第一个匹配value值的键值对,如:

          (rassoc '1 '((a . 1)(b . 2)(c . 1))) => (a . 1)
        • assq key alist
          和assoc相同,唯一区别使用eq函数进行比较,而assoc使用的equal比较。如:

          (setq leaves '(("simple leaves" . oak)("compound leaves" . horsechestnut)))(assq "simple leaves" leaves) => nil(assoc "simple leaves" leaves) => ("simple leaves" . oak)
        • rassq value alist
          同assq对应,使用eq比较函数

        • assoc-default key alist &opt test default
        • copy-alist alist
          拷贝alist, 为取值拷贝,非地址拷贝。如:

          (setcdr (assq 3 copy) '("Martian Vacuum Pine"))(cdr (assq 3 needles-per-cluster)) => ("Pitch Pine")
        • assq-delete-all key alist
          返回删除alist所有匹配key取值的键值对,这个函数会破坏入参alist。
          如:

          (setq alist '((foo 1) (bar 2) (foo 3) (lose 4)))=> ((foo 1) (bar 2) (foo 3) (lose 4))(assq-delete-all 'foo alist)=> ((bar 2) (lose 4))alist=> ((foo 1) (bar 2) (lose 4))
        • rassq-delete-all value alist

0 0
原创粉丝点击