Prolog 這類邏輯式程式語言為什麼沒有得到廣泛應用?

時間 2021-05-29 22:19:04

1樓:Jojojoshuali

Prolog語言比較適用於解像數獨類的遊戲,他的解題思路也很奇妙因為他解題的時候不要求很強大的演算法,在做任何解謎之前,prolog會把所有可能出現解的情況全部列出來,加以限制(像數獨每一行每一列的值都不能是一樣的),隨後會去把每一種情況拿去試條件,第一種情況試錯了會backtract回到前面提取第二個答案接著試。這就出現了乙個問題,如果你要解乙個非常非常複雜的問題好比100*100的數獨的時候,1-100排列可能性太多,會導致堆疊溢位,幸運的話程式會崩掉,不幸運的話就會出現系統安全漏洞

2樓:石松

話說三十幾年前,世界上誕生了兩種語言,prolog 以數學家的講話方式,操縱規則表及資料表,SQL以大眾英語的講話方式,只操縱二維的資料表,功能較弱。

但兩者相比,更多人能理解縱橫二維的資料表,更多人會說大眾英語,高中畢業生或商業主管要文科秘書查個資料,用SQL英文就能和機器對話,這是最早的科幻,最早的人工智慧。

人和機器機溝通永遠是最大的難題,讓機器聽懂人話是最大的成功,prolog 不死,只是凋零,被 SQL取代。

3樓:

前面有人說的很明白了,prolog不是通用語言,它主要用於邏輯推理方面,sql永遠不會像c那樣神通廣大,prolog同理

4樓:rainoftime

個人覺得邏輯程式語言的核心思想是"executable specifications", specification還比較親民(我沒有黑dependent type。。)當然像Prolog這樣基於Horn Clause,用Resolution以及各種Tricks, Hieuristics實現的確實是有很多侷限(表達力、通用性、效率、理論內涵等)~

不能完全否認logic programming的價值,, Liner logic programming, constraint logic programming等等一直都有研究價值,作為DSL也挺實用。, 「弱化」版本Datalog用得就更多。

-----4.6更新-----

@彭飛 對prolog的評價有一定道理,其他答案也說了logic programming其實應用有很多。

我從「技術影響」的角度補充一些,

Logic Programming是乙個很大的話題,有很多變種型別,實現技巧和應用場景。研究人員和內容有偏向人工智慧,搞各種奇怪的變種和應用(個人不是很了解。。),也有偏向正統的邏輯證明論(畢竟其核心還是proof search),甚至也能啟發Programming Language研究!

舉個例子,JM Andreoli為linear logic programming提出了「focusing」[1],Focusing的思想後面在proof theory中有很多發展,另外還和programming language研究中的一些概念如求值策略[2]有聯絡!(不得不感嘆Linear logic影響之深遠)

推薦倆人Dale Miller和Frank Pfenning,他們研究Logic programming, 對正統的Proof theory和Programming Language研究也有貢獻。(他們貌似都是還都是Church門下。。)

[1] Logic Programming with Focusing Proofs in Linear Logic

[2] On the unity of duality

5樓:行雲

比較贊同彭飛的回答!

初學prolog的感覺是它的目標是通過邏輯自動推導結果,使用者只需要描述事實和規則,而不關心具體的推導過程,大概是告訴它what ,不用關心how,然後就坐等結果!

但是確實受限的一階邏輯,很多事情是沒辦法通過一階邏輯描述。比如常用的數值計算,排序等等,而為了解決這些問題,必須要用類似於函式式程式設計的遞迴來求解,這時候就混亂不堪了。

所以Prolog還是不合適作為通用語言,作為邏輯知識庫的DSL還是蠻合適的

6樓:彭飛

Prolog 不流行,或者生命力不強和輸入輸出半點關係都沒有,真正的原因是Prolog 根本就算不上一門通用程式語言(general purpose programming language),它只是乙個用窮舉法(backward chaining search) 來求解受限的一階邏輯(database semantic first-order logic) 問題的DSL。這種DSL 最初發明出來就是為了快速解決constraint-based problems 的,比如型別推導、圖著色暫存器分配等,用來解決其他問題,比如數值計算,就會捉襟見肘,所以The Craft of Prolog 中才總結了那麼多然並卵的小技巧。

所以「Prolog 自動替程式設計師做了很多事情」的假象背後,是「任何問題都用窮舉法求解」的愚蠢策略。

7樓:

可以用這個觀點來看 prolog 和函式式語言的區別:前者的計算是多個方向的,並不區分輸入和輸出(或者說問題與答案),後者則是單個方向。

比如計算斐波那契數列,一般是給出頭兩項和計算規則,然後把後面的各項算出來,prolog允許你使用同乙個程式,既可以給出頭兩項計算出後面各項,也可以給出後面幾項反過來計算頭兩項。代價則是求解時占用更多的空間和時間

prolog之所以沒有普及,我個人認為是因為大部分的問題都是有明確的輸入和輸出要求,因此prolog並沒有什麼優勢,反而會被其劣勢所拖累

只有在特定問題上,邏輯式語言才能體現出其獨特的價值,比如Haskell的靜態型別推導就是乙個精簡版的「邏輯式語言」。

8樓:

七周七語言裡介紹過 Prolog 學習海豚語言的例子。

工業上除了比 C 早的東西以外,所有和 C 不像或者沒辦法拐彎抹角攀上親戚的語言都流行不起來。

9樓:大魔頭-諾鐵

工業上沒有應用可能因為 [門檻高、沒有很多現成的庫、開發效率低、不好評估效能] 等原因(正如函式式程式語言)

這些評價用在函式式程式語言上全部不成立哦函式式程式設計在計算機理論教學中應用很廣泛

這個要請有經驗的人來回答一下了,我個人感覺函式式程式設計在教學上更適合作為計算理論教學, 用來做計算機理論教學不見得合適。

程式語言的邏輯都是線性嗎?

社會閒散人員 是的,基於馮諾依曼理論設計的計算機,暫存器一次只會執行一條指令!雖然有些指令會進行跳轉和迴圈,但本質上依然是每次只會執行一行指令動作。這是由於計算機的工作方式導致的,人類暫時設計不出同時運算的計算機,當然宇宙中也不會存在這種東西。拿宇宙當做一台超級計算機,那麼以最小時間為單位行,宇宙也...

lisp作為「函式式程式設計」語言,與c語言有何不同?

馬vc 1,此函式非彼函式。lisp 裡函式是first class,換句話說乙個函式是可以當作其他函式的返回值 c 裡邊函式是third class,不能作為其他函式返回值,不能當其他函式的引數。c可以說是algo方言,algo像英語,lisp更像數學。2,函式式語言通有的特性是parameter...

函式式程式語言該如何表示樹結構呢?

二叉樹可以描述如下 datatype a tree Empty Node of a tree a a tree 多叉樹可以描述如下 datatype a tree Empty Node of a a tree list 參考 programing in standard ml 黃玄 表示成這麼乙個型...