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