LISP牛就牛在它跟圖靈機一樣強,理論上能算任何可計算的問題。因為它基于遞歸函數(shù),不光數(shù)能搞,符號也能玩得轉(zhuǎn)。McCarthy搞出這套語言,就是沖著AI來的,處理符號賊溜。
而且LISP賊簡單粗暴——數(shù)據(jù)和代碼長得一模一樣,都是S-表達式,用括號套列表那種。表就是它的核心結(jié)構(gòu),想怎么嵌套都行,不用提前定死大小,靈活到飛起。
最騷的是,代碼能當數(shù)據(jù)處理,數(shù)據(jù)也能直接跑成代碼,完全不分家。啥功能都靠函數(shù)實現(xiàn),程序運行其實就是不斷求值函數(shù)調(diào)用,一層套一層。
控制結(jié)構(gòu)主打一個遞歸,雖然現(xiàn)在也有循環(huán),但精髓還是遞歸,整個語言的力量來源就在這兒。還有個超實用的點:原子可以掛一堆屬性值,相當于給變量隨便貼標簽,表示復雜問題特別方便。
內(nèi)存也省心,自帶垃圾回收,不用手動清理無用數(shù)據(jù)。
———
Prolog,走的是只說我要啥,不用教咋做的路子。你只要告訴它事實、規(guī)則和問題,剩下的它自己推,根本不用寫步驟,智能感拉滿。
底層是一階邏輯,理論硬核,表達力強,寫起來像自然語言,看著清爽,代碼量還小。
它自動搞定模式匹配(也就是合一)和回溯,這兩個可是AI里的基本操作。同一個問題能給你整出多個答案,為啥?一是執(zhí)行時會自動回溯找別的可能解;二是變量又可當輸入又可當輸出,提問方式五花八門,交互性超強。
傳統(tǒng)語言包括LISP都沒這本事。
數(shù)據(jù)和程序也是統(tǒng)一的,都用項來表示,存在同一個數(shù)據(jù)庫里。還能在運行時用ADDCL、DELCL這種命令動態(tài)改自己,實現(xiàn)自我進化,搞自學習程序很方便。
遞歸當然也是家常便飯。
而且LISP賊簡單粗暴——數(shù)據(jù)和代碼長得一模一樣,都是S-表達式,用括號套列表那種。表就是它的核心結(jié)構(gòu),想怎么嵌套都行,不用提前定死大小,靈活到飛起。
最騷的是,代碼能當數(shù)據(jù)處理,數(shù)據(jù)也能直接跑成代碼,完全不分家。啥功能都靠函數(shù)實現(xiàn),程序運行其實就是不斷求值函數(shù)調(diào)用,一層套一層。
控制結(jié)構(gòu)主打一個遞歸,雖然現(xiàn)在也有循環(huán),但精髓還是遞歸,整個語言的力量來源就在這兒。還有個超實用的點:原子可以掛一堆屬性值,相當于給變量隨便貼標簽,表示復雜問題特別方便。
內(nèi)存也省心,自帶垃圾回收,不用手動清理無用數(shù)據(jù)。
———
Prolog,走的是只說我要啥,不用教咋做的路子。你只要告訴它事實、規(guī)則和問題,剩下的它自己推,根本不用寫步驟,智能感拉滿。
底層是一階邏輯,理論硬核,表達力強,寫起來像自然語言,看著清爽,代碼量還小。
它自動搞定模式匹配(也就是合一)和回溯,這兩個可是AI里的基本操作。同一個問題能給你整出多個答案,為啥?一是執(zhí)行時會自動回溯找別的可能解;二是變量又可當輸入又可當輸出,提問方式五花八門,交互性超強。
傳統(tǒng)語言包括LISP都沒這本事。
數(shù)據(jù)和程序也是統(tǒng)一的,都用項來表示,存在同一個數(shù)據(jù)庫里。還能在運行時用ADDCL、DELCL這種命令動態(tài)改自己,實現(xiàn)自我進化,搞自學習程序很方便。
遞歸當然也是家常便飯。