# 为什么lisp，或者说common lisp现在这么冷门呢？

#49

#50

#51

``````typedef struct
{
int b;
int c;
int d;
int e;
int f;
int g;
char x;
} A;

A foo(int b, int c)
{
A myA = {b, c, 5, 6, 7, 8, 10};
return myA;
}

int main()
{
A myA = foo(5,9);
return 0;
}
``````

#52

``````CL-USER> (let ((a (list 'a 'b 'c))
(b '(1 2 3)))
(declare (dynamic-extent a))
(setq z (nconc a b))
a)
(0 . 0)
CL-USER> z
(0 . 0)
CL-USER> (let ((a (list 'a 'b 'c))
(b '(1 2 3)))
(setq z (nconc a b))
a)
(A B C 1 2 3)
CL-USER> z
(A B C 1 2 3)
``````

#53

Omits copy and move (since C++11) constructors, resulting in zero-copy pass-by-value semantics

#54

#55

OBJ family 完全基于 reduction 和 term rewrite，立足于数学而独立于 Von Neumann 存在。

``````  op nil : -> List .
op _._ : Qid List -> List
op length : List -> Nat .
op _in_ : Qid List -> Bool .
vars I J : Qid .
var L : List .
eq length(nil) = 0 .
eq length(I . L) = s length(L) .
eq I in nil = false .
eq I in J . L = (I == J) or (I in L) .
``````

execution(reduction):

``````length(’a . ’b . ’c . nil)
= s length(’b . ’c . nil)
= s s length(’c . nil)
= s s s length(nil)
= s s s 0
``````

#56

s 与 or 的 定义呢？ List、nil是如何表示的？

s s s 0 的目的是什么呢？ 还是执行多次的s（可以是一段代码）？

#57

``````  op _+_ : Nat Nat -> Nat .
vars N M K : Nat .
eq N + 0 = N .
eq N + (s M) = s (N + M) .
``````

reduction

``````s s 0 + s s s 0
=> s s s s s 0
**** 等价于
2 ＋ 3 => 5
``````

or 的定义

``````fmod BOOL-OPS is
protecting TRUTH-VALUE .
op _and_ : Bool Bool -> Bool [assoc comm prec 55] .
op _or_ : Bool Bool -> Bool [assoc comm prec 59] .
op _xor_ : Bool Bool -> Bool [assoc comm prec 57] .
op not_ : Bool -> Bool [prec 53] .
op _implies_ : Bool Bool -> Bool [gather (e E) prec 61] .
vars A B C : Bool .
eq true and A = A .
eq false and A = false .
eq A and A = A .
eq false xor A = A .
eq A xor A = false .
eq A and (B xor C) = A and B xor A and C .
eq not A = A xor true .
eq A or B = A and B xor A xor B .
eq A implies B = not(A xor A and B) .
endfm
``````

#58
``````eq N + (s M) = s (N + M) .
``````

``````s s 0 + s s s 0  => s s s s s 0
``````

``````s s s s s 0    到底是什么呢？
``````

#59

`s s s s s 0` 就是代表自然数 5 了。为了方便也可以直接用 digits `5` 代表这个。在这里用 `s` 是为了表現这个语言的本質和与其他语言的区別。

#60

#62

#63

#66

#67

#68

#69

`s` 还是 `1` 实质上沒区別，尤其是对于一個很大的数。完全可以定义

``````op p X = s s s s s s s s s s X
``````

#71

#72

VHDL 写出来的东西是给人用的 给人用就得提供接口

verilog 和C语言类似我知道

VHDL和什么语言类似我就不知道了