مقادیر «درست» یا «غلط» با نوع Bool نمایش داده میشوند.
این نوع فقط دو مقدار دارد: true و false.
julia> true
true
julia> false
false
سه عملگر منطقی در Julia وجود دارد.
&& عملگر منطقی «و» است.
اگر عبارات در هر دو طرف && مقدار true داشته باشند، نتیجه true خواهد بود.
julia> true && true
true
julia> true && false
false
|| عملگر منطقی «یا» است.
اگر عبارت در هر یک از دو طرف || مقدار true داشته باشد، نتیجه true خواهد بود.
julia> true || true
true
julia> false || true
true
! عملگر منطقی «نقیض» است.
مقادیر true و false را جابهجا میکند.
julia> !true
false
julia> !false
true
برای عبارات طولانیتر و پیچیدهتر، بهتر است برای روشن شدن منظورتان از پرانتز استفاده کنید.
julia> (true || false) && (false && true)
false
در این تمرین، مقداری منطق برای یک بازی رایانهای مینویسید که دوستتان در حال ساخت آن است. شخصیت اصلی بازی آنالین است؛ دختری شجاع با یک سگ خانگی سرسخت و وفادار. متأسفانه بدبختی از راه میرسد: بهترین دوستش هنگام چیدن توت در جنگل دزدیده میشود. آنالین تلاش میکند دوستش را پیدا کند و آزادش کند و در این ماجراجویی میتواند سگش را هم همراه ببرد.
آنالین در نهایت اردوگاهی را پیدا میکند که دوستش در آن زندانی است و معلوم میشود دو آدمربا وجود دارد: یک شوالیهی نیرومند و یک کماندار حیلهگر.
برای ادامهی بازی چند گزینه به بازیکن نشان داده میشود. برای هر یک از این چهار گزینهی ممکن باید تابعی بنویسید که به بازی بگوید آن گزینه را نشان بدهد یا نه.
اگر شوالیه خواب باشد، آنالین میتواند پیش از آنکه او درستوحسابی بیدار شود و زرهاش را بپوشد، حملهای سریع به اردوگاه بزند.
تابعی به اسم can_do_fast_attack پیادهسازی کنید که یک «مقدار منطقی» میگیرد و نشان میدهد آیا شوالیه بیدار است یا نه.
این تابع اگر بر اساس وضعیت شخصیت، عمل «حملهی سریع» در دسترس باشد true را برمیگرداند؛ در غیر این صورت false را برمیگرداند:
julia> knight_awake = true
julia> can_do_fast_attack(knight_awake)
false
اگر دستکم یکی از آنها بیدار باشد، میتوان جاسوسی کرد. در غیر این صورت، جاسوسی اتلاف وقت است.
تابعی به اسم can_spy پیادهسازی کنید که سه مقدار منطقی میگیرد که بهترتیب نشان میدهند آیا شوالیه، کماندار و زندانی بیدارند یا نه.
این تابع اگر بر اساس وضعیت شخصیتها عمل «جاسوسی» در دسترس باشد true را برمیگرداند؛ در غیر این صورت false را برمیگرداند:
# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true
اگر زندانی بیدار باشد و کماندار خواب باشد، میتوان با صداهای پرندگان به او علامت داد. اگر کماندار بیدار باشد، نمیتوان بیخطر به او علامت داد، چون کماندار در علامتدهی با صدای پرندگان هم آموزش دیده است.
تابعی به اسم can_signal_prisoner پیادهسازی کنید که دو مقدار منطقی میگیرد که بهترتیب نشان میدهند آیا کماندار و زندانی بیدارند یا نه.
این تابع اگر بر اساس وضعیت شخصیتها عمل «علامت دادن به زندانی» در دسترس باشد true را برمیگرداند؛ در غیر این صورت false را برمیگرداند:
julia> archer_awake = false
julia> prisoner_awake = true
julia> can_signal_prisoner(archer_awake, prisoner_awake)
true
آنالین میتواند دزدکی وارد اردوگاه شود تا دوستش را آزاد کند. این کار پرخطر است و فقط به یکی از دو روش زیر موفق میشود:
اگر آنالین سگ خانگیاش را همراه داشته باشد، در صورتی میتواند زندانی را نجات دهد که کماندار خواب باشد. شوالیه از سگ میترسد و کماندار هم فرصت نمیکند پیش از فرار آنالین و دوستش آماده شود.
اگر آنالین سگش را همراه نداشته باشد، باید خودش و زندانی بسیار بیسروصدا عمل کنند! آنالین اگر بیدار باشد و هم شوالیه و هم کماندار خواب باشند، میتواند زندانی را آزاد کند؛ اما اگر زندانی خواب باشد، نمیتوان نجاتش داد: از ظاهر شدن ناگهانی آنالین غافلگیر میشود و شوالیه و کماندار را بیدار میکند.
تابعی به اسم can_free_prisoner پیادهسازی کنید که چهار مقدار منطقی میگیرد.
سه پارامتر اول بهترتیب نشان میدهند آیا شوالیه، کماندار و زندانی بیدارند یا نه.
پارامتر آخر نشان میدهد آیا سگ خانگی آنالین حاضر است یا نه.
این تابع اگر بر اساس وضعیت شخصیتها عمل «آزاد کردن زندانی» در دسترس باشد true را برمیگرداند؛ در غیر این صورت false را برمیگرداند:
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false
julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false