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