什麼是性判據,或者告訴X或ÿ爲(或不)編程語言所要求的基本特點是什麼?標準來確定它是否是一個編程語言
我已經做了一些閱讀(Is HTML considered a programming language?,Turing complete和others),來到一個語言或語法必須是圖靈完備被視爲一種編程語言的結論。它是否正確?夠了嗎?
而我該如何確定是否圖靈完成?有沒有具體的標準?
是否有足夠的流控制結構(條件語句和循環)可以考慮圖靈完成?
什麼是性判據,或者告訴X或ÿ爲(或不)編程語言所要求的基本特點是什麼?標準來確定它是否是一個編程語言
我已經做了一些閱讀(Is HTML considered a programming language?,Turing complete和others),來到一個語言或語法必須是圖靈完備被視爲一種編程語言的結論。它是否正確?夠了嗎?
而我該如何確定是否圖靈完成?有沒有具體的標準?
是否有足夠的流控制結構(條件語句和循環)可以考慮圖靈完成?
術語「編程語言」有些模糊。正則表達式是否構成一種編程語言?大多數程序員會說是,即使正則表達式不完整。至於圖靈完備性,我不是專家,但我認爲有條件分支和無限堆棧(因此真正的機器只能逼近圖靈完備性)就足夠了。
編輯:經過一番研究,我發現這是不夠的。您至少需要兩個堆棧和一些最少數量的狀態(以及一個狀態轉換表)。
也許一個更爲務實的標準是,如果能夠記住任意數量的狀態並執行循環,那麼可能是完整的。
存在不是圖靈完整的編程語言。對於非Turing完整語言的一些示例,請參閱:Practical non-Turing-complete languages?
使非Turing語言完成的語言的一個優點可能是,例如,它可能足以執行您需要的任務,而簡單到足以讓你證明你的程序的屬性,這是你無法證明的。例如,在知道程序運行無誤的情況下,這可能很有用。
構成編程語言的確切含義有點模糊,但可以說它是一種可以表達計算的語言。如果我們看一下HTML,就不能創建一個計算任何東西的文檔;它只是告訴瀏覽器頁面應該如何顯示。重要的一點是,它不計算任何新東西。
就像馬塞洛說的那樣,它很模糊。
至於確定是否語言圖靈完整,我會向您推薦這樣一個問題:What are practical guidelines for evaluating a language's "Turing Completeness"?
什麼是性判據,或者告訴X或Y是所需的基本功能(或者不是)一種編程語言?
由於馬塞洛詩章已經告訴它是有點模糊,特別是因爲有特定領域的語言(DSL; http://en.wikipedia.org/wiki/Domain-specific_language)未圖靈完整,也常常被認爲是編程語言。
而我該如何確定圖靈是否完成?有沒有具體的標準?
確定編程語言是否完全是圖靈的一種方法是在其中編寫圖靈機(或Lambda演算的實現)。
另一種方式是,證明所有MU-遞歸函數 http://en.wikipedia.org/wiki/%CE%9C-recursive_function 可以由編程語言來計算。因爲可以證明命令式編程語言是圖靈完備的,所以如果存在變量賦值,一種表示數字0,後繼函數,前導函數和表示while循環的可能性,這是另一種方式辦法。
一個有時用來證明編程語言不是圖靈完成的方式(顯而易見的原因並不總是有效)是檢查所有程序是否終止;如果是的話,它不可能。
讓我們思考這些具體定義的後果:
一個圖靈完備的語言是一種編程語言:CSS becomes a programming language。
編程語言必須是圖靈完備的:也許,但是programs can be written otherwise。
現在有一個更好的定義:編程語言是一種可用於編寫程序的編程語言。
功能程序不計算任何東西;它會告訴結果應該是什麼。像Prolog這樣的邏輯編程語言也是如此。從語言理論的角度來看,編程語言的唯一要求是它存在一個明確的語法,所以對於任何有效的序列都有一個單一的語法結構。所述結構的意義取決於口譯員或翻譯員;一個漂亮的打印機,一個度量分析器和一個編譯器給同一個_program_賦予不同的含義(一個漂亮的打印機不關心不匹配的類型和操作,f.i.)。 – Apalala 2011-02-01 15:03:55