[HYBIRD LISP-LIKE LANGUAGE]XISP REPORT (DRAFT) 2012 9 15
lisp吧
全部回复
仅看楼主
level 4
tinlinzzs 楼主
基本操作符:(QUOTE X) - 返回X如:(QUOTE (A B C)) 返回(A B C)在一般情况下,(A B C)会返回在第一个参数是B第二个参数是C时函数A的值,而(QUOTE (A B C))会返回(A B C)这个列表。
(ATOM X) - 如果X是个原子则返回T,否则返回()。如:(ATOM X)会返回T,而(ATOM (QUOTE (X Y Z)))会返回()。
(EQ X Y) - 如果X与Y相同或者都为空表时返回T,否则返回()如:(EQ (QUOTE A) (QUOTE A)) = T ; (EQ (QUOTE A) (QUOTE B)) = () ; (EQ (QUOTE ()) (QUOTE ())) = T
(CAR X) - 返回X的第一个组成部分如:(CAR (QUOTE (A B C))) = A
(CDR X) - 返回X的第二个组成部分如:(CDR (QUOTE (A B C))) = (B C)
【注:组成部分并不是指列表里面的原子(或者说元素)。组成部分指原LISP中点对中的两个元素,比如说(A.(B.(C.()))),A是这个点对的第一个元素,而(B.(C.()))则是这个点对的第二个元素。在XISP中,点对的表示法被弃用,而列表里的原子是右结合的,如(A B C)用点对来表示就是(A.(B.(C.())))。CDR只取第一层的第二个元素】
(CONS X Y) - 返回X与Y中所有原子所组成的列表如:(CONS (A B C) (D E)) = (A B C D E)
(COND X Y Z ...) - 条件分支。如果全部表达式都不为真则返回(),否则返回T具体情况如下:X Y和Z都是列表,列表的第一个元素是一个表达式,而第二个元素是当这个表达式为真时返回的值。如(COND ((EQ 1 2) (QUOTE EQUAL))表示当1等于2时返回EQUAL。
特殊操作符:
(LAMBDA X Y) - 返回参数为X操作为Y的函数。
如:(DEF (FUNC X) (LAMBDA (Y) (+ X Y)))(DEF X (FUNC 5))(DEF Y (X 5)) 此时Y等于5+5=10
(DEF X Y) - 定义X为Y,返回X如:(DEF X (QUOTE (A B))) 此语句返回X后,X将返回(QUOTE (A B))的值,即(A B)关于定义函数:当X是一个列表时,X的第一个元素将作为函数名,其余的元素将作为参数。X中定义的形参在Y中可以直接引用,如:(DEF (INC X) (+ X 1))(此处的+属于后来外围操作符的一员)将定义一个返回自增1后的结果。定义后(INC 1)将返回2,而(INC 2)会返回3,以此类推。
(LOAD X) - 加载名字为X的LISP代码。如(LOAD ABC)则会加载名字为ABC的LISP代码,而(LOAD (ABC DEF))会加载名字叫ABC DEF的LISP代码段
(COMMENT X) - 额,这个是……注释= =。这个操作符总是返回T,而注释是直接以列表的方式写的,如:(COMMENT (THIS IS A COMMENT))。如果用QUOTE将注释引用了的话,那么这句注释会成为这个代码段的名字。如:(COMMENT (QUOTE (STDIO LIBRARY)))会将这个代码段命名为STDIO LIBRARY
(PAIR X Y) - 返回X与Y组成的只有2个组成部分的列表如:(PAIR A B) = (A B) ; (PAIR (A B C) (D E)) = ((A B C) (D E))。【注:这里的组成并不是说将列表(如果是)里的元素全部单独取出来组成一个列表,而是将两个参数直接组成一个点对(虽然在XISP中没有点对这个表示法了,但是这里还是用点对来表示以方便理解)。如((A B C) (D E))用点对表示就成了:((A.(B.(C.()))).(D.E))。】
(CASE X Y Z ...) - 条件分支。用法与COND一样,但是CASE的最后一个参数只取第一个元素作为当前面所有的参数中的表达式都不为真时所返回的值。如:(CASE ((EQ 1 2) (QUOTE EQUAL)) ((QUOTE (NOT EQUAL)) (QUOTE (THIS QUOTE IS IGNORED))))会返回(NOT EQUAL),因为1并不等于2,而根据CASE的定义后面的(QUOTE (THIS QUOTE IS IGNORED))是被忽视掉的。
(FST X) - 返回X的『真正的』第一个元素如:(FST (QUOTE (A B C))) = A ; (FST (PAIR (QUOTE (A B)) (QUOTE C)) = (FST ((A B) C)) = A
(LST X) - 返回X的『真正的』最后一个元素如:(LST (PAIR (QUOTE (A B C)) (QUOTE (D E)))) = (LST ((A B C) (D E))) = E
2012年09月15日 07点09分 1
level 4
tinlinzzs 楼主
外围操作符:
(IN X) - 从端口X接受一个输入并返回
(OUT X Y) - 将Y发送到端口X,返回Y
其中标准端口有:_STDOUT(显示器)_STDIN(键盘)
【注:这两个的返回值是解析后的值,也就是说,当用户试图输入或输出一句LISP表达式,那么实际上输入或者输出的是这句表达式所返回的值。如(IN _STDIN)后,用户输入(+ 1 2)的话那么这句IN所返回的值就是(+ 1 2)所返回的值,也就是3】
(+ - * / ^ X Y) - 加减乘除幂……这个不用说了

2012年09月15日 07点09分 2
1