LISP - 符号

  • 简述

    在 LISP 中,符号是代表数据对象的名称,有趣的是它也是数据对象。
    symbols 的特别之处在于它们有一个组件叫做property list, 或者plist.
  • 属性列表

    LISP 允许您将属性分配给符号。例如,让我们有一个“Person”对象。我们希望个“Person”对象具有姓名、性别、身高、体重、地址、职业等属性。属性就像一个属性名称。
    属性列表被实现为具有偶数个(可能为零)元素的列表。列表中的每一对元素构成一个条目;第一项是indicator,第二个是value.
    创建符号时,其属性列表最初为空。属性是通过使用创建的get在一个setf形式。
    例如,以下语句允许我们将属性 title、author 和 publisher 以及各自的值分配给名为(符号)“book”的对象。

    示例 1

    创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
    
    (write (setf (get 'books'title) '(Gone with the Wind)))
    (terpri)
    (write (setf (get 'books 'author) '(Margaret Michel)))
    (terpri)
    (write (setf (get 'books 'publisher) '(Warner Books)))
    
    当您执行代码时,它返回以下结果 -
    
    (GONE WITH THE WIND)
    (MARGARET MICHEL)
    (WARNER BOOKS)
    
    各种属性列表函数允许您分配属性以及检索、替换或删除符号的属性。
    get函数返回给定指标的交易品种的属性列表。它具有以下语法 -
    
    get symbol indicator &optional default
    
    get函数查找指定指标的给定交易品种的属性列表,如果找到则返回相应的值;否则返回默认值(或 nil,如果未指定默认值)。

    示例 2

    创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
    
    (setf (get 'books 'title) '(Gone with the Wind))
    (setf (get 'books 'author) '(Margaret Micheal))
    (setf (get 'books 'publisher) '(Warner Books))
    (write (get 'books 'title))
    (terpri)
    (write (get 'books 'author))
    (terpri)
    (write (get 'books 'publisher))
    
    当您执行代码时,它返回以下结果 -
    
    (GONE WITH THE WIND)
    (MARGARET MICHEAL)
    (WARNER BOOKS)
    
    symbol-plist函数允许您查看交易品种的所有属性。

    示例 3

    创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
    
    (setf (get 'annie 'age) 43)
    (setf (get 'annie 'job) 'accountant)
    (setf (get 'annie 'sex) 'female)
    (setf (get 'annie 'children) 3)
    (terpri)
    (write (symbol-plist 'annie))
    
    当您执行代码时,它返回以下结果 -
    
    (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
    
    remprop函数从符号中删除指定的属性。

    例 4

    创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。
    
    (setf (get 'annie 'age) 43)
    (setf (get 'annie 'job) 'accountant)
    (setf (get 'annie 'sex) 'female)
    (setf (get 'annie 'children) 3)
    (terpri)
    (write (symbol-plist 'annie))
    (remprop 'annie 'age)
    (terpri)
    (write (symbol-plist 'annie))
    
    当您执行代码时,它返回以下结果 -
    
    (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
    (CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)