الگوهای مشترک در روشهای بازگشتی

ساخت وبلاگ

آخرین مطالب

امکانات وب

دو ایده در مورد چگونگی حل مشکلات برنامه نویسی وجود دارد. [1]یک ایده این است که برنامه نویسان بیشتر با شناخت دسته بندی هایی از مشکلاتی که بارها و بارها به وجود می آیند و به یاد می آورند راه حلی که دفعه قبل کار کرده است ، کار می کنند. بنابراین ، دانش آموزان برنامه نویسی باید الگوهای برنامه یا الگوهای زیادی را بیاموزند و برای هر مشکل خاص ، خالی ها را پر کنند. ایده دیگر این است که چند اصل قدرتمند در برنامه نویسی وجود دارد ، و اگر یک یادگیرنده اصول را درک کند ، می تواند برای هر مشکلی اعمال شود ، حتی یک الگوی آشنا.

تحقیقات نشان می دهد که یک برنامه نویس متخصص ، مانند یک متخصص در هر مهارت ، عمدتاً با شناخت الگوها کار می کند. با این وجود ، ما به سمت ایده قدرتمند و قدرتمند تکیه می کنیم. حافظه متخصص پر از الگوهای دلخواه نیست. این پر از الگوهای معنی دار است ، زیرا این متخصص روند تلاش برای استدلال در مورد نحوه عملکرد هر روش و نحوه نوشتن رویه های جدید را پشت سر گذاشته است.

با این حال ، ما فکر می کنیم ارزش این را دارد که چند الگوی را بسیار متداول نشان دهد که قبل از اتمام این کتاب ، نمونه های مختلفی از هر یک را مشاهده کرده اید. پس از یادگیری این الگوهای ، می توانید تقریباً به طور خودکار رویه های مشابه را بنویسید. اما در الگوهای یادگیری یک طنز وجود دارد: در طرح ، پس از شناسایی یک الگوی ، می توانید یک روش عمومی را بنویسید که همه موارد را بدون نوشتن روشهای فردی برای هر موقعیتی انجام می دهد. پس دیگر لازم نیست از الگوی استفاده کنید! فصل 8 چندین روش کلی الگوی دستی را به نام روشهای مرتبه بالاتر ارائه می دهد. در این فصل الگوهای مربوط به آن روشهای مرتبه بالاتر را در نظر خواهیم گرفت و از نام آن روشها برای نامگذاری الگوهای استفاده خواهیم کرد.

اگر می توانید به جای آن از روشهای مرتبه بالاتر استفاده کنید ، الگوهای یادگیری چیست؟حداقل دو نکته وجود دارد. اولین مورد ، همانطور که خیلی زود خواهید دید ، این است که برخی از مشکلات تقریباً یکی از الگوهای را دنبال می کنند. در این حالت ، شما نمی توانید از روش مرتبه بالاتر مربوطه استفاده کنید ، که فقط برای مشکلاتی که دقیقاً از الگوی پیروی می کنند ، کار می کند. اما می توانید از درک خود از الگوی برای کمک به این مشکلات مرتبط استفاده کنید. نکته دوم این است که در فصل 19 ما نشان خواهیم داد که چگونه عملکردهای مرتبه بالاتر با استفاده از این الگوهای بازگشتی اجرا می شوند.

این فصل لیست رسمی از همه الگوهای مهم نیست. با کسب تجربه برنامه نویسی ، مطمئناً الگوهای بیشتری را به کارنامه خود اضافه می کنید.

هر الگوی

در اینجا روشی برای مربع کردن هر شماره در یک جمله از اعداد وجود دارد:

در اینجا روشی برای ترجمه هر کلمه یک جمله به خوک لاتین وجود دارد:

الگوی اینجا کاملاً واضح است. پرونده بازگشتی ما کاری ساده برای اولین جمله انجام خواهد داد ، مانند مربع آن یا خوک زدن به آن ، و ما آن را با نتیجه تماس بازگشتی در مورد این جمله ترکیب خواهیم کرد.

رویه نامه های نامه هایی که در فصل 11 نوشتیم نمونه ای از رویه ای است که هر الگوی را تقریباً از نزدیک دنبال می کند ، اما دقیقاً نیست. تفاوت در این است که جفت نامه ها به طور همزمان دو کلمه به استدلال خود نگاه می کنند.

