SOGO論壇
  登入   註冊   找回密碼
查看: 598|回覆: 0
列印 上一主題 下一主題

[技術文章] C 與 Prolog 之比較 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-12 09:12:55 |只看該作者 |倒序瀏覽


語法理論說明了程式語言語法的描述方式,但是,卻沒有告訴我們,為何要設計這樣的語法,而語義理論則彌補了這個缺憾。

語義理論說明了語法所對應的意義,也就是程式應該如何執行的規範。透過語義理論,程式才能被賦予明確的意義,並且確定每個語句的執行方式。

舉例而言,下列兩個程式具有相當不同的語法結構,但是所做的事情卻相當類似,兩者均實作了泡沫排序法,但不同的是,C與Prolog語言具有不同的語法結構,也擁有不同的語意邏輯。

範例 7.1快速排序法的C語言程式
void quicksort(double a[], int left, int right) {
    int last = left, i;

    if (left >= right) return;

    swap(a,left,Random(left,right));
    for (i = left + 1; i <= right; i++)
        if (a[i] < a[left])
            swap(a,++last,i);
    swap(a,left,last);
    quicksort(a,left,last-1);
    quicksort(a,last+1,right);
}
void swap(double a[], int i, int j) {
    double tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}

       

範例 7.2快速排序法的Prolog程式
quicksort([X|Xs],Ys) :-
  partition(Xs,X,Left,Right),
  quicksort(Left,Ls),
  quicksort(Right,Rs),
  append(Ls,[X|Rs],Ys).
quicksort([],[]).

partition([X|Xs],Y,[X|Ls],Rs) :-
  X <= Y, partition(Xs,Y,Ls,Rs).
partition([X|Xs],Y,Ls,[X|Rs]) :-
  X > Y, partition(Xs,Y,Ls,Rs).
partition([],Y,[],[]).

append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).

C語言屬於結構化程式語言的一種,使用的是『運算、循序、分支、迴圈、函數』等結構,這是目前產業界的主流語言結構。但是Prolog則使用了串列 (LIST) 結構,採用邏輯推論中的Horn Clause語法,利用以『比對、遞迴』為主的結構。這兩種不同的構造方式,造成了截然不同的程式設計方式。

當語法樹建構完成時,就可以進行語義上的組合。在語法樹中的父子節點關係,是語義構造的重點所在。
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-6-17 21:40

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部