喻浩(?~989)

[拼音]:zidong chengxu sheji

[英文]:automatic programming

程式設計自動化或部分自動化的技術。自動化的涵義並非固定不變的,而是逐漸深化的,在科學技術的不同發展階段曾有不同的內容。最原始的程式設計,是通過硬連線裝置直接用機器語言(只包含0,1兩個符號)編制的;理想的情形是使用者只需用自然語言提出對程式的目的要求,然後由自動程式設計系統自動生成能滿足給定規範的程式。這種由低階階段向最高階階段演變的每一步,都是在某種意義上實現程式設計自動化。例如有了高階語言FORTRAN、PASCAL,人們就可以從面向機器的機器語言轉而採用面向過程的語言,從而可擺脫許多與所用機器有關的細節,而將程式設計序的精力集中在解題演算法上面。在這種情況下,編譯程式將使用者用高階語言編制的源程式變換為機器可以直接執行的目標程式。第一個公式翻譯語言 FORTRAN的編譯程式曾被稱為自動程式設計系統,原因就在於此。傳統的程式設計的每一執行細節,在程式執行時都已硬性規定,而人工智慧程式設計則是具有較高的靈活性,其具體細節要在執行過程中,根據環境條件由程式自行決定。從這個意義講,所有人工智慧程式也可納入自動程式設計範疇。從另一方面看,理解和推理是人工智慧中的重要問題,如果理解和推理的物件就是程式本身,它便成為自動程式設計的研究目標。因此,也可將自動程式設計看成人工智慧的一個重要分支。

從實用觀點來看,自動程式設計系統的目的在於減輕人編制程式的負擔。每個自動程式設計的基本特徵,表現在說明方法、目標語言、問題領域和編制方法等四個方面有所不同。

說明方法

分為形式說明、示範說明和自然語言說明等幾種方法。

(1)形式說明:採用機器定理證明技術研製自動程式設計系統時,相應的程式說明往往採用形式說明方法。例如,在求最大公因子的程式中,x、y 必須是正整數和z是最大公因子這兩個條件可分別用P(x,y)和 Q(x,y,z)來說明,即有

P(x,y):x>0ANDy>0Q(x,y,z):DIVIDE(z,x)AND DIVIDE(z,y)AND

凬u((u>0AND DIVIDE(u,x)AND

DIVIDE(u,y))─→z≥u)

(2)示範說明:有輸入輸出比較方法、程式示蹤方法,例如

CONCAT[(ABC),(DE)]=(ABCDE)

CONCAT[(LM),(NOP)]=(LMNOP)程式根據上述例子,得知CONCAT函式的輸入是兩張表,而輸出則是將兩張表合併成一張表,此即為比較輸入輸出的示範說明方法。又如

SORT[(3142)]─→()

(142)─→(3)

(42)─→(13)

(2)─→(134)

()─→(1234)顯示了SORT函式對輸入表(3142)重新排序而得輸出表(1234)的全過程,這就是程式示蹤的示範說明方法。

(3)自然語言說明:用自然語言提出對程式的要求。這種說明通常是互動的,也就是通過人和系統間的對話來完成程式說明。例如,用於模擬簡單排隊問題的自然語言程式設計系統NLPQ,就用這種程式說明方法。另外,還有綜合運用上述各種方法的混合說明方法。

目標語言

自動程式設計系統最終完成的目標程式中所使用的語言,一般是LISP,PL/1、GPSS(通用系統模擬語言)等高階語言。

問題領域

自動程式設計的應用領域,對選擇程式說明方法和執行方法有一定的影響,例如NLPQ系統用於編制排隊問題模擬程式;PSI系統則用於編制符號計算程式。前者用自然語言的說明方法,而後者則利用與示範說明相結合的混合說明方法。

編制方法

主要採用定理證明、程式變換、知識工程和傳統的問題求解等方法。在定理證明方法中,用定理證明程式來證明,對於所有給定輸入必存在一個滿足規定條件的輸出,這時整個證明程式實際上就是所需要生成的目標程式。程式變換方法是將程式的初始說明變換為等價的另一種形式的說明,這種變換的目的在於比較方便地生成目標程式。知識工程方法是將編制程式所需的大量專門知識放入知識庫,這時自動程式設計系統就成為用於自動編制程式的專家系統。傳統的問題求解方法是把目標程式歸約為若干子目標,然後應用問題求解技術。

自動程式設計尚處於起始階段。它是改進現有程式設計的技術途徑之一,在人工智慧領域也已得到應用。

參考書目

M.Rubinoff and M.C.Yovits,eds,Advance in Computers,Vol.15,Acadcmic Press,New York,1976.

D.R.Barstow,Knowledge-based Program Construc-tion,Elsevier Publ.Co.,Amsterdam,1979.