این را با تعریف قبلی از Square Sent مقایسه کنید. پرونده بازگشتی هنوز از SE برای ترکیب یک قسمت از نتیجه با یک تماس بازگشتی مبتنی بر butfirst استدلال استفاده می کند ، اما در اینجا هم حرف اول و هم حرف دوم استدلال به اولین کلمه نتیجه کمک می کند. به همین دلیل پرونده پایه نیز باید متفاوت باشد. مورد بازگشتی حداقل به دو حرف نیاز دارد ، بنابراین مورد پایه یک کلمه یک حرف است. [2]

بیایید یک مشکل کمی متفاوت را حل کنیم. این بار ، ما می خواهیم این کلمه را به جفت نامه های غیر همپوشانی تقسیم کنیم ، مانند این:

تفاوت اصلی بین این دو کارکرد در این است که در جفت های جدا شده ، ما دو حرف را به طور هم زمان در تماس بازگشتی از بین می بریم. تفاوت دوم این است که ما باید با مورد خاص کلمات عجیب و غریب مقابله کنیم.

الگوی نگه داشتن

در هر الگوی ، ما نتایج تبدیل هر عنصر یک کلمه یا جمله را به چیز دیگری جمع می کنیم. این بار ما نوع دیگری از مشکل را در نظر خواهیم گرفت: انتخاب برخی از عناصر و فراموش کردن دیگران. اول ، در اینجا روشی برای انتخاب کلمات سه حرف از یک جمله وجود دارد:

بعد ، در اینجا روشی برای انتخاب واکه ها از یک کلمه وجود دارد:

بیایید به تفاوت های بین هر الگوی و الگوی نگاه کنیم. اول از همه ، رویه های نگهدارنده سه نتیجه ممکن دارند ، به جای اینکه فقط در اکثر روشهای شبیه به دو مورد باشد. در هر الگوی ، ما فقط باید بین پرونده پایه و مورد بازگشتی تمایز قائل شویم. در الگوی نگه داشتن ، هنوز یک مورد پایه وجود دارد ، اما دو مورد بازگشتی وجود دارد. ما باید تصمیم بگیریم که آیا اولین عنصر موجود را در مقدار بازگشت نگه داریم یا خیر. وقتی یک عنصر را نگه می داریم ، خود عنصر را حفظ می کنیم ، نه عملکردی از عنصر.

مانند هر الگوی ، موقعیت هایی وجود دارد که تقریباً الگوی نگه داشتن را دنبال می کنند. فرض کنید ما می خواهیم به دنبال حروف مضاعف در یک کلمه بگردیم:

این یک الگوی نگهدارنده خالص نیست زیرا ما نمی توانیم تصمیم بگیریم که آیا با نگاه کردن به آن نامه به تنهایی حرف اول را حفظ کنیم. ما باید یک بار دو مورد را بررسی کنیم. اما ما می توانیم با استفاده از کم و بیش همان الگوی یک رویه بنویسیم:

همانطور که در مثال EVENS از فصل 12 ، مورد پایه دونفره غیر معمول است ، و یکی از تماس های بازگشتی به طور همزمان دو حرف را در شکل گیری زیرزمین کوچکتر از بین می برد. اما ساختار COND با یک بند پایه پایه ، بند برای نگه داشتن نامه ها و بند برای رد حروف حفظ می شود.

الگوی جمع آوری

در اینجا دو روش بازگشتی برای توابع وجود دارد که همه عناصر استدلال را در یک نتیجه واحد ترکیب می کنند:

الگوی چیست؟ما از برخی از Combiner ( + یا Word) برای اتصال کلمه ای که با نتیجه تماس بازگشتی استفاده می کنیم استفاده می کنیم. تست مورد پایه برای یک آرگومان خالی ، اما مقدار بازگشت مورد پایه باید عنصر هویت عملکرد Combiner باشد.

اگر عنصر هویتی برای ترکیب کننده وجود نداشته باشد ، مانند مورد حداکثر ، ما الگوی را کمی تغییر می دهیم: [3]

ترکیب الگوها

