Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

>>  Prolog mantıksal programlama dillerinin en ünlülerinden biridir. 1972 yılında Alain Colmerauer tarafından ortaya çıkarılmış olmakla birlikte mantıksal programlama manasına gelen, fransızca "programmation en logique" kelime öbeğinin kısaltılmışıdır. Yapay zeka uygulamalarında veya bilgisayar dilbilimcilerinin araştırmalarında sıklıkla kullanılır. Zaten asıl kullanım amacı natural language processing 'dir.

Ayrıca Declarative programlama dilleri ailesine aittir. (Bilindiği gibi C, C plus plus, Fortran gibi diller Imperative programlama dilleri ailesine aittir.) Bu yüzden proramlamada Prolog 'u sonradan öğrenmek biraz zor olabiliyor. Neden mi ? Çünkü imperative dillerde değişken tanımlayıp içine değer atmaya alıştığımız, karar ifadelerinde if kullandığımız, döngüleri for, while gibi yapılarla sağladımız fakat bunların neredeyse hiç birinin prolog 'da olmayışı anlamasını biraz zorlaştırıyor :) Dilin kullanılmadan önce first-order predicate calculus üzerine bilgi sahibi olmak gerekiyor. Çünkü prolog tamamiyle bunun üzerine kurulu.

Aşağıda prolog ile yazılmış bir stack (Türkçe : yığıt) implementasyonu görüyorsunuz. Burada stack 'e istenilen değerler push edilip sonra yine istenilenler pop edilebiliyor. Stack yapısını sağlamak için linked list (Tükçe : bağlaçlı liste) kullanılması  daha güzel bir örnek olmasını sağlıyor. Biraz artislik yapiyim :)) Derleyici olarak Visual Prolog v.5.2 kullanılmıştır. Ayrıca buraya yazmadan önce test edildi :)


/**************************************************
   http://www.bilisim-kulubu.com
  
  " Stack Using Linked List "
                           
   By MrOK - 2003                               
**************************************************/

domains
  linked_list = node(char,linked_list);empty()

predicates
  create_linked_list(linked_list,linked_list) - nondeterm(i,o)
  push(char,linked_list,linked_list) - determ(i,i,o)
  pop(linked_list,linked_list) - determ(i,o)
  do(linked_list) - nondeterm (i)
  action(char,linked_list,linked_list) - nondeterm (i,i,o)
  repeat - nondeterm ()

clauses

  do(List):-
        repeat,nl,
        write("********** MENU **********"),nl,
        write("Enter 1 to push"),
        write("Enter 2 to pop"),
        write("Enter 3 to exit"),
        write("**************************"),nl,
        write("Choice : "),
        readchar(X),write(X),nl,
        action(X, List, NewList),
        do(NewList).

  action('1',List,NewList):-
        write("Enter characters or  !  to end: "),
        create_linked_list(List, NewList).
  action('2',List,NewList):-
        pop(List,NewList),
        write("Press a key to continue"),
        readchar(_).
  action('3', _, empty):-
        write("BYE BYE"),
        exit.
  /*********************************************************/ 
  create_linked_list(List, NewList):-
        readchar(C),
        C<>'!',!,
        write(C, " "),
        push(C, List, TempList),
        create_linked_list(TempList, NewList).
        create_linked_list(List, List).
  /*********************************************************/
  push(X,List,node(X,List)).

  pop(empty,empty) :- !, write("Stack is empty !").
  pop(node(Item,List),List) :- write("Popped Item : ",Item).     
  /*********************************************************/
  repeat.
  repeat:-repeat.

goal
  write("***** Character Stack Using Linked List *****"),nl,
  write("By MrOK"),nl,
  do(empty). /* Initially stack is empty */



MrOK
26 Mayıs 2005 19:56 ~ 07 Haziran 2005 20:16
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
» Sh » JavaScript » DOS » Lisp » VBScript » C++ » Tcl » ActionScript » XML » Forth » csh » Matlab » Fortran » Ctrl » BASIC » Visual Basic » Eiffel » PHP » ALGOL » EXEC » Perl 5 » V » Ruby » Pascal » ColdFusion » SQL » COBOL » ECMAScript » Scheme » Perl » Smalltalk » Ch » BASH » WSDL » APL » AppleScript » Ada » Haskell » C# » dBase » C » Java » Visual Prolog » Delphi » JScript » .NET dilleri » Python » AWK » ksh

© 2005, Bilişim Kulübü. (1109 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen