payamvha/North_RAG huggingface dataset:
1 ‘(2 3) 4); Output: (1 (2 3) 4) به این دلیل راهی که لیست‌ها ایجاد می‌شوند از جفت‌های Cons (Car,Cdr) پردازهٔ Cons می‌تواند برای اضافه کردن یک عنصر به جلوی یک لیست استفاده شود. توجه کنید که پردازهٔ Cons در هدایت و به کار بردن آرگومان‌های لیست نامتقارن است، بدین دلیل روش‌های لیست‌ها ایجاد می‌شوند. (Cons 1 ‘(2 3)); Output: (1 2 3) Output: ((1 2) 3 4) پردازهٔ Oppend دو یا چند لیست را با هم ادغام می‌کند و یک لیست واحد ایجاد می‌کند زیرا لیست لیسپ یک لینک لیست است و پیچیدگی زمانی الحاق کردن لیست‌ها از مرتبهٔ
است و پیچیدگی زمانی الحاق کردن لیست‌ها از مرتبهٔ پیچیدگی زمانی O(n) می‌باشد. ساختار اشتراکی: لیست‌های لیسپ لینک لیست‌های ساده می‌توانند با یکی دیگر از لیست‌ها در ساختمان مشترک باشند به عبارت دیگر دو لیست می‌توانند دم یکسانی داشته باشند یا رشتهٔ پایانی از Consهای یکسانی داشته باشند مثلاً: لیست foo و bar به ترتیب به صورت (a b c) و (X b c) هستند هرچند دم (b c) در هر دو لیست ساختار یکسانی دارند ولی مانند هم نیستند، خانه‌های Cons اشاره گر به b و c در محل حافظهٔ یکسانی برای هردو لیست قرار دارد. ساختار اشتراکی
یکسانی برای هردو لیست قرار دارد. ساختار اشتراکی سریع تر از کپی کردن می‌تواند به صورت چشمگیری کارایی را بهبود بخشند. هرچند، این مهارت می‌تواند متقابلاً در راه‌های نامطلوب با عملکردهایی که تغییرات لیست‌های گذشته روی آرگومان‌های آن تأثیر بگذارد، اثر کند. تغییرات یک لیست از قبیل تغییر دادن C با یک goose روی دیگری نیز تأثیر می‌گذارد setf (third foo) 'goose) که این تغییر نتیجه را به صورت (a b goose) تغییر می‌دهد اما bar هم تغییر می‌کند (X b goose) که ممکن است یک نتیجهٔ غیرمنتظره باشد. زبان‌های برنامه‌نویسی Lisp
نتیجهٔ غیرمنتظره باشد. زبان‌های برنامه‌نویسی Lisp معمولاً از یک خط دستور محاوره‌ای استفاده می‌کنند، که می‌تواند با یک محیط پیچیدهٔ گسترش یافته ترکیب شود. کاربر اصطلاحات و دستورها را در خط دستور وارد کرده یا با رهبری IDE آن‌ها را به سیستم Lisp می‌فرستد. Lisp دستورها را می‌خواند، آن‌ها را ارزیابی می‌کند و نتایج را چاپ می‌کند. به این دلیل است که خط دستور زبان Lisp به حلقهٔ Read-Eval-Print یا REPL معروف است. نمونهٔ ساده‌ای از عملیات REPL در زیر آمده‌است. این یک شرح ساده‌است که بسیاری از المان‌های Lispواقعی در
شرح ساده‌است که بسیاری از المان‌های Lispواقعی در آن نمی‌آید مانند ماکروها و کوئت‌ها. تابع read جملات متنی را به عنوان ورودی می‌پذیرد و آن‌ها را به ساختار لیست تجزیه می‌کند. به عنوان مثال، وقتی شما رشتهٔ (+ ۱ ۲) را در اعلان تایپ می‌کنید، تابع read آن را به یک لیست پیوندی حاصل از ۳ المان ترجمه می‌کند: علامت +، عدد ۱ و عدد ۲. خیلی اتفاق می‌افتد که لیست قسمت مؤثری از یک کد Lisp باشد که قابل ارزیابی است. به همین دلیل است که یک قطار از لیست به یک تابع نام عملگر مع می‌دهد. تابع eval ساختار لیست را ارزیابی می‌کند
می‌دهد. تابع eval ساختار لیست را ارزیابی می‌کند و نوعی دیگر از ساختار را به عنوان نتیجه بازمی‌گرداند. ارزیابی کردن لزوماً تفسیر کردن معنی نمی‌دهد؛ بعضی سیستم‌های Lisp هر عبارتی را به زبان ماشین تبدیل می‌کنند. خیلی ساده‌است؛ به هر حال؛ برای تعریف ارزیابی به عنوان تفسیر: برای ارزیابی یک لیست که نام تابع دارد، eval ابتدا تمام آرگومان‌های داده شده به cdr اش را ارزیابی می‌کند و سپس تابع را روی آن آرگومان‌ها اعمال می‌کند. در این مثال، تابع عمل جمع است و به آرگومان‌های (۱ ۲) اعمال می‌شود که نتیجه ۳ است. این
(۱ ۲) اعمال می‌شود که نتیجه ۳ است. این نتیجهٔ ارزیابی است. این وظیفهٔ تابع print است که نتیجه را به کاربر نمایش دهد. برای نتیجهٔ سادهٔ ۳ این کار ناقابل است. یک عبارت که با قسمتی از ساختار لیست ارزیابی می‌شود میاز دارد که print لیست را به حرکت درآورد و در خروجی به شکل یک عبارت S نمایش دهد. برای اجرا کردن یک REPL در Lisp، تنها لازم است که این سه تابع را اجرا کنید و یک تابع حلقه بی‌نهایت را. (به‌طور طبیعی اجرای eval پس از اجرای عملگرهای ویژه‌ای مانند if پیچیده خواهد شد) یک REPL ساده به خودی خود با یک خط کد
خواهد شد) یک REPL ساده به خودی خود با یک خط کد انجام شد: (loop(print(eval(red)))) لیست در اصل تعداد کمی ساختار کنترلی دارد. منتها در تکامل و گسترش زبان تعداد زیادی به آن اضافه شدند. (عملگر اصلی شرایط در زبان Lisp که cond بود بعداً متشکل شد از ساختار if-then-else) برنامه نویسان در نسخهٔ Scheme حلقه‌ها را به صورت بازگشت دم(tail recursion) بیان می‌کنند. موسسات متعارف علوم کامپیوتر Scheme بعضی دانشجویان را متقاعد می‌کند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ این اشتباه‌است. تمامی نسخه‌های
از بازگشت دم است؛ این اشتباه‌است. تمامی نسخه‌های متداول دیده شده از Lisp دارای ساختارهای الزامی برای تکرار هستند. درScheme دستور do به عنوان دستور حلقه پیچیدهٔ Lisp است. علاوه بر این مسئلهٔ اصلی که شیء گرایی را مهم‌تر از مسئلهٔ فاعلی کرده این است که Scheme نیازهای ویژه‌ای برای کار کردن با فراخوانی دم(tail calls)دارد، در نتیجه دلیل ترغیب Scheme به استفاده از بازگشت دم این است که روش صراحتاً با تعریف خود زبان پشتیبانی می‌شود. در مقابل، ANSI Common Lisp نیازی به بهینه‌سازی که معمولاً به حذف فراخوانی دم گفته
به بهینه‌سازی که معمولاً به حذف فراخوانی دم گفته می‌شود ندارد. در نتیجه این حقیقت که بازگشت دم به عنوان یک جایگزین تصادفی برای استفاده از ساختارهای مبتنی بر تکرار (مانند do dolist loop) توصیه نمی‌شود تنها یک مسئلهٔ برتری ادبی نیست، ولی بالقوه یکی از کارآمدهاست (بعد از این که این روش فقط به عنوان یک پرش ساده به کار نرفت) و به عنوان یک تصحیح برنامه‌است. بعضی از ساختارهای کنترلی Lisp عملگرهای ویژه‌ای هستند، هم ارز کلیدواژه‌های ترکیبی باقی زبان‌ها. عباراتی که این عملگرها استفاده می‌کنند ظاهری شبیه فراخوانی
این عملگرها استفاده می‌کنند ظاهری شبیه فراخوانی تابع دارد، تفاوت اینجاست که آرگومان‌ها ضرورتاً نباید ارزیابی شوند یا در مورد تکرار شاید بارها ارزیابی شوند. در مقابل اکثر زبان‌های برنامه‌نویسی، Lisp به برنامه نویسان اجازه می‌دهد با خود زبان ساختارهای کنترلی را پیاده‌سازی کنند. ساختارهای کنترلی زیادی در ماکروهای Lisp پیاده‌سازی می‌شوند و برنامه نویسان می‌توانند هر ماکرو را گسترش دهند، برای آنانی که می‌خواهند بدانند چطور کار می‌کند. هر دوی Lisp Common و Scheme دارای عملگرهای کنترلی غیر محلی هستند. تفاوت این
دارای عملگرهای کنترلی غیر محلی هستند. تفاوت این عملگرها یکی از عمیق‌ترین تفاوت‌ها مابین این دو نسخهٔ زبان است. Scheme از ورودی مستمر با استفاده از روش call/cc پشتیبانی می‌کند، که به برنامه اجازهٔ ذخیره (و بعداً بازیابی کردن) یک عملیات ویژه را می‌دهد. Common Lisp از ورودی مستمر پشتیبانی نمی‌کند ولی از راه‌های زیادی برای انجام رهایی از تکرار پشتیبانی می‌کند.
پرولوگ یک زبان برنامه‌نویسی منطقی چند منظوره مبتنی بر مفاهیم هوش مصنوعی و زبان‌شناسی محاسباتی است. این زبان بر پایه منطق ریاضی بنا نهاده شده و آن را به عنوان زبان کاملاً منطقی می‌شناسند و حتی به آن پرلوگ خالص نیز گفته می‌شود و می‌توان گفت متفاوت از سایر زبان‌های برنامه‌نویسی است. این زبان، ریشهٔ خود را بر خلاف بسیاری از زبان‌های برنامه‌نویسی دیگر از منطق صوری گرفته‌است. پس منطق برنامه را از لحاظ روابط بیان کرده و اجرای آن‌ها بیشتر از طریق پرس و جوها حول این روابط انجام می‌شود. باید توجه داشت که این پرس و
روابط انجام می‌شود. باید توجه داشت که این پرس و جوها از داده‌های مجزایی ساخته می‌شوند. منطق گرا بودن این زبان، آن را برای به‌کارگیری در بانک‌های اطلاعاتی، ریاضیات نمادین، زبان تجزیه و کاربردهای دیگر سودمند ساخته‌است. تاریخچه. این زبان برای اولین بار در اوایل ۱۹۷۰ توسط گروهی به سرپرستی «آلن کلمرار» در مارسی فرانسه به وجود آمد و اولین سیستم Prolog در سال ۱۹۷۲ توسط کلمرار و فیلیپ راسل توسعه داده شد. با این حال، دیوید اچ دی وارن با ایجاد ماشین خلاصه وارن در اوایل کامپایلر Prolog با نفوذ را نوشت و «Edinburgh
کامپایلر Prolog با نفوذ را نوشت و «Edinburgh Prolog» را تعریف نمود که گویشی است که اساس برای نحو بسیاری از پیاده‌سازی مدرن است. Prolog یکی از زبان‌های برنامه‌نویسی منطق مرتبه اول بود، و امروزه رایج‌ترین این گونه زبان‌ها باقی مانده‌است، همراه با تعداد زیادی از پیاده‌سازی‌های آن که به صورت رایگان و تجاری در دسترس هستند. در حالی که در ابتدا با هدف پردازش زبان طبیعی ساخته شد اما به تدریج بخاطر استفاده و پشتیبانی سیستم‌های خبره، بازی‌ها، سیستم پاسخ خودکار، ontologies و سیستم‌های کنترل پیچیده، تغییر کرد و
ontologies و سیستم‌های کنترل پیچیده، تغییر کرد و محیط‌های Prolog مدرن و با حمایت از ایجاد واسط کاربر گرافیکی، به عنوان برنامه‌های اداری و شبکه.. معرفی گردید و الحاقات بعدی از Prolog که توسط تیم اصلی ایجاد گشت محدودیت توانایی در منطق برنامه‌نویسی را در پیاده‌سازی از بین بردند. زمزمه‌های ایجاد یک زبان منطق گرا از دهه ۷۰ میلادی از شمال آمریکا شکل گرفت. بعداً در نسل پنجم رایانه‌ها نیز از پرولوگ برای نوشتن کرنل سیستم‌عامل نیز در ایجاد پروژه سیستم FGCS استفاده شد. انواع داده‌ها. نوع داده در پرلوگ به صورت ترم‌ها
انواع داده‌ها. نوع داده در پرلوگ به صورت ترم‌ها تعریف می‌شود که این ترم‌ها می‌توانند اتم، اعداد، متغیرها یا ترکیبی از ترم‌های دیگر باشند. truck_year('Mazda', 1986) 'Person_Friends'(zelda, [tom,jim]) لیست‌ها که یک حالت خاص عبارت‌ها ترکیبی هستند و ساختمان داده ایی پیشرفته برای نگهداشت استدلال‌ها و منطق هاست و به‌طور کلی لیستی از اتم‌ها هستندو به وسیلهٔ پرانتز، نقطه و کاما نشان داده می‌شود. رشته‌ها که مجموعه ایی از کارکترها هستند برای نگهداری یونیکدها و نام‌های شخصیت‌های محلی. ماژول‌ها. برای برنامه‌ریزی‌های
شخصیت‌های محلی. ماژول‌ها. برای برنامه‌ریزی‌های بزرگ، Prolog یک سیستم ماژول فراهم می‌کند. این سیستم ماژول توسط ISO استاندارد شده‌است. با این وجود، تمام کامپایلرهای Prolog از ماژول پشتیبانی نمی‌کنند و مشکلات سازگاری بین سیستم‌های ماژول از کامپایلرهای بزرگ Prolog وجود دارد. در نتیجه، ماژول‌های نوشته شده در یک کامپایلر Prolog لزوماً بر روی دیگری کار نمی‌کنند. برنامه‌نویسی در پرولوگ. برنامه پرلوگ مجموعه‌ای از روابط است که توسط بندهای خاص تعریف شده‌اند. این بندها محدود به بندهای horn و تورینگ است که زیر مجموعه
محدود به بندهای horn و تورینگ است که زیر مجموعه کاملی از منطق منظور اول است (first-order predicate logic). بندها به دو دستهٔ قوانین و حقیقت‌ها تقسیم می‌شوند. یک مثال از قانون: Head :- Body. سر: -- بدن است. سر یک عضوی از بدن است؛ و بعد با پرس و جوهای انجام شده با توجه به قوانین موجود و حقایق اولیه نتایج ثانویه که حقایق جدیدی هستند شکل می‌گیرد. پرس و جوها می‌توانند براساس لیست‌های پیوندی نیز باشد و طبق قوانین از پیش تعیین شده نتایجی را در اختیار کاربر گذاشت. مثل اندازه لیست. عنصر آخر لیست و …. به همین خاطر
مثل اندازه لیست. عنصر آخر لیست و …. به همین خاطر مجموعه‌ای از کتابخانه‌های این زبان شکل گرفته‌است و در راستای آن هم دستورهایی برای چاپ داده‌ها و امثال آن شکل گرفته‌است. بررسی. بررسی ابتدا با یک پرس و جو شروع می‌شود و با توجه به حقایق موجود که درست یا غلط است نتیجه منتقل می‌شود. اساس کار بدین گونه است که به‌دنبال اولین غلط یا تکذیب مسئله می‌یابد و با توجه به نوع مسئله در صورت نیافتن آن همین روال را برای دیگر داده‌ها نیز انجام می‌دهد و در صورت حصول نتیجه حقیقت داده‌های قبلی به صورت بازگشتی معلوم می‌گردد. با
داده‌های قبلی به صورت بازگشتی معلوم می‌گردد. با این استراتژی که Backtracking نیز گفته می‌شود اساس یافت جواب در زبان پرلوگ گفته می‌شود. به‌طور مثال: mother_child(trude, sally). father_child(tom, sally). father_child(tom, erica). father_child(mike, tom). sibling(X, Y) :- parent_child(Z, X), parent_child(Z, Y). parent_child(X, Y) :- father_child(X, Y). parent_child(X, Y) :- mother_child(X, Y). و سؤال پرسیده شده در دنباله آن: ?- sibling(sally, erica). Yes طبق قانون وقتی دونفر خواهر و برادرند که والدین آن‌ها
قانون وقتی دونفر خواهر و برادرند که والدین آن‌ها یکی باشد پس زبان به دنبال والدین می‌گردد و آن‌ها را برمی‌گرداند و جواب را به جای گزاره‌های مذکور می‌گذارد و طبق قانون اگر دو گزاره یکی باشند درست برمی‌گرداند. پس روش کلی روشی بازگشتی اثبات بندهاست و جایگزینی نتایج آنها. حلقه‌ها و بازگشت. الگوریتم‌های Iterative (پشت سرهمی) می‌توانید به وسیلهٔ predicates بازگشتی به اجرا درآیند. سیستم‌های Prolog معمولاً به روش بهینه‌سازی معروفی به نام تماس دم (tco) پایبندند که ملتزم به بازگشت قطعی است و حتماً در این روش
که ملتزم به بازگشت قطعی است و حتماً در این روش بهینه‌سازی می‌بایست به دم برسد. به همین خاطر در روش بازگشتی از یک پشته با یک نوع محدودیت بهره می‌گیرد و بدین وسیله می‌تواند حلقه‌های متعدد و بازگشتی را با اطمینان به بازگشت به جواب را جوابگو باشد. خنثی‌سازی. ایجاد یک مسند نفی و شکست باعث خنثی کردن یک استدلال می‌شود. حالت دیگری نیز دربردارد بدینگونه که برای اثبات یک استدلال دنباله بازگشتی آن را تا رسیدن به یک دم یا انتها می‌رود و در صورتی که نتواند حقیقتی برای آن پیدا کند در حقیقت نتوانسته آن را اثبات کند اما
آن پیدا کند در حقیقت نتوانسته آن را اثبات کند اما شاید هم حقیقتی مربوط به نفی آن پیدا شود که در صورت آن را نفی می‌کند. ملاحظات عملیاتی. یکسری قوانینی تعبیه شده‌است که در آن کاربر با استفاده از آن می‌تواند از ایجاد لوپ‌های تودرتو جلوگیری کند؛ و البته با نظم دادن به دستورها می‌توان از ایجاد آن‌ها جلوگیری کرد به‌طور مثال: predicate1(X) :- predicate2(X,X). predicate2(X,Y) :- predicate1(X), X \= Y. برای پرسش ?- predicate1(atom). ایجاد یک حلقه بی‌نهایت توسط کاربر می‌کند ولی اگر دستورها را این‌گونه نظم دهیم چنین
می‌کند ولی اگر دستورها را این‌گونه نظم دهیم چنین اتفاقی نمی‌افتد predicate2(X,Y) :- X \= Y, predicate1(X). تجزیه. یک نماد ویژه‌به نام گرامرهای قطعی (DCGs) وجود دارد. یک قاعده تعریف شده به عنوان -&gt; به جای -: که با استفاده از آن می‌توان به تجزیه کردن و ایجاد یک رابط مناسب برای یک لیست بکار گرفت. DCGها اغلب برای نوشتن تجزیه‌گر یا ژنراتورهای لیست استفاده می‌شوند، زیرا آن‌ها همچنین یک رابط کاربری مناسب برای لیست‌های متفاوت فراهم می‌کنند. در زیر یک مثال از این مورد را می‌بینید: &lt;sentence&gt; ::=
از این مورد را می‌بینید: &lt;sentence&gt; ::= &lt;stat_part&gt; &lt;stat_part&gt; ::= &lt;statement&gt; | &lt;stat_part&gt; &lt;statement&gt; &lt;statement&gt; ::= &lt;id&gt; = &lt;expression&gt; ; &lt;expression&gt; ::= &lt;operand&gt; | &lt;expression&gt; &lt;operator&gt; &lt;operand&gt; &lt;operand&gt; ::= &lt;id&gt; | &lt;digit&gt; &lt;id&gt; ::= a | b &lt;digit&gt; ::= ۰..۹ &lt;operator&gt; ::= + | - | * و با استفاده از DCG sentence(S) --&gt; statement(S0), sentence_r(S0, S). sentence_r(S, S) --&gt;
sentence_r(S0, S). sentence_r(S, S) --&gt; []. sentence_r(S0, seq(S0, S)) --&gt; statement(S1), sentence_r(S1, S). statement(assign(Id,E)) --&gt; id(Id), [=], expression(E), [;]. expression(E) --&gt; term(T), expression_r(T, E). expression_r(E, E) --&gt; []. expression_r(E0, E) --&gt; [+], term(T), expression_r(plus(E0,T), E). expression_r(E0, E) --&gt; [-], term(T), expression_r(minus(E0, T), E). term(T) --&gt; factor(F), term_r(F, T). term_r(T, T) --&gt; []. term_r(T0, T) --&gt; [*], factor(F),
--&gt; []. term_r(T0, T) --&gt; [*], factor(F), term_r(times(T0, F), T). factor(id(ID)) --&gt; id(ID). factor(digit(D)) --&gt; [D], { (number(D) ; var(D)), between(0, 9, D)}. id(a) --&gt; [a]. id(b) --&gt; [b]. برنامه‌نویسی سفارشی. یکی دیگر امکاناتی که در پرلوگ با توجه به ماهیت آن به وجود آمده‌است برنامه‌نویسی سفارشی است. با توجه به روند BachTracking و روش بهینه‌سازی بازگشت قطعی می‌توانیم حالاتی را ایجاد کنیم که از آن طریق برنامه به‌طور خودکار و تنها با داشتن یک قاعده ساده به دنبال جواب در یک لیست پیوندی
یک قاعده ساده به دنبال جواب در یک لیست پیوندی بگردد. به‌طور مثال شمارش اعداد و پیدا کردن اعداد اول. perfect(N) :- between(1, inf, N), U is N // 2, findall(D, (between(1,U,D), N mod D =:= 0), Ds), sumlist(Ds, N). متا - مترجم و انعکاس. prolog یک زبان homoiconic است و بسیاری از امکانات را برای انعکاس را در اختیار ما می‌گذارد. این زبان امکان نوشتن meta-circular evaluator را نیز فراهم می‌سازد که اغلب از آن به عنوان متا- مترجم یاد می‌شود. به دلیل آنکه برنامه‌های به زبان پرلوگ دنباله‌ای از اصطلاحات خود این زبان
به زبان پرلوگ دنباله‌ای از اصطلاحات خود این زبان است، خواندن آن راحت و مکانیزم ساده ایی جهت ترجمه را دارا است. روش‌های پیاده‌سازی. برای بهره‌وری از کد Prolog معمولاً به صورت کد ماشین انتزاعی ترجمه می‌شود و اغلب تحت تأثیر مجموعه دستورهای ثبت نامی براساس ماشین انتزاعی وارن (Warren Abstract Machine (WAM)) است. برای پیاده‌سازی انتزاعی متناسب به نوع اصطلاحات و اطلاعات در زمان کامپایل است. برای ترجمه بهتر و نزدیک تر بودن به زبان ماشین واقعی برای عملکرد بهتر نیاز به تحقیقات مبتنی بر جامعه منطقی برنامه‌ریزی
نیاز به تحقیقات مبتنی بر جامعه منطقی برنامه‌ریزی شده‌است که دو کار اساسی براساس قواعد منطقی انجام می‌دهد یک باینری کردن عبارات و بندها و دیگری فراهم کردن پشته مبتنی بر ماشین مجازی. در نسل پنجم سعی شده‌است ماشین‌ها و سیستم‌های مبتنی بر پرلوگ نیازهای سخت‌افزاری این نوع برنامه‌سازی منطقی را نیز فراهم سازند تا سرعت اجرای آن هزاران برابر شود. به‌علاوه این پرلوگ این توانایی را نیز دارد که با پردازش موازی بندها سرعت را بهبود بخشد. استفاده در صنعت. Prolog در مورد استفاده قرار گرفته‌است. از نرم‌افزار DeepQA IBM و
استفاده قرار گرفته‌است. از نرم‌افزار DeepQA IBM و Apache UIMA استفاده می‌کند. این سیستم در زبان‌های مختلف نوشته شده بود، از جمله Java, C ++ و Prolog. این زبان برای تطبیق الگو با درختان تجزیه طبیعی استفاده می‌شود. توسعه دهندگان اظهار داشتند: "ما نیاز به یک زبان داشتیم که می‌توانستیم به راحتی قوانین تطبیق الگوی بر روی درختان تجزیه و سایر حاشیه نویسی‌ها (مانند نتایج نامفهوم نامیده شده) را بیان کنیم و یک تکنولوژی که بتواند این قوانین را بسیار مؤثر اجرا کند. توسعه دهندگان اظهار داشتند: "ما نیاز به یک زبان
توسعه دهندگان اظهار داشتند: "ما نیاز به یک زبان داشتیم که می‌توانستیم به راحتی قوانین تطبیق الگوی بر روی درختان تجزیه و سایر حاشیه نویسی‌ها (مانند نتایج نامفهوم نامیده شده) را بیان کنیم و یک تکنولوژی که بتواند این قوانین را بسیار مؤثر اجرا کند. مثال‌ها. در اینجا مثال‌هایی از برنامه ساخته شده به زبان پرلوگ را می‌بینیم. الگوریتم مرتب‌سازی سریع. partition([], _, [], []). partition([X|Xs], Pivot, Smalls, Bigs) :- (X @&lt;Pivot -&gt; Smalls = [X|Rest], partition(Xs, Pivot, Rest, Bigs) ; Bigs = [X|Rest],
Pivot, Rest, Bigs) ; Bigs = [X|Rest], partition(Xs, Pivot, Smalls, Rest) quicksort([]) --&gt; []. quicksort([X|Xs]) --&gt; { partition(Xs, X, Smaller, Bigger) }, quicksort(Smaller), [X], quicksort(Bigger). ماشین تورینگ. turing(Tape0, Tape) :- perform(q0, [], Ls, Tape0, Rs), reverse(Ls, Ls1), append(Ls1, Rs, Tape). perform(qf, Ls, Ls, Rs, Rs) :- !. perform(Q0, Ls0, Ls, Rs0, Rs) :- symbol(Rs0, Sym, RsRest), once(rule(Q0, Sym, Q1, NewSym, Action)), action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1), perform(Q1,
Ls0, Ls1, [NewSym|RsRest], Rs1), perform(Q1, Ls1, Ls, Rs1, Rs). symbol([], b, []). symbol([Sym|Rs], Sym, Rs). action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs). action(stay, Ls, Ls, Rs, Rs). action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs). left([], [], Rs0, [b|Rs0]). left([L|Ls], Ls, Rs, [L|Rs]). مثالی ساده از برنامه پیاده‌سازی ماشین تورینگ rule(q0, 1, q0, 1, right). rule(q0, b, qf, 1, stay). ?- turing([1,1،1], Ts). Ts = [1, 1, 1, 1] ; برنامه‌نویسی پویا. برنامه Prolog زیر از برنامه‌نویسی پویا برای یافتن
برنامه Prolog زیر از برنامه‌نویسی پویا برای یافتن توالی مشترک طولانی از دو فهرست در زمان چند جمل‌های استفاده می‌کند: پایگاه داده بند برای memoization استفاده شده‌است: :- dynamic(stored/1). memo(Goal) :- (stored(Goal) -&gt; true ; Goal, assertz(stored(Goal))). lcs([], _, []) :- !. lcs(_, [], []) :- !. lcs([X|Xs], [X|Ys], [X|Ls]) :- !, memo(lcs(Xs, Ys, Ls)). lcs([X|Xs], [Y|Ys], Ls) :- memo(lcs([X|Xs], Ys, Ls1)), memo(lcs(Xs, [Y|Ys], Ls2)), length(Ls1, L1), length(Ls2, L2), (L1&gt;= L2 -&gt; Ls = Ls1 ; Ls =
L2), (L1&gt;= L2 -&gt; Ls = Ls1 ; Ls = Ls2). مثال پرس و جو ?- lcs([x,m،j,y،a,u،z], [m,z,j,a,w,x,u], Ls). Ls = [m, j, a, u] ضمیمه‌ها. درحال حاضر تلاش در راستای توسعه این زبان برای گسترش قابلیت‌های برنامه‌سازی در جهات مختلف صورت می‌گیرد که این قابلیت‌ها عبارتند از محدودیت‌های برنامه‌نویسی منطقی (CLP)(بیشتر در تنظیمات صنعتی مانند جدول‌های زمان‌بندی)، برنامه‌نویسی شی گرای منطقی (OOLP)، همزمانی، منطق خطی و قابلیت همکاری با پایگاه‌های دانش. بدین منظور نسخه‌هایی همچون نمونه‌های زیر تهیه شده‌است: HiLog و λProlog
همچون نمونه‌های زیر تهیه شده‌است: HiLog و λProlog تمدید Prolog با بالاتربردن ویژگی‌های برنامه‌نویسی سفارشی. اف منطق گسترش Prolog با قاب / اشیاء را برای نمایش دانش. OW Prolog ایجاد شده‌است به منظور پاسخ به عدم Prolog است از گرافیک و رابط. Logtalk یک شیء گرا منطق زبان برنامه‌نویسی است (بهمراه ایجاد خاصیت چندریختی و وراثت و همچنین چند نخی و همزمانی) Prolog - MPI یک منبع باز SWI - Prolog می‌باشد که برای محاسبات توزیع شده از طریق واسط پیام‌رسان اینکار را انجام می‌دهد. Oblog کوچک، قابل حمل، شیء گرا را به فرمت -
Oblog کوچک، قابل حمل، شیء گرا را به فرمت - Prolog توسط McDougall مارگارت از EdCAAD، دانشگاه ادینبورگ است. Prolog Gnu چیست؟. gnu Prolog (همچنین به نام gprolog) یک کامپایلرکد باز توسط دانیل دیاز با یک اشکال زدایی محیط تعاملی برای Prolog در دسترس در یونیکس و ویندوز می‌باشد. همچنین پشتیبانی از برخی از الحاقات را به Prolog از جمله محدودیت‌های برنامه‌نویسی بیش از یک دامنه محدود، با استفاده از تجزیه grammars بند تصریح شده، و یک سیستم‌عامل و رابط را داراست. کامپایلر تبدیل کد منبع را تبدیل به بایت کد می‌کند که
تبدیل کد منبع را تبدیل به بایت کد می‌کند که می‌تواند توسط یک دستگاه مترجم یا مفسر وارون انتزاعی آن را به کد اجرایی رایج تبدیل کند. پیوند به بیرون. ۱. ^ Kowalski, RA. The early years of logic programming. ^ Kowalski، بعد. در سال‌های اولیه برنامه‌نویسی منطق.
حبیب‌الله نفیسی ( – ) بنیان‌گذار مؤسسه عالی تکنیکوم نفیسی که بعداً به دانشگاه صنعتی خواجه نصیرالدین طوسی (دانشگاه خواجه نصیر) شهرت یافت و همچنین دانشگاه صنعتی امیرکبیر (پلی تکنیک تهران) و مؤلف نخستین قانون کار در ایران بود. زندگی. حبیب نفیسی زاده ۱۲۸۷ در شهر رشت بود. پدر او علی‌اصغر نفیسی نخستین وزیر بهداشت ایران بود. پدر بزرگ او ناظم الاطبا کرمانی سرشناس‌ترین پزشک عصر قاجاریه و از خاندان نفیسی در کرمان بود. حبیب نفیسی در سال ۱۳۰۸ در تهران دیپلم گرفت و برای ادامه تحصیل با هزینهٔ ارتش به اروپا رفت. پس از
ادامه تحصیل با هزینهٔ ارتش به اروپا رفت. پس از گرفتن درجهٔ مهندسی فنی به ایران بازگشت و با درجهٔ افسری وارد ارتش شد. پس از شهریور ۱۳۲۰ به مدیرکلی وزارت پیشه و هنر و در سال ۱۳۲۵ به معاونت وزارت کار رسید. حبیب نفیسی در دوران نخست‌وزیری ابراهیم حکیمی به رهبری هیئت ایران در کنفرانس سازمان بین‌المللی کار در پاریس شرکت کرد. ایرج افشار در کتاب خاطرات محمد علی جمالزاده عکس آنان را در کنفرانس پاریس با شرح مختصری آورده است. حبیب نفیسی در کابینه ۳۸ روزه حسین علاء در سال ۱۳۲۹ کفالت وزارت کار را عهده‌دار شد. حبیب نفیسی
۱۳۲۹ کفالت وزارت کار را عهده‌دار شد. حبیب نفیسی پس از روی کار آمدن محمد مصدق به سمت وزیرمختاری ایران به آمریکا رفت و پس از کودتای ۲۸ مرداد ۱۳۳۲ در کابینه سپهبد زاهدی معاون صناعت در وزارت اقتصاد ملی شد. نفیسی پس از بازنشستگی اجازه تأسیس یک دانشگاه فنی را گرفت و به نام مدرسه عالی تکنیکوم نفیسی نامگذاری کرد. فعالیت‌ها. با توجه به آنکه بعدها دانشگاه صنعتی خواجه نصیرالدین طوسی از ادغام چندین دانشکده از جمله مدرسه عالی تکنیکوم نفیسی ایجاد شد و اصلی‌ترین بخش این دانشگاه نیز همین مؤسسه بوده است، حبیب نفیسی را
دانشگاه نیز همین مؤسسه بوده است، حبیب نفیسی را می‌توان بنیان‌گذار دانشگاه صنعتی خواجه نصیرالدین طوسی نیز دانست. نفیسی علاوه بر تأسیس خواجه نصیر و پلی تکنیک بنیانگذار دانشگاه‌های علم و صنعت و مازندران نیز بود. علیرضا بذرافشان فیلم مستندی از زندگی وی تهیه کرده است. زندگی شخصی. پدر حبیب نفیسی دکتر علی‌اصغر نفیسی (مؤدب‌الدوله) نخستین وزیر بهداری ایران بود. همسر نخست نفیسی زرین‌ملک دختر حسین حکیمی و نواده میرزا محمود خان حکیم الملک (عموی ابراهیم حکیمی حکیم الملک دوم) بود که در جوانی درگذشت. همسر دوم او عظمی عدل
دوم) بود که در جوانی درگذشت. همسر دوم او عظمی عدل دختر یوسف‌خان مکرم‌الملک و خواهر یحیی عدل بود. او برادرزاده سعید نفیسی است و از طریق ازدواج دوم خود با محمدولی فرمانفرمائیان باجناغ شد. حبیب نفیسی در مرداد ۱۳۶۳ در گذشت و در بهشت زهرای تهران آرامگاه شماره ۴۳۷۷ به خاک سپرده شد.
مسجد شیخ لطف‌الله یک اثر معماری منحصر به فرد است که در اصفهان واقع شده و جزء میراث جهانی یونسکو است. این مسجد در دوران صفویه در اوایل قرن هفدهم میلادی (ساخته شده در ۱۶۱۹–۱۶۰۲ میلادی _ در زمان شاه عباس بزرگ) ساخته شد. مسجد شیخ لطف‌الله به دلیل طراحی منحصر به فرد و پیچیده اش شناخته شده است و آن را به یک جاذبه دیدنی تبدیل کرده است. این مسجد که در مقابل عمارت عالی‌قاپو و همسایگی مسجد شاه قرار دارد، به نام شیخ لطف‌الله عاملی اصفهانی از علمای برجسته آن زمان نامگذاری شده است. مسجد شیخ لطف‌الله در ضلع شرقی میدان
شده است. مسجد شیخ لطف‌الله در ضلع شرقی میدان نقش جهان که یکی از بزرگ‌ترین میدان‌های جهان است، قرار دارد. یکی از بارزترین ویژگی‌های مسجد شیخ لطف‌الله گنبد آن است که برخلاف بسیاری از مساجد دیگر مناره ندارد. این بنا با الگوی کاشی کاری خاص آراسته شده است و با بازتاب نور خورشید از کاشی‌ها، جلوه ای ویژه ایجاد می‌کند. کاشی کاری‌های معرق در نمای بیرونی مسجد بسیار دقیق است و مهارت مخصوصی در طراحی و ساخت آنها به کار برده شده است. نمازخانه اصلی دارای محراب کاشی کاری شده پیچیده و رنگارنگ است که جهت مکه (قبله) را نشان
پیچیده و رنگارنگ است که جهت مکه (قبله) را نشان می‌دهد. دیوارهای مسجد با نقوش گل و خطاطی ظریف پوشیده شده است. سقف با نقوشی ظریف و هنرمندانه ساخته شده است. بازتاب صدا در مسجد شیخ لطف‌الله معماری ویژه این بنا را معرفی می‌کند. اگر در یک نقطه خاص در یک طرف مسجد بایستید، صدای شما به وضوح از طرف مقابل حتی در با زمزمه ای آرام شنیده می‌شود. این مکان برای تجلیل شیخ لطف‌الله مَیسی بنا گردیده و سالانه گردشگران زیادی را جذب خود می‌کند. پیشینه. طرح مسجد شیخ لطف‌الله در زمانی که نقشه چهار باغ و باغ هزارجریب به مرحله
در زمانی که نقشه چهار باغ و باغ هزارجریب به مرحله اجراء درآمد ریخته شد و در دورانی که معماری صفویه به شکوفایی رسیده بود مورد بهره‌برداری قرار گرفت. ساخت این مسجد در نیمه اول قرن یازده هجری، در سال ۱۰۱۱ هجری قمری (۱۶۰۲ میلادی) و به فرمان شاه عباس اول آغاز شد و در سال ۱۰۲۸ هجری قمری (۱۶۱۹ میلادی) به پایان رسید. ساخت این مسجد هجده سال به طول انجامید. گفته می‌شود معمار این مسجد استاد محمدرضا اصفهانی، پسر استاد حسین بنا اصفهانی بوده است. این مسجد بر خرابه‌های مسجدی که قبلاً در آن محل بوده ساخته شد. مسجد شیخ