این روش با جنبه های نگه داشتن با جنبه های انباشت ترکیب می شود. ما می خواهیم دو کار را به طور همزمان انجام دهیم: از کلماتی که شماره نیستند خلاص شوید و مجموع مواردی را که تعداد آنهاست محاسبه کنید..

در اینجا مثالی آورده شده است که همه را ترکیب می کند و نگه می دارد. ما روشی را می خواهیم که یک جمله را به عنوان استدلال خود در نظر بگیرد و هر کلمه از جمله را به لاتین خوک ترجمه کند ، اما کلماتی را که هیچ مصوت ندارند ، بیرون می آورد ، زیرا مترجم لاتین خوک برای چنین کلماتی کار نمی کند. این روش Safe-PIGL مانند یک الگوی نگهدارنده خواهد بود که فقط کلماتی را که حاوی مصوت ها هستند ، نگه می دارد ، اما مانند هر نتیجه ای که نتیجه حاوی نسخه های تبدیل شده از کلمات منتخب است ، نه خود کلمات.

سرانجام ، در اینجا مثالی وجود دارد که هر سه الگوی را با هم ترکیب می کند. در فصل 1 ما نوشتیم (با استفاده از روشهای مرتبه بالاتر) روش مخفف ، که کلمات "واقعی" یک جمله را انتخاب می کند (الگوی نگه داشتن) ، اولین حرف از هر کلمه (هر الگوی) را می گیرد و این حروف اولیه را ترکیب می کندبه یک کلمه واحد (الگوی انباشته). در یک روش بازگشتی می توانیم هر سه مرحله را به طور هم زمان انجام دهیم:

با تلاش برای ایجاد هر مشکل بازگشتی یکی از سه الگویی که در اینجا نشان داده ایم ، وسواس نکنید. همانطور که در ابتدای فصل گفتیم ، مهمتر از همه این است که شما اصول بازگشت را به طور کلی درک می کنید و می فهمید که بازگشت همه کاره چقدر است. این الگوهای فقط موارد خاصی هستند که اتفاقاً اغلب به وجود می آیند.

رویه های یاور

بیایید بگوییم که ما می خواهیم یک روش در هر دوتایی که یک عدد n و یک جمله را به عنوان آرگومان می گیرد و هر کلمه n را از جمله انتخاب می کند.

اگر سعی کنیم این را به روش آشکار بنویسیم ، به عنوان نوعی الگوی نگه داشتن ، دچار مشکل می شویم.

مشکل مربوط به N است که در Boldface است. ما در حال فکر کردن هستیم که این یک دعوت اصلی از همه-nth خواهد بود ، یعنی 3. اما در واقع ، ما قبلاً N را پایین آورده ایم تا در این دعوت مقدار آن 1 باشد (بررسی کنیددر نیمه اول همان بند Cond.) این روش به درستی دو کلمه اول را رد می کند اما تمام کلمات را بعد از آن نقطه نگه می دارد. به این دلیل است که ما در تلاش هستیم دو عدد مختلف را به خاطر بسپاریم: شماره ای که همیشه باید بین کلمات نگهدارنده و تعداد کلماتی که هنوز هم باید از این زمان استفاده کنیم ، پرش کنیم.

اگر می خواهیم دو شماره را به خاطر بسپاریم ، برای آنها به دو نام نیاز داریم. راه دستیابی به این هدف این است که رویه رسمی همه ما را به یک روال یاور فراخوانی کنیم که یک استدلال اضافی را انجام می دهد و کار واقعی را انجام می دهد:

این روش همیشه خود را به صورت بازگشتی با همان مقدار فاصله می نامد ، اما با مقدار متفاوتی از باقی مانده هر بار. باقیمانده در هر تماس بازگشتی کوچکتر می شود تا زمانی که برابر باشد 1. در آن تماس ، یک کلمه برای مقدار بازگشت نگه داشته می شود ، و ما هر یاب را به صورت بازگشتی با ارزش فاصله می نامیم ، یعنی مقدار اصلیn ، به عنوان باقی مانده جدید. اگر دوست دارید ، می توانید به این ترکیب یک روش اولیه سازی و یک روش یاور به عنوان الگوی دیگری برای مجموعه خود فکر کنید.

