برنامه نویسی پرولوگ
زبان برنامه نویسی پرولوگ
مقدمه ای بر زبان برنامه نویسی پرولوگ عموماً برنامه نویسی ویژوال پرولوگ از چهار بخش برنامه نویسی تشکیل یافته است.این بخشها عبارت اند از : بخش Clauses <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> بخش Predicates بخش Domains بخش Goal خلاصه ای از این چهار بخش در زیر آمده است: Clauses قلب برنامه نویسی پرولوگ است،در این بخش Fact ها و Rule ها را وارد می نماییم.در واقع نتیجه گیری های داخل Goal به این قسمت وابسته است. Predicates در این بخش predicate هایی را که می خواهیم ،در این قسمت وارد می کنیم.این قسمت می تواند به domain ها هم وابسته باشد. Domains در این قسمت می توان دامنه های را تعریف کرد که در استاندارد ویژوال پرولوگ نمی باشند. Goal در این قسمت اهداف ما،یا در واقع سولاتی را که از سیستم داریم و نتیجه اش را می خواهیم بدانیم،می پرسیم. دامنه کاربردها(۳ـ۲ـ۱) امروزه زبان پرولوگ در زمینه هوشه مصنوعی برای کاربردهای "جستجو" به کار گرفته میشود. مدل های زبان(بخش ۲ـ۳ـ۱) زبانهای قانونمند:متداولترین زبان قانونمند،زبان پرولوگ است که زبان برنامه نویسی منطقی نیز نامیده میشود. نحو چنین زبانهایی بصورت زیر است: enabling condition1 ------ <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /> action1 enabling condition2 ------ action2 enabling conditionn ------ actionn سلسله مراتب ماشینهای مجازی(بخش۲ـ۲ـ۲) در زبان پرولوگ برنامه و داده ها مخلوط هستند وفقط فرآیند اجرا آنها را از هم تفکیک میکند. شی داده اجرایی(بخش ۹ـ۱ـ۶) در زبان پرولوگ دستورات اجرایی ممکن است داده هایی باشند که توسط برنامه قابل دستیابی اند و توسط آن دستکاری میشوند. لیست ها(بخش۷ـ۱ـ۶) لیستها یک نوع ساختار هستند و در پرولوگ نمایش داخلی آنها به صورت درخت است. لیستها یا به صورت تهی میباشند یا غیر تهی،لیستهای غیرتهی از دو قسمتتشکیل شده اند: سرآیند:عنصر اول لیست و دنباله:بقیه عناصر لیست برای مثال لیست مقابل بصورت زیر نمایش داده میشود:[ann,tennis,tom,skiing] .(ann,.(tennis,.(tom,.(skiing,[])))) فایلهاو ورودی وخروجی(بخش ۳ـ۳ـ۵) در هر زمان برای اجرای یک برنامه پرولوگ تنها دو فایل فعال هستند:یکی برای ورودی و دیگری برای خروجی. -جریان ورودی فعلی(current input stream ) -جریان ورودی فعلی(current output stream ) نحوه خواندن ونوشتن در فایل: -کاراکتر به کاراکتر(get,get0,put ) -عبارت به عبارت(read,write )
زبان برنامه نویسی پرولوگ
نکات مهم:1- زبان های برنامه نویسی هوش مصنوعی ابزار اصلی بررسی و ساخت برنامه های کامپیوتری هستند که می توانند در شبیه سازی فرایندهای هوشمند مانند یادگیری، استدلال و فهم اطلاعات نمادین بکار روند.2- عملکرد اولیۀ برنامه نویسی هوش مصنوعی ایجاد ساختار کنترلی مورد لزوم برای محاسبۀ سمبولیک است.3- دو زبان برنامه نویسی LISP و PROLOG از مهمترین زبان های مورد استفاده در هوش مصنوعی می باشند که خصوصیات Semantic و Syntactic آنها باعث شده است که شیوه ها و راه حل های قوی برای حل مسئله ارائه نمایند.4- پرولوگ یک زبان برنامهنویسی منطقی چند منظوره مبتنی بر مفاهیم هوش مصنوعی و زبانشناسی محاسباتی است.5- این زبان، ریشه خود را بر خلاف بسیاری از زبانهای برنامه نویسی دیگر از منطق صوری گرفته است.6- منطق گرا بودن این زبان، آنرا برای بکارگیری در بانکهای اطلاعاتی، ریاضیات نمادین، زبان تجزیه و برنامههای دیگر سودمند ساخته است.7- در نسل پنجم کامپیوترها از پرلوگ برای نوشتن کرنل سیستمعامل نیز در ایجاد پروژه سیستم FGCS استفاده شدهاست.8- پرولوگ یک زبان برنامه نویسی برای محاسبات نمادین و غیر عددی می باشد.9- یک برنامۀ پرولوگ از فراکردها تشکیل می شود.10- انواع فراکردها عبارتند از: حقایق، قوانین و پرسش ها11- پرسش ها در پرولوگ شامل یک یا چند هدف می باشند.12- اگر پاسخ پرولوگ به یک پرسش مثبت باشد در اینصورت می گوئیم پرسش قابل ارضاء است و در غیر اینصورت غیرقابل ارضاء می باشد.13- یک حقیقت چیزی است که همواره و بدون هیچ قید و شرطی درست می باشد. 14- یک قانون چیزهایی را بیان می کند که برای درستی آنها باید برخی از شرایط ارضاء شوند.15- هر قانون از دو قسمت شرط و نتیجه تشکیل می شود.16- فراکردها از دو قسمت سرآیند و بدنه تشکیل می شوند.17- حقایق: قسمت بدنۀ آنها تهی است.18- پرسش ها: فقط دارای بدنه می باشند.19- قوانین: دارای هر دو قسمت می باشند.20- معنای توصیفی برنامه ها: تعیین می کند که خروجی برنامه چیست (What)21- معنای رویه ای برنامه ها: تعیین می کند خروجی برنامه چگونه به دست می آید (How)22- از آنجا که نتایج برنامه توسط معنای توصیفی آن تعیین می شوند، ازنظر اصولی معنای توصیفی برای نوشتن برنامه کافی می باشد.23- در پرولوگ نوع یک شئ توسط ساختار گرامری آن مشخص می شود. متغیرها با یک حرف الفبایی بزرگ و اتم ها با یک حرف الفبایی کوچک شروع می شوند.24- اگر متغیری در یک عبارت فقط یکبار ظاهر شود می توان به جای آن از متغیر بی نام (anonymous) استفاده نمود.25- تعریف لیست در پرولوگ: هر دنبالۀ متناهی از تعدادی عنصر مانند a1, a2, …. , an که ترتیب آنها مهم باشد. 26- لیست ها یک نوع ساختار هستند و ...
پرولوگ پرودیکیت (prolog)
پروديكيتي بنويسيد كه مشخص كند كه آيا ليستي عضو ليست ديگري هست يا خير به صورت پيشوندي (پرولوگ -prolog)Prefix([x|y],[x|z]) :- Prefix(y,z)Prefix([],L)مثال?Prefix([a,b],[a,b,c,d])YESپروديكيتي بنويسيد كه دو ليست را با هم جمع كند در پرولوگAppend([x|y],L,[x|z]) :- Append(y,L,z)Append([],L,L)مثال ?Append([a,b],[c,d],x)x=[a,b,c,d]ايا عددي عضو يك ليست هست يا خير توسط پرولوگMember(x,[y|z]) :- x≠y , Member(x,z)Member(x,[x|y])مثال?Member(b,[a,b,c])YESبدست آوردن عضو اخر يك ليست توسط پرولوگLastItem([x|y],k) :- LastItem(y,z)LastItem([x],x)يعني ?LastItem([a,b,c],x)x=cچاپ كردن يك ليست توسط پرولوگprint_list([]):-nl. %nl = newlineprint_list([H|T]):-write(H),write(’ ’),print_list(T).يعني ?-print_list([a,b,c]). حل فيبوناچي توسط پرولوگ fib(1,1).fib(2,1).fib(N,F):- N>2,N1 is N-1, fib(N1,F1),N2 is N-2, fib(N2,F2),F is F1+F2.Depth-first search نوشتن الگوريتم اول عمق در پرولوگ/* Depth-first search: dsearch(Initial,Final,Path) */ dsearch(I,F,P) :- dsearch(I,F,[I],P). % 3rd arg is the history dsearch(St,F,_,[F]) :- equiv(St,F).dsearch(St,F,H,[St|R]) :- trans_new(St,H,NSt), dsearch(NSt,F,[NSt|H],R). trans_new(St,H,NSt) :- trans(St,NSt), new_state(H,NSt). new_state([],_).new_state([St|H],NSt) :- not(equiv(St,NSt)), new_state(H,NSt).breadth-first search نوشتن الگوريم جستجوي اول سطح در پرولوگ/* Best-first search */ bestf(I,F,P) :- bestf_([I+[]],F,P). % 1st: list of (node+path) to expand bestf_(LNs,F,P) :- bestf_end(LNs,F,P). % check finalbestf_(LNs,F,P) :- bestf_exp(LNs,F,P). % expand bestf_end([N+NP|_],F,[F|NP]) :- equiv(N,F).bestf_end([_|R],F,P) :- bestf_end(R,F,P). bestf_exp([N+NP|R],F,P) :- all_(D+[N|NP],trans_new(N,[N|NP],D),LNs), append(LNs,R,NL), hsort(NL,SLNs,[]), bestf_(SLNs,F,P).نوشتن الگوريتم (A*) in prolog /* A* algorithm */ astar(I,F,P) :- astar_([I+[]],F,P). % 1st: list of (node+path) to expand astar_(LNs,F,P) :- astar_end(LNs,F,P). % check finalastar_(LNs,F,P) :- astar_exp(LNs,F,P). % expand astar_end([N+NP|_],F,[F|NP]) :- equiv(N,F).astar_end([_|R],F,P) :- astar_end(R,F,P). astar_exp([N+NP|R],F,P) :- all_(D+[N|NP],trans_new(N,[N|NP],D),LNs), append(LNs,R,NL), asort(NL,SLNs,[]), astar_(SLNs,F,P). asort([],L,L). % quicksort decreasingasort([N+NP|R],L,Lr) :- ahr(N+NP,V), apart(R,V,Sm,Lg), asort(Lg,L,[N+NP|S]), asort(Sm,S,Lr). apart([],_,[],[]).apart([N+NP|R],V,[N+NP|Ln],Lx) :- ahr(N+NP,NV), NV= apart(R,V,Ln,Lx).apart([N+NP|R],V,Ln,[N+NP|Lx]) :- apart(R,V,Ln,Lx). ahr(N+NP,V) :- heur(N,A), length(NP,X), D is X+1, dheur(D,B), V is A-B. نوشتن فاكتوريل با پرولوگ در سپيدان- كامپيوتر (factorial) whit prologfactorial(0,1).factorial(N,X):-N>0, N1 is N-1, factorial(N1,S), X is S*N. حل مساله برجهاي هانوي با پرولوگ در سپيدان -كامپيوترhanoi_tower(N):-move(N,a,b,c),!.move(0,_,_,_):-!.move(N,X,Y,Z):-M is N-1, move(M,X,Z,Y), info(X,Y), move(M,Z,Y,X).info(X,Y):-write(’Move disk from ’), write(X), write(’ to ’), write(Y), nl.move(1,X,Y,_) :-write('Move top disk from '),write(X),write(' to '),write(Y),nl.move(N,X,Y,Z) :-N>1,M is N-1,move(M,X,Z,Y),move(1,X,Y,_),برنامه اي به زبان پرولوگ بنويسد كه مساله هشت وزير را حل نمايد ؟solution([]). solution([X/Y|Others]):- solution(Others), member(Y,[1,2,3,4,5,6,7,8]), noattack(X/Y,Others). noattack(_,[]). noattack(X/Y,[X1/Y1|Others]):- Y=\=Y1, Y1=Y=\=X1-X, Y1-Y=\=X-X1, noattack(X/Y,Others). member(Item,[Item|Rest]). member(Item,[First|Rest]). member(Item,Rest]). template([1/Y1,2/Y2,3/Y3,4/Y4,5/Y5,6/Y6,7/Y7,8/Y8]).حالا در مد محاوره اي وارد نماييد .?-template(S),soulution(S).S=[1/4,2/2,3/7,4/3,5/6,6/8,7/5,8/1];S=[1/5,2/2,3/4,4/7,5/3,6/8,7/6,8/1];S=[1/3,2/5,3/2,4/8,5/6,6/4,7/7,8/1];...برن ...
دانلود نرم افزار برنامه نویسی پرولوگ Prolog + آموزش مختصر
نرم افزار برنامه نویسی پرولوگ Prolog + آموزش مختصر با سلام این ترم بعضی دوستان هوش مصنوعی دارن (یکیش خودم) و احتمالا قصد تحویل پروژه رو دارن درخواست کردن که نرم افزارش رو واسه دانلود بذارم منم قبلا گیر آورده بودم گذاشتم برای دانلود امیدوارم بدردتون بخوره از اینجا دانلود کنید (حجم فایل + آموزش حدود ۸ مگ) رمزفایل: SAHHA.ir با تشکر SAHHA
برنامهنویسی
زبان برنامهنویسی اجرا و عملی ساختن الگوریتمهای انتزاعی وابسته به هم بهوسیله تولید یک برنامه رایانهای مشخص با ابزار زبان برنامهنویسی ممکن است. گرچه نزدیکترین راه برای بازسازی این قوانین در رایانه کار روی مدارهای الکترونیکی سختافزار آن است. اما این کاری طاقتفرسا و زمانبر و درنتیجه کمابیش ناممکن است. واسطهایی ساخته شدند تا میان سختافزار و انسان قرار گیرد. طبیعی است یک واسط به ساده کردن و انتزاعی کردن رویدادهای ممکن درون سخت افزار میپردازد. این انتزاعی کردن، سازنده سطوح گوناگون یا لایهبندی در معماری زیرساخت برنامهها است. به همین ترتیب زبانهای برنامهنویسی گوناگون هم هرکدام برای ساخت برنامههای یک یا شماری اندک از این لایهها قابل استفاده هستند. با متفاوت بودن آنچه برنامهنویس برای آسانی استفاده خود آفریده با ورودی واقعیسخت افزار برای اجرای فرامین (که به زبان ماشین معروف است) برنامه واسط باید شیوهٔ خط برنامه نویس را به زبان ماشین برگرداند . زبانهای برنامه نویسی تعدادی از زبانهای برنامهنویسی به شمار زیر هستند : اسمبلی (Assembly) لیسپ (LISP) بی سی پی ال (BCPL) سی (C) سیپلاسپلاس (++C) سی پلاس پلاس/سی ال آی(C++/CLI) پاسکال (Pascal) جاوا (Java) سیشارپ (#C) جی شارپ (#j) جی پلاس پلاس (++j) بیسیک (Basic) پایتون (Python) پرل (Perl) پیاچپی (PHP) ای اس پی (ASP) ای اس پی دات نت (ASP.Net) Matlab وی بی دات نت (VB .Net) دلفی (Delphi) ویژوال بیسیک (visual basic) لینگو (Lingo) توسعه دهنده های وبدقت كنيد كه زبان هايی مانند اچتیامال (HTML) زبان برنامهنويسی نيستند بلكه زبانهای قالب بندی هستند. نمونه یک برنامه یک برنامهٔ ساده در زبان برنامهنویسیBasic که از سادهترین زبانهای برنامهنویسی است میتواند به شکل زیر باشد: REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE PRINT "HELLO NEW WORLD!" END سطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط درنظر گرفته نمیشود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامهنویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان میدهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع میدهد. پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورات را تبدیل به فرامینی میکند که لایه زیرین، که ممکن است همان سخت افزار باشد، میتواند آنها را اجرا کند. پارادایمها مقاله اصلی: پارادایم برنامهنویسی زبانهای برنامهنویسی گوناگون براساس قابلیتهای درنظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ...
برنامه نويسی چيست؟
برنامه نويسی چيست؟ برنامه نويسی را می توان به يک بازی هوش تشبيه کرد ، بازی بر روی داده ها و متغيرها با استفاده از دستورات و ابزارهای برنامه نويسی که در اختيار ما گذاشته شده است . در اين بازی ابتدا بايد ابزراهای مورد نياز خود ، جهت نوشتن برنامه ای خاص را انتخاب کرده سپس بايد ابزارها را به گونه ای در کنار هم قرار دهيم و به گونه ای با ابزارها بر روی داده ها و متغيرها کار کنيم تا به هدف مورد نظر برسيم . بنابراين بايد در ابتدا ، شناخت کافی بر روی ابزارها و کاربرد آنها داشته باشيم که تجربه نشان داده اين يادگيری برای دانشجويان ، چندان دشوار نيست و اکثر دانشجويان قادر به درک ابزارها و دستوراتی مانند if يا while و غيره می باشند . اما نکته مهم اين است که پس از تسلط بر روی ابزارها ، تازه بازی آغاز می شود و ما تنها بر قوانين بازی و ابزارهای موجود شناخت پيدا کرده ايم . اينجاست که برخی دانشجويان دچار مشکل می شوند و قادر به استفاده مناسب از ابزارها و بسط دادن آنها در کنار يکديگر جهت رسيدن به هدف نهايی برنامه نمی باشند . در اين مرحله دانشجويان بايد دارای يک روحيه الگوريتمی شوند بدين معنی که توانايی تفکيک مراحل ، جهت رسيدن به پاسخ را داشته باشند . کمتر دانشجويی است که بدون تمرين و ممارست به اين روحيه دست پيدا کند . از علائم ورود يک دانشجو به دنيای برنامه نويسی شوق و اشتياق او جهت يافتن تمرينهای جديد برنامه نويسی است و چنين دانشجويی با پشتکار خود می تواند يک برنامه نويس حرفه ای شود آشنايی با چند زبان برنامه نويسی : ليسب: یک زبان برنامهنویسی رایانه است که در سال ۱۹۵۸ به وسیلهٔ جان مککارتی ابداع شده است. این زبان، مانند زبان برنامهنویسی پرولوگ، بیشتر برای برنامهنویسی هوش مصنوعی مورد استفاده قرار میگیرد. با توجه به اینکه زبان لیسپ از نحو سادهای برخوردار است، تجزیه و پیادهسازی آن نسبتاً با سهولت انجام میشود. متن برنامههای لیسپ عموماً از نمادها و لیستهایی از نمادها تشکیل میشود و بدین خاطر است که این زبان لیسپ (مخفف پردازش لیست) نامیده شده است. یکی از ویژگیهای جالب زبان لیسپ این است که خود برنامههای لیسپ نیز لیست هستند و بنا بر این، میتوان با برنامهها به عنوان دادهها رفتار کرد و یا دادهها را به عنوان برنامه ارزیابی نمود. لیسپ دارای گویشهای مختلفی است که بعضی از آنها دارای قابلیتهای شیءگرا نیز هستند. از این میان میتوان به کامن لیسپ اشاره کرد. سی نام فارسی عدد ۳۰ است. زبان برنامهنویسی سی یکی از زبانهای برنامهنویسی رایانهای است. سی (Si) نماد شیمیایی سیلیکون است. زبان برنامهنویسی ...