2009-08-25 36 views
2

爲什麼大多數語言似乎只從邏輯的角度出現相當基本的控制結構?像If ...那樣的東西,Else ...,循環,對於每一個,switch語句等等。從邏輯的角度來看,標準列表看起來相當基本。爲什麼大多數編程語言中沒有更多的控制結構?

爲什麼在邏輯語法糖方面沒有太多的東西?也許像命題引擎那樣,你可以提供一系列前提或函數來返回複雜的自引用相互依賴函數和結果。有些東西可以將一系列複雜的條件鏈接在一起,但代碼的讀取方式很簡單明瞭。

前提1

前提2當且僅當前提1

前提3

前提4如果前提2和前提3

前提5當且僅當前提4

等...

結論

我意識到這種邏輯可以在函數和/或嵌套條件語句中構造。但爲什麼通常沒有更多的語法選項來構造這些邏輯命題,而不會導致看起來很難看的條件語句,這些條件語句很難讀取和調試?

是否有我們通常在主流編程語言中看到的控制結構類型的解釋?是否有特定的控制結構可以直接支持語言的語法?這是否會增加語言的不必要的複雜性?

回答

11

你看了一個Prolog? Prolog程序基本上是一套變成一個大的評估引擎的規則。

從我個人的經驗看,Prolog有點太奇怪了,我更喜歡ifs,whiles等等,但是YMMV。

+0

我聽說過它,但沒有做任何事情。將不得不探索它。 – 2009-08-25 17:49:47

2

自從我在大學的邏輯課上已經很長時間了,但我猜想這是將它們寫入語言與使用它們的頻率的混合。我不能說我曾經需要他們(我不記得)。對於那些你需要某種語言的人來說,語言設計師可能會認爲你可以使用基本結構來自己編寫邏輯。

只是我瘋狂的猜測。

5

布爾代數並不困難,並提供了一個解決方案,你可以想到的任何條件,加上無數的其他變體。

你可能會問「常用」算術表達式的特殊語法。誰說什麼是常用的資格?你在哪裏停止添加特殊的語法?

增加語言分析器的複雜性,不如使用構造性表達式語法,並結合通過定義函數的可擴展性。

+0

這正是爲什麼。問題中列出的「複雜條件列表」可以用布爾代數的方式很容易地表達出來。在幾乎任何環境下做一個評估「引擎」(將價值與條件綁定在一起的東西)都是非常微不足道的。 – Quintus 2009-08-25 17:29:07

+0

我想我同意。但我想知道是否有邏輯模式不容易在布爾代數中實現。我的例子無疑是簡單的。我想我需要打開舊的大學邏輯書來拿出一個例子。但是你是對的,因爲這個例子可能太難以執行了。 – 2009-08-25 17:48:56

+0

聽起來像你正在尋找一個問題。你還沒有給出一個這樣的例子什麼時候會有用的例子。 – 2009-08-25 19:47:44

0

因爲計算機是二進制的,所有決定必須降下來的1/0,是/否,真/假等

爲了提高效率,語言結構必須反映這一點。

+0

100111? 1 1011 11011 10. – harpo 2009-08-25 17:18:11

+0

不知道爲什麼這是downvoted? – 2009-08-25 17:23:49

0

最終,所有的代碼下降到在一次執行一條指令的微代碼。在微代碼和伴隨的CPU可以描述更加豐富多彩的東西之前,我們堅持使用一種非常通俗的語言。

+1

但是,您的編譯器總是可以將複雜/高級語句編譯成適合處理器的表單 - 畢竟這是它工作的一部分。 CPU也不能「理解」對象,類等東西,但編譯器可以將這些高級結構轉換爲處理器理解的更簡單,低級的指令。 – mipadi 2009-08-25 17:31:30

+0

-1回答是錯的,+1給mipadi說爲什麼 – naiad 2011-06-02 09:05:22

1

因爲大多數編程語言不提供足夠的工具,爲用戶實現它們,它不被視爲一個重要的功能足以爲實施者提供儘可能的延伸,它是不夠的需要還是足夠使用的是添加到標準中。

如果你真的想要它,使用它提供,或提供的工具來實現它的語言(例如,口齒不清宏)。

1

這聽起來好像你是描述一個rules engine

+0

是的,我認爲是。感謝您的鏈接。 – 2009-08-25 17:51:27

1

我們使用的基本控制算法鏡像什麼處理器可以有效地做。基本上,這可以歸結爲簡單的測試和分支。

這似乎限制了你,但很多人不喜歡寫的代碼看起來簡單的線條,需要處理器週期的數百或數千(或上百萬)來完成的想法。這些人中有系統軟件人員,他們寫的是操作系統和編譯器等。當然,大多數編譯器都會反映他們自己作者的擔憂。

1

它涉及對原子性的關注。如果你可以用簡單的結構Y,Z來表示A,B,C,D,爲什麼不簡單地不提供A,B,C,D而是提供Y,Z呢?

現有語言反映60年原子性和可用性之間的張力。現代方法是「小語言,大型圖書館」。 (C#,Java,C++等)。

+0

是真的。雖然:'goto' – naiad 2011-06-02 09:06:06

相關問題