نحوه استفاده از الگوهای بازگشتی

یکی از راه هایی که الگوهای بازگشتی می تواند مفید باشد این است که اگر آنها را به عنوان الگوهای دارای شکافهای خالی فکر می کنید تا یک مشکل خاص را پر کنید. در اینجا نسخه های الگو از همه ، نگه داشتن و جمع آوری الگوهای مطابق جملات وجود دارد:

فرض کنید شما در حال تلاش برای نوشتن یک روش اول هستند که یک جمله را به عنوان استدلال آن می گیرد و شماره اول را در آن جمله برمی گرداند ، اما اگر شماره ای در استدلال وجود نداشته باشد ، کلمه بدون شماره را برمی گرداند. اولین قدم این است که حدس بزنید که کدام الگوی مفیدترین است. در این حالت برنامه باید با یک جمله کامل شروع شود و بخشی از آن جمله را انتخاب کند ، یعنی یک کلمه. بنابراین ، ما با الگوی نگه داشتن شروع می کنیم.

مرحله بعدی پر کردن خالی است. بدیهی است ، از آنجا که ما به دنبال یک شماره هستیم ، شماره؟در جای خالی می رود.

مشکل این است که این روش تمام اعداد موجود در جمله داده شده را برمی گرداند. اکنون کار ما این است که ببینیم الگوی باید چگونه اصلاح شود تا آنچه را می خواهیم انجام دهیم. ساختار کلی این الگوی یک کاندو با سه بند است. ما هر بند را به طور جداگانه در نظر خواهیم گرفت.

اگر ارسال شده خالی باشد ، روش باید برگردد؟در این حالت ، شماره اول در جمله وجود ندارد ، بنابراین باید بدون شماره برگردد:

اگر اولین کلمه جمله یک عدد باشد ، چه می شود؟برنامه باید فقط آن شماره را برگرداند ، و بقیه جمله را نادیده بگیرد:

اگر اولین کلمه جمله یک شماره نباشد ، چه می شود؟این روش باید یک تماس بازگشتی برای butfirst برقرار کند و هرچه که تماس بازگشتی باشد ، پاسخ است. بنابراین بند دیگر نیازی به تغییر نیست.

در اینجا کل روش است:

پس از پر کردن خالی در الگوی نگه داشتن ، ما این مشکل را با تمرکز بر جزئیات تعریف روش حل کردیم. ما هر قطعه از تعریف را بررسی کردیم تا تصمیم بگیریم چه تغییراتی لازم است. در عوض ، ما می توانستیم روی رفتار رویه متمرکز شویم. ما دو روش پیدا می کردیم که برنامه کاری را که قرار بود انجام دهد انجام نداد: برای یک جمله استدلال حاوی اعداد ، همه اعداد را به جای فقط یکی از آنها باز می گرداند. برای یک جمله بدون شماره ، به جای شماره بدون شماره ، جمله خالی را برمی گرداند. ما سپس کار را با اشکال زدایی از روش برای رفع هر یک از این مشکلات به پایان می رساندیم. نتیجه نهایی همان بود.

مشکلاتی که از الگوهای پیروی نمی کنند

ما می خواهیم روش ارسال شده را قبل از آن بنویسیم؟، که دو جمله را به عنوان آرگومان می گیرد و #t را باز می گرداند اگر اولی قبل از دوم به حروف الفبا باشد. ایده کلی این است که جملات را به صورت کلمه مقایسه کنید. اگر کلمات اول متفاوت باشند ، هر کدام که از نظر حروف الفبا زودتر تعیین کند کدام جمله قبل از دیگری می آید. اگر کلمات اول برابر باشند ، ما به مقایسه کلمات دوم می پردازیم. [5]

آیا این مشکل از هر یک از الگویی که ما دیده ایم پیروی می کند؟این همه چیز نیست ، زیرا نتیجه جمله ای نیست که در آن هر کلمه یک نسخه تبدیل شده از یک کلمه در آرگومان ها باشد. این یک نگهدارنده نیست ، زیرا نتیجه زیر مجموعه ای از کلمات در استدلال ها نیست. و دقیقاً انباشته نیست. ما به جای یک جمله پر از نتایج ، با یک نتیجه واقعی یا نادرست نتیجه می گیریم. اما در یک مشکل انباشت معمولی ، هر کلمه از استدلال به راه حل کمک می کند. در این حالت فقط یک کلمه از هر جمله نتیجه کلی را تعیین می کند.

از طرف دیگر ، این مشکل با الگوی نگه داشتن مشترک است: ما می دانیم که در هر دعوت نامه سه امکان وجود خواهد داشت. ممکن است به یک پرونده پایه (یک جمله خالی) برسیم. اگر اینگونه نباشد ، اولین سخنان جملات استدلال ممکن است یا ممکن است مربوط به راه حل باشد.

ما یک ساختار مشابه با الگوی نگه داشتن معمول خواهیم داشت ، به جز اینکه SE درگیر نیست. اگر کلمات نابرابر را پیدا کنیم ، مشکل بدون بازگشت بیشتر حل می شود. همچنین ، ما دو استدلال داریم و هر یک از آنها ممکن است خالی باشد.

اگرچه فکر کردن در مورد الگوی نگهدارنده به ما کمک کرد تا این راه حل را انجام دهیم ، نتیجه واقعاً شبیه به نگه داشتن نیست. ما مجبور شدیم با فکر کردن در مورد این مشکل خاص ، بیشتر جزئیات را اختراع کنیم ، نه با فکر کردن در مورد الگوی.

در فصل بعد نمونه هایی از رویه های بازگشتی را که با هر یک از این الگوهای کاملاً متفاوت است ، بررسی خواهیم کرد. به یاد داشته باشید ، این الگوهای میانبر برای بسیاری از مشکلات متداول است ، اما میانبر را با هزینه تکنیک کلی یاد نگیرید.

خطرات

مشکلات مربوط به فصل 12 را مرور کنید. آنها هنوز هم مرتبط هستند.

چگونه برای مورد پایه تست می کنید؟بیشتر نمونه های این فصل از خالی استفاده کرده اند؟، و به راحتی می توان بدون فکر کردن از آن استفاده کرد. اما ، به عنوان مثال ، اگر آرگومان یک عدد باشد ، احتمالاً این آزمایش اشتباه است. حتی وقتی استدلال یک جمله یا یک کلمه غیر عددی است ، ممکن است در مورد پایه خالی نباشد ، مانند مثال لاتین خوک.

یک مشکل جدی عدم شناخت موقعیتی است که در آن به یک متغیر اضافی نیاز دارید و بنابراین به یک روش کمکی نیاز دارید. اگر در هر مرحله به کل آرگومان اصلی و همچنین آرگومانی که به حالت پایه نزدیکتر می شود نیاز دارید، احتمالاً به یک رویه کمکی نیاز دارید. به عنوان مثال، یک جفت رویه بنویسید که یک کلمه را به عنوان آرگومان می گیرد و یک جمله از تمام کلمات دو حرفی ممکن از حروف کلمه آرگومان را برمی گرداند و امکان تکرار وجود دارد، مانند این:

یک مشکل ساده، هنگام استفاده از روش کمکی، نوشتن یک تماس بازگشتی در کمک کننده است که به جای فراخوانی کمک کننده، رویه اصلی را فراخوانی می کند.(به عنوان مثال، اگر هر nth-helper را به جای فراخوانی خودش، هر nth را فراخوانی می کرد، چه اتفاقی می افتاد؟)

برخی از رویه های بازگشتی با بیش از یک آرگومان به بیش از یک حالت پایه نیاز دارند. اما برخی این کار را نمی کنند. یکی از مشکلات این است که یک مورد اساسی ضروری را کنار بگذاریم. یکی دیگر شامل مواردی است که شبیه یک کیس پایه است اما با ساختار برنامه مطابقت ندارد.

به عنوان مثال، دلیل ارسال-قبل؟نیاز به دو حالت پایه این است که در هر تماس بازگشتی، هر دو send1 و sent2 کوچکتر می شوند. هر یک از جمله ها ممکن است ابتدا تمام شوند، و رویه باید مقادیر متفاوتی را در آن دو مورد برگرداند.

از سوی دیگر، تمرین 11. 7 از شما خواسته است که رویه ای بنویسید که دارای دو آرگومان است، اما تنها به یک حالت پایه نیاز دارد:

در این مثال، آرگومان wd از یک فراخوانی به دیگری کوچکتر نمی شود. احمقانه است که برای (خالی؟ wd) تست کنید.

یک مورد متوسط قابل توجه هر nth-Helper است. دارای دو شرط شرط است که دو آرگومان مختلف را بررسی می کند که به کوچکترین مقادیر مجاز خود می رسند، اما عبارت باقیمانده یک حالت پایه نیست. اگر باقیمانده مقدار 1 را داشته باشد، رویه همچنان خود را به صورت بازگشتی فراخوانی می کند.

تنها اصل کلی که می توانیم ارائه کنیم این است که باید به این فکر کنید که چه مواردی پایه مناسب هستند، نه اینکه به طور معمول هر چیزی را که دفعه قبل کار کرده است کپی کنید.

تمرینات

در صورت امکان، هر یک از این مسائل را به عنوان یک الگو (هر، نگه دارید، یا انباشته) طبقه بندی کنید، و سپس روش را به صورت بازگشتی بنویسید. در برخی موارد مثالی از فراخوانی رویه ای که می خواهیم شما بنویسید، به جای توصیف آن آورده ایم.

(اگر محلول شما به جای آن، صبح دیگر را حذف کند، تا زمانی که فقط یکی از آنها را حذف کند، اشکالی ندارد.)

(اگر رویه شما به جای آن (DI OB LA DA) برگردد اشکالی ندارد، به شرطی که همه موارد به جز یک مورد از هر کلمه تکراری را حذف کند.)

14. 5 [8. 7] یک پرونده نامه را بنویسید که یک جمله را به عنوان استدلال خود می گیرد و تعداد کل نامه ها را در جمله باز می گرداند:

14. 6 عضو بنویسید؟واد

14. 7 اختلافاتی را بنویسید ، که به عنوان استدلال آن جمله ای از اعداد را می گیرد و جمله ای را که حاوی تفاوت بین عناصر مجاور است ، برمی گرداند.(طول جمله برگشتی یکی کمتر از استدلال است.)

14. 8 نوشتن Expand را بنویسید ، که یک جمله را به عنوان استدلال خود می گیرد. این جمله ای شبیه به آرگومان را برمی گرداند ، به جز اینکه اگر یک عدد در آرگومان ظاهر شود ، مقدار بازگشت شامل بسیاری از نسخه های کلمه زیر است:

14. 9 روشی به نام مکان را بنویسید که دو آرگومان ، یک کلمه و یک جمله را می گیرد. باید یک عدد را برگرداند که نشان می دهد در آن جمله می توان آن کلمه را یافت. اگر کلمه در جمله نیست ، #f را برگردانید. اگر این کلمه بیش از یک بار به نظر می رسد ، مکان ظاهر اول را برگردانید.

14. 10 نوشتن روش های محرک-مجاورت که یک جمله را به عنوان یک استدلال می گیرد و تعداد کلمات موجود در جمله ای را که بلافاصله با همان کلمه دنبال می شوند ، برمی گرداند:

14. 11 روش حذف-مجاورت را که یک جمله را به عنوان استدلال می گیرد بنویسید و همان جمله را برمی گرداند اما با هر کلمه ای که بلافاصله با همان کلمه حذف شده است ، باز می گردد:

14. 12 یک روش مربع مترقی را بنویسید؟این یک جمله از اعداد را به عنوان استدلال خود می گیرد. اگر هر شماره (غیر از اول) مربع شماره قبل از آن باشد ، باید #T را برگرداند:

14. 13 اگر شما آن را با کلمه ای مانند "fzzmlpt" که هیچ مصوت ای ندارد ، روش pigl را از فصل 11 انجام می دهد؟آن را برطرف کنید تا "frzzmlptay" برگردد.

14. 14 یک نوع محمول بنویسید؟این دو جمله به عنوان استدلال طول می کشد. اگر دو شرط برآورده شود ، باید #T را برگرداند: دو جمله باید همان تعداد کلمات را داشته باشند و هر کلمه از جمله اول باید همان تعداد حروف را به عنوان کلمه در موقعیت مربوطه در جمله دوم داشته باشد.

14. 15 نوشتن ادغام ، روشی که دو جمله از اعداد را به عنوان استدلال می گیرد. هر جمله باید از اعداد در حال افزایش باشد. ادغام باید به ترتیب یک جمله واحد حاوی تمام اعداد را برگرداند.(ما در فصل بعد به عنوان بخشی از الگوریتم مرتب سازی از این استفاده خواهیم کرد.)

14. 16 هجاهای رویه ای را بنویسید که یک کلمه را به عنوان استدلال آن می گیرد و تعداد هجا در کلمه را باز می گرداند ، مطابق با قانون زیر شمرده می شود: تعداد هجا ها تعداد مصوت ها است ، به جز اینکه گروهی از مصوت های متوالی یکی هستند. به عنوان مثال ، در کلمه "در حال افزایش" ، گروه "OA" یک هجا را نشان می دهد و واکه "من" یک نمونه دوم را نشان می دهد.

حتماً موارد آزمایشی را انتخاب کنید که خرابی های احتمالی رویه شما را نشان می دهد. به عنوان مثال ، اگر کلمه با یک مصوت به پایان برسد ، چه می شود؟اگر با دو واکه پشت سر هم پایان یابد ، چه می شود؟اگر بیش از دو مصوت متوالی داشته باشد چه می شود؟

(البته این قانون به اندازه کافی خوب نیست. این امر با مواردی مانند "e" که هجا ایجاد نمی کنند ("مانند") ، مصوت های متوالی که یک دیفتونگ را تشکیل نمی دهند ، سروکار ندارد ("همکاری") ، نامه هایی مانند "y" که فقط بعضی اوقات واکه ها هستند ، و غیره. اگر حوصله دارید ، ببینید که آیا می توانید برنامه را به تشخیص برخی از این موارد خاص آموزش دهید.)

[1] به این دلیل است که دو نوع افراد وجود دارند: کسانی که فکر می کنند دو نوع افراد وجود دارند ، و کسانی که این کار را نمی کنند.

[2] اگر فصل 8 را خوانده اید ، می دانید که می توانید با استفاده از هر عملکرد مرتبه بالاتر ، Square-Sent و Pigl-Sent را بدون بازگشت اجرا کنید. اما سعی کنید از همه برای اجرای جفت نامه استفاده کنید. متوجه خواهید شد که کاملاً نمی توانید آن را کار کنید.

[3] البته ، اگر نسخه طرح شما دارای −∞ باشد ، می توانید به جای تغییر الگوی ، از آن به عنوان مقدار بازگشت برای یک جمله خالی استفاده کنید.

[4] در اینجا نسخه عملکرد مرتبه بالاتر ، از فصل 8:

نسخه عملکرد مرتبه بالاتر خود مستندتر است و نوشتن آن آسان تر است. با این حال ، نسخه بازگشتی کمی کارآمدتر است ، زیرا از ایجاد یک جمله به عنوان یک مقدار متوسط فقط برای دور انداختن آن در نتیجه نهایی جلوگیری می کند. اگر ما این برنامه را برای استفاده خودمان می نوشتیم ، احتمالاً نسخه عملکرد مرتبه بالاتر را انتخاب می کردیم. اما اگر ما به جای طول 10 با احکام طول 10،000 سر و کار داشتیم ، بیشتر به کارآیی توجه می کردیم.

[5] فرهنگ لغت ها از یک قانون سفارش متفاوت استفاده می کنند ، که در آن جملات با آنها رفتار می شود که گویی آنها کلمات منفرد هستند و فضاها از بین می روند. طبق قانون فرهنگ لغت ، "A C" طوری رفتار می شود که گویی "AC" است و پس از "AB" می آید. طبق قانون ما ، "A C" قبل از "AB" می آید زیرا ما کلمات اول را مقایسه می کنیم ("A" و "AB").

آموزش کار در فارکس...
ما را در سایت آموزش کار در فارکس دنبال می کنید

برچسب : نویسنده : Mihayloo بازدید : <-PostHit-> تاريخ : دوشنبه 8 اسفند 1401 ساعت: 12:23