LISP牛就牛在它跟图灵机一样强,理论上能算任何可计算的问题。因为它基于递归函数,不光数能搞,符号也能玩得转。McCarthy搞出这套语言,就是冲着AI来的,处理符号贼溜。
而且LISP贼简单粗暴——数据和代码长得一模一样,都是S-表达式,用括号套列表那种。表就是它的核心结构,想怎么嵌套都行,不用提前定死大小,灵活到飞起。
最骚的是,代码能当数据处理,数据也能直接跑成代码,完全不分家。啥功能都靠函数实现,程序运行其实就是不断求值函数调用,一层套一层。
控制结构主打一个递归,虽然现在也有循环,但精髓还是递归,整个语言的力量来源就在这儿。还有个超实用的点:原子可以挂一堆属性值,相当于给变量随便贴标签,表示复杂问题特别方便。
内存也省心,自带垃圾回收,不用手动清理无用数据。
———
Prolog,走的是只说我要啥,不用教咋做的路子。你只要告诉它事实、规则和问题,剩下的它自己推,根本不用写步骤,智能感拉满。
底层是一阶逻辑,理论硬核,表达力强,写起来像自然语言,看着清爽,代码量还小。
它自动搞定模式匹配(也就是合一)和回溯,这两个可是AI里的基本操作。同一个问题能给你整出多个答案,为啥?一是执行时会自动回溯找别的可能解;二是变量又可当输入又可当输出,提问方式五花八门,交互性超强。
传统语言包括LISP都没这本事。
数据和程序也是统一的,都用项来表示,存在同一个数据库里。还能在运行时用ADDCL、DELCL这种命令动态改自己,实现自我进化,搞自学习程序很方便。
递归当然也是家常便饭。