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

Tüm Başlıklar XML

1.  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
2.  Daha çok recursive function temeline oturtulmuştur.Anlaşılması biraz güçtür.Ama zevklidir.
Mesela bugun Yapay Zeka dersinin finali vardı.Vizede sorulan bir soru, verilen bir dizinin en büyük elemanını bulma sorusuydu.Oldukça anlaşılır yazmaya çalıştım.Prologun genel mantığını öğrenmek amacıyla güzel olabilir:

% if array has one element then Max is the element.
find_max_element( [LastElement|[]], Max) :-
   Max is LastElement.

% if array has more elements, test for max element

find_max_element( [Element|RestOfArray], Max ) :-
   find_max_element( RestOfArray, TempMax ),
   Element < TempMax,
   Max is TempMax.   

find_max_element( [Element|RestOfArray], Max ) :-
   find_max_element( RestOfArray, TempMax ),
   Element > TempMax,
   Max is Element.

find_max_element( [Element|RestOfArray], Max ) :-
   find_max_element( RestOfArray, TempMax ),
   Element = TempMax,
   Max is Element.

mennan
16 Ocak 2006 16:33
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?
» Tcl » Visual Basic » V » Scheme » Ctrl » ActionScript » Ada » Forth » JScript » APL » Eiffel » ECMAScript » SQL » VBScript » csh » Smalltalk » dBase » BASH » Fortran » DOS » Sh » Visual Prolog » AWK » Perl 5 » ksh » Ch » Haskell » PHP » COBOL » ColdFusion » BASIC » Perl » Delphi » Python » ALGOL » C » .NET dilleri » AppleScript » Lisp » Java » Pascal » Ruby » JavaScript » Matlab » XML » C# » EXEC » C++ » WSDL

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