常见的lisp函数/特殊形式/宏/等等。名称是什么意思,在哪里可以找到这些信息?

时间:2016-06-16 21:05:27

标签: lisp common-lisp

当我学习HTML时,我知道ol表示ordered listtrtable row等等,对我来说非常有帮助。一些lisp原语/表单很简单:funcall应为function calldefmacro - define macro。有些在中间 - incf是...... increment... f???但是因为普通的lisp太旧了,所以这些原始/特殊形式/等......似乎没有响铃。 你们能帮助我搞清楚吗?更重要的是:哪里可以找到一个权威的资源来学习每一个背后的意义/历史?(我将接受基于第二个问题的答案)

文档对我没有帮助:

* (describe #'let)

#<CLOSURE (:SPECIAL LET) {10013DC6AB}>
  [compiled closure]

Lambda-list: (&REST ARGS)
Derived type: (FUNCTION (&REST T) NIL)
Documentation:
  T
Source file: SYS:SRC;COMPILER;INFO-FUNCTIONS.LISP

* (documentation 'let 'function)

"LET ({(var [value]) | var}*) declaration* form*

During evaluation of the FORMS, bind the VARS to the result of evaluating the
VALUE forms. The variables are bound in parallel after all of the VALUES forms
have been evaluated."

* (inspect 'let)

The object is a SYMBOL.
0. Name: "LET"
1. Package: #<PACKAGE "COMMON-LISP">
2. Value: "unbound"
3. Function: #<CLOSURE (:SPECIAL LET) {10013DC6AB}>
4. Plist: (SB-WALKER::WALKER-TEMPLATE SB-WALKER::WALK-LET)

以下lisp原语/特殊表单/特殊运算符/函数是什么意思?

  • let,flet
  • progn这个
  • CDR
  • ACC
  • setq,setf
  • INCF

(在评论中写下更多内容,以便我们列出一个好名单!)

2 个答案:

答案 0 :(得分:7)

  • subprocess.Popen([sys.executable, "../main.py"]) LET 变量名称绑定到某个值
  • Config = ConfigParser.ConfigParser() Config.read("settings.ini") userId = Config.get('user', 'id') LET F unction-name绑定到某个功能
  • let:执行 PROG ram序列并返回 N 值(最后一个值)
  • flet C A 地址 R egister(历史性)
  • progn C onffnts D ecrement R egister(historical)
  • car ACC umulator
  • cdr SET Q uote,acc函数的变体,setq用户不在引用变量
  • set设置 F 引用,原始名称setq的缩写名称。这里不评估函数/位置。
  • setf INC 引用 F 引用,类似于setfq。增加一个地方。

其他惯例:

  • 更改地点的宏/特殊表单最后应有incfsetffsetfpsetf,...
  • DEF 的内容应该在前面有incfdecfdefdefinedefundefmethod ...
  • 具有破坏性的功能前面应该有defclass N on-consing:define-method-combination,...
  • P redicates末尾有nnreversep-p,...
  • 特殊变量的正面和背面都有adjustable-array-palpha-char-p,...

还有其他naming conventions

答案 1 :(得分:4)

  • let:嗯,这是一个普通的单词,在数学中使用(“让x = 3 in ...”)。
  • flet:我猜“函数let”,因为它就是它的作用。
  • progn:这可能与prog1prog2有关。我读的是“ prog ram, n 形式决定了结果值”。该程序有n个表单,因此它是形成progn表单结果值的最后一个表单。
  • carcdr:“内容地址注册”resp。 “内容减少登记册”。这与to the IBM 704 which Lisp was originally implemented for相关。
  • setq:“set quote”,最初是(set (quote *abc*) value)
  • 的缩写
  • setf:“设置字段”,出现词汇变量时出现。关于set函数的This is a good read
  

我在哪里可以找到关于学习每一个背后的意义/历史的权威资源?

HyperSpec是一个很好的起点,最终是ANSI标准。虽然“Common Lisp The Language”也可以对一些名字的历史有所启发。

(哦,你错了defmacro,那是"Definition for Mac, Read Only.“;))