From 3da854fc1364bac2b56216f07cac2f7229c23cc1 Mon Sep 17 00:00:00 2001 From: Artem-Darius Weber Date: Thu, 17 Apr 2025 14:02:15 +0300 Subject: [PATCH] =?UTF-8?q?(lab=205)=20feat:=20task-12:=20=D0=94=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC?= =?UTF-8?q?=D0=B0=20FavoriteLangFP=20=D1=81=20=D1=80=D0=B5=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B5=D0=B9=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D1=8B=20=D1=81=D1=83=D0=BF=D0=B5=D1=80=D0=BF=D0=BE=D0=B7=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=B8=20=D0=BA=D0=B0=D1=80=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab 5/FavoriteLangFP/FavoriteLangFP.fsproj | 13 ++++ lab 5/FavoriteLangFP/Program.fs | 88 ++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 lab 5/FavoriteLangFP/FavoriteLangFP.fsproj create mode 100644 lab 5/FavoriteLangFP/Program.fs diff --git a/lab 5/FavoriteLangFP/FavoriteLangFP.fsproj b/lab 5/FavoriteLangFP/FavoriteLangFP.fsproj new file mode 100644 index 0000000..c614f8d --- /dev/null +++ b/lab 5/FavoriteLangFP/FavoriteLangFP.fsproj @@ -0,0 +1,13 @@ + + + + Exe + net7.0 + FavoriteLangFP + + + + + + + \ No newline at end of file diff --git a/lab 5/FavoriteLangFP/Program.fs b/lab 5/FavoriteLangFP/Program.fs new file mode 100644 index 0000000..02cc4f8 --- /dev/null +++ b/lab 5/FavoriteLangFP/Program.fs @@ -0,0 +1,88 @@ +open System + +let getResponse (language: string) = + match language.ToLower() with + | "f#" | "fsharp" -> "Ты подлиза! Думаешь, это поможет тебе получить хорошую оценку?" + | "prolog" -> "Ты подлиза! И мазохист, видимо. Кто вообще любит Prolog?" + | "python" -> "Ух ты, как оригинально! Еще один фанат змеиного синтаксиса и отступов вместо скобок." + | "javascript" -> "JavaScript? Серьезно? Язык, где null не равен null, но равен undefined? Удачи с этим." + | "java" -> "Java... Любишь писать 20 строк кода там, где хватило бы 2, да? Фанат многословия?" + | "c++" -> "C++, где каждая ошибка - это пять новых багов и утечка памяти. Смелый выбор!" + | "rust" -> "О, хипстер программирования! Любишь рассказывать всем про заимствования и время жизни?" + | "haskell" -> "Хаскель? Ты, наверное, любишь объяснять монады через аналогии с космосом?" + | "c#" -> "C#... Мечтал стать разработчиком в Microsoft, но не прошел собеседование?" + | "go" -> "Go - когда хочешь писать на C, но без всех сложных функций, которые делают его полезным." + | "ruby" -> "Ruby? В 2010-м позвонили, просят их язык обратно." + | "php" -> "PHP - доказательство того, что даже плохо спроектированный язык может прожить десятилетия." + | "swift" -> "Swift? Нравится платить Apple дань за возможность разрабатывать для их устройств?" + | "kotlin" -> "Kotlin - когда Java настолько плоха, что пришлось изобрести новый язык." + | "scala" -> "Scala? Любишь когда код выглядит как иероглифы из древнего манускрипта?" + | "pascal" | "delphi" -> "Ого, динозавры еще не вымерли! Какой музей тебя выпустил?" + | "cobol" -> "COBOL? Ты, наверное, миллионер, обслуживающий банковские системы 60-х годов?" + | "fortran" -> "Фортран? Ты, наверное, ровесник первых ЭВМ?" + | "basic" -> "BASIC? Где ты нашел машину времени, чтобы вернуться в 80-е?" + | "lisp" -> "LISP? (Слишком (много (скобок (не (находишь?))))" + | "assembly" | "asm" -> "Ассемблер? Ты либо гений, либо просто любишь страдать." + | "matlab" -> "MATLAB? Твои графики, наверное, красивее, чем твой код." + | "r" -> "R? Статистика настолько скучна, что потребовался целый язык?" + | "perl" -> "Perl - когда хочешь, чтобы никто не мог прочитать твой код, даже ты сам через неделю." + | "lua" -> "Lua? Язык для тех, кто не дорос до настоящего программирования." + | "typescript" -> "TypeScript? JavaScript с дополнительной головной болью!" + | "objective-c" -> "Objective-C? Ты либо мазохист, либо застрял в 2007 году." + | "erlang" -> "Erlang? Ценишь непонятный синтаксис и отсутствие документации?" + | "clojure" -> "Clojure? Лисп в JVM - странный выбор для мучений." + | "sql" -> "SQL? Это не настоящий язык программирования, но ладно, притворимся." + | "bash" | "shell" -> "Bash? Скриптовое программирование - это же не настоящее программирование!" + | "powershell" -> "PowerShell? Windows-админ, который думает, что умеет программировать?" + | _ -> $"Что это за {language}? Настолько непопулярный, что я даже шутку не могу придумать!" + +let readInput () = Console.ReadLine() +let printPrompt () = + Console.OutputEncoding <- Text.Encoding.UTF8 + printfn "Какой язык программирования у тебя любимый?" +let printResponse (response: string) = printfn "%s" response + +// Оператор суперпозиции (композиции функций) +let (>>) f g x = g (f x) + +// Оператор каррирования (частичное применение) +let apply f x = f x + +[] +let main argv = + printfn "Выберите режим:" + printfn "1 - Использовать суперпозицию" + printfn "2 - Использовать каррирование" + + let mode = Console.ReadLine() + + match mode with + | "1" -> + printfn "\n--- Режим суперпозиции ---" + + let result = + printPrompt >> + (fun _ -> readInput()) >> + getResponse >> + printResponse + + result () + + | "2" -> + printfn "\n--- Режим каррирования ---" + + Console.OutputEncoding <- Text.Encoding.UTF8 + printfn "Какой язык программирования у тебя любимый?" + + let userInput = apply readInput () + + let responseFunction = apply getResponse + let response = responseFunction userInput + + let printFunction = apply printResponse + printFunction response + + | _ -> + printfn "Неверный выбор режима. Пожалуйста, выберите 1 или 2." + + 0 \ No newline at end of file