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

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

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

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

 P(x,y):x>0 AND y0

Q(x,y,z):DIVIDE(z,x)AND DIVIDE(z,y)AND

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

   DIVIDE(u,y))─→zu)

  ② 示范說明:有輸入輸出比較方法、程序示蹤方法,例如

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

   CONCAT[(LM),(NOP)]=(LMNOP)

程序根據上述例子,得知CONCAT函數的輸入是兩張表,而輸出則是將兩張表合並成一張表,此即為比較輸入輸出的示范說明方法。又如

  SORT[(3142)]─→( )

      (142)─→(3)

      (42)─→(13)

      (2)─→(134)

      ( )─→(1234)

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

  ③ 自然語言說明:用自然語言提出對程序的要求。這種說明通常是交互的,也就是通過人和系統間的對話來完成程序說明。例如,用於模擬簡單排隊問題的自然語言程序設計系統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.