自然語言與程序語言的思考
05-23
自然語言與程序語言的思考
狗咬某個動物的時候
貓
貓咬某個動物的時候
推薦閱讀:
來自專欄 程序員的日常我先試著講一個簡單的例子
- 概念
- 動物
- 動物能叫
- 動物能咬某個動物
- 動物能感覺疼
- 動物能死掉
- 狗
- 狗是一個動物
- 狗叫的時候
- 顯示「汪」
- 該動物感覺疼
- 該動物死掉
- 貓是一個動物
- 貓叫的時候
- 顯示喵
- 該動物感覺疼
class Animal{ virtual void Sound() = 0; virtual void Bite(Animal& a) = 0; virtual void FeelHurt() = 0; virtual void Die() = 0;}class Dog : public Animal{ virtual void Sound(){ print("wang"); } virtual void Bite(Animal& a) { a.FeelHurt(); a.Die(); }}class Cat : public Animal{ virtual void Sound(){ print("meow"); } virtual void Bite(Animal& a) { a.FeelHurt(); }}
以上兩端不同語言的東西應該是完全等價的,那麼到底有沒有可能讓我們把上面這一段中文,自動的翻譯成下面的代碼呢?
我覺得並不是完全沒有希望(當然這好像目前算是一個未解決的難題),以下是一些想法
一篇中文文檔中應該是一個良好的樹。其中可以包含這些節點:
- 頂級節點應該是:話題,概念,對象,常數(等)
- 話題:話題節點下的所有子節點用於生成namespace,這些節點只需要一個名稱
- 概念:概念節點下的所有子節點用於生成class
- 一個子節點的名稱就是class的name
- 其下的子節點可以包括:
- 主語+具有+x:主語是classname(或許也可以省略,或用代詞「他」),這用於生成一個屬性
- 主語+能夠+動詞:定義一個函數(方法)
- 主語+能夠+(介詞+泛指代詞+名詞)+謂語+泛指代詞+名詞+(介詞+泛指代詞+名詞):定義個一個帶參數的函數,其中泛指代詞(某個,某種,某隻,中文這裡因為量詞的關係比較複雜,反倒是英文可以直接用a/an, a dog, a cat)用於標記一個形參,而介詞及其賓語,謂語的賓語按照某個指定順序生成參數列表
- 動詞節點應該擁有子節點,定義了函數的實現(如果沒有則是純虛函數)
- 其中每一行均是一個語句,根據主語,查找其在概念節點中的動詞,然後根據該動詞的定義解析介詞和賓語的位置,並放入函數調用的參數列表
- 對象:對象節點下的子節點是其父節點下的變數
- 實例或許可以這樣:有一隻狗叫小黃
- 有(變數定義關鍵字)一隻(泛指代詞,無意義)狗(變數類型)叫(變數定義關鍵字)小黃(變數名稱)
- 生成代碼為:"Dog Huang;"(當然中英文轉換需要一個字典)
- 常數:和對象差不多,只是加上const
推薦閱讀:
※【工具】 根據云音樂歌單,下載FLAC無損音樂到本地
※怎麼證明我們的宇宙不是個程序?
※為什麼instagram被牆以後還能收到推送的通知?
※11 個免費學習編程的好地方
※有哪些適合編寫 C / C++ 的軟體?
TAG:程序 |