Senin, 05 November 2012

Pengertian Prolog Dan Contohnya

Prolog adalah bahasa pemrograman logika atau di sebut juga sebagai bahasa non-procedural. Namanya diambil dari bahasa Perancis programmation en logique(pemrograman logika). Bahasa ini diciptakan oleh Alain Colmerauer dan Robert Kowalski sekitar tahun 1972 dalam upaya untuk menciptakan suatu bahasa pemrograman yang memungkinkan pernyataan logika alih-alih rangkaian perintah untuk dijalankan komputer.

Berbeda dengan bahasa pemrograman yang lain, yang menggunakan algoritma konvensionl sebagai teknik pencariannya seperti pada Delphi, Pascal, BASIC, COBOL dan bahasa pemrograman yang sejenisnya, maka prolog menggunakan teknik pencarian yang di sebut heuristik (heutistic) dengan menggunakan pohon logika.

Contohnya adalah pembuatan menara hanoi, dimana memindahkan sebuah balok atau N disk pada ujung kiri ke ujung kanan menggunakan perantara tengah tersebut. Dimana akhirnya akan sama dengan posisi semula. Contoh pada gambar adalah N=3 disk (balok).

Source code :
  1. /****************************************************************/
  2. /* TOWERS OF HANOI */
  3. /* =============== */
  4. /* */
  5. /* Call the predicate hanoi with the number of discs, you want. */
  6. /****************************************************************/
  7. DOMAINS
  8. TIME, ROW, COL, NUMBER = INTEGER

  9. PREDICATES
  10. hanoi( NUMBER )
  11. move( NUMBER, NUMBER, ROW, ROW, ROW, COL, COL, COL )
  12. inform( NUMBER, NUMBER, ROW, ROW, COL, COL )
  13. makepole( NUMBER, NUMBER, COL)
  14. dd(TIME)
  15. move_vert(COL,NUMBER,ROW,ROW)
  16. move_horizon(ROW,NUMBER,COL,COL)
  17. keyact(CHAR)
  18. gendelay
  19. showdelay
  20. nondeterm for(INTEGER,INTEGER,INTEGER)
  21. fill

  22. DATABASE
  23. determ delay(INTEGER)

  24. CLAUSES
  25. for(X,X,_).
  26. for(I,A,B):-B>A,A1=A+1,for(I,A1,B).
  27. fill:- % fill current window.
  28. makewindow(_,_,_,_,_,_,ROWS,COLS),
  29. RR=ROWS-1, CC=COLS-1,
  30. for(COL,0,CC),for(ROW,0,RR),
  31. scr_char(ROW,COL,'°'),
  32. fail.
  33. fill.
  34. gendelay :- inkey(CH), keyact(CH),showdelay,!.
  35. gendelay :- delay(DELAY),!, dd(DELAY).
  36. gendelay.
  37. dd(0):-!.
  38. dd(N):-N1=N-1,dd(N1).
  39. keyact('+'):-
  40. retract(delay(VAL)),VAL1=VAL+1+VAL div 10,
  41. VAL1<=25000,!,assert(delay(VAL1)).
  42. keyact('+'):-!,assert(delay(25000)).
  43. keyact('-'):-
  44. retract(delay(VAL)),VAL1=VAL-1-VAL div 10,
  45. VAL1>=0,!,assert(delay(VAL1)).
  46. keyact('-'):-!,assert(delay(0)).
  47. keyact(_):-retractall(delay(_)),assert(delay(0)).

  48. showdelay:-
  49. delay(DELAY),gotowindow(2),
  50. clearwindow,
  51. write("Delay= ",DELAY),gotowindow(1).
  52. hanoi(N) :-
  53. N<=13,!,
  54. textmode(ROWS,COLS),
  55. makewindow(4,7,0,"",0,0,ROWS,COLS),
  56. fill,
  57. ROWS1=ROWS-1,
  58. makewindow(3,40,0,"",ROWS1,0,1,COLS),
  59. write(" + Improve delay, - Lower delay, Other keys removes delay"),
  60. VB=2+6*N,VH=3+N,CV=N, CM=3*N, CH=5*N,
  61. STCOL=(79-6*N) div 2, STROW=(25-VH) div 2 -1,
  62. STROW1=STROW+1+VH,
  63. makewindow(2,74,0,"DELAY",STROW1,34,1,13),
  64. makewindow(1,7,52,"Hanoi",STROW,STCOL,VH,VB),
  65. retractall(delay(_)),
  66. makepole(N,N,CV),
  67. assert(delay(100)),
  68. showdelay,
  69. move(N,N,0,0,0,CV,CM,CH),
  70. cursor(0,0), write("Press any key"),readchar(_).
  71. hanoi(_):- write("maximum 13 disc's\n").
  72. move(H,1,HA,_,HC,CA,_,CH):-!,inform(H,1,HA,HC,CA,CH).
  73. move(H,N,HA,HB,HC,CA,CB,CC):-
  74. N1=N-1,
  75. HA1=HA+1,
  76. move(H,N1,HA1,HC,HB,CA,CC,CB),
  77. inform(H,N,HA,HC,CA,CC),
  78. HC1=HC+1,
  79. move(H,N1,HB,HA,HC1,CB,CA,CC).
  80. inform( H, N, H1, H2, C1, C2 ) :-
  81. C11=C1-N, C22=C2-N, NN=2*N,
  82. H11=H-H1, H22=H-H2,
  83. move_vert(C11,NN,H11,1),
  84. move_horizon(1,NN,C11,C22),
  85. move_vert(C22,NN,1,H22).
  86. makepole(_,0,_):-!.
  87. makepole(H,N,C):-HH=H-N,inform(H,N,HH,HH,C,C), N1=N-1, makepole(H,N1,C).
  88. move_vert(_,_,H,H):-!.
  89. move_vert(COL,SIZE,H1,H2):-H1

  90. H11=H1+1,
  91. field_attr(H11,COL,SIZE,112),
  92. field_attr(H1,COL,SIZE,7),gendelay,gendelay,
  93. move_vert(COL,SIZE,H11,H2).
  94. move_vert(COL,SIZE,H1,H2):-H1>H2,!, /* move down */
  95. H11=H1-1,
  96. field_attr(H11,COL,SIZE,112),
  97. field_attr(H1,COL,SIZE,7),gendelay,gendelay,
  98. move_vert(COL,SIZE,H11,H2).
  99. move_horizon(_,_,H,H):-!.
  100. move_horizon(ROW,SIZE,C1,C2):-C1
  101. C11=C1+1, HH=C1+SIZE,
  102. field_attr(ROW,HH,1,112),
  103. field_attr(ROW,C1,1,7),gendelay,
  104. move_horizon(ROW,SIZE,C11,C2).
  105. move_horizon(ROW,SIZE,C1,C2):-C1>C2,!, /* move left */
  106. C11=C1-1, HH=C11+SIZE,
  107. field_attr(ROW,C11,1,112),
  108. field_attr(ROW,HH,1,7),gendelay,
  109. move_horizon(ROW,SIZE,C11,C2).

  110. GOAL hanoi(12).

Sumber: 
 http://id.wikipedia.org/wiki/Prolog
http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_3.html

Tidak ada komentar:

Posting Komentar