Open denisenes opened 6 months ago
После сессии попробую доделать Например, переименовать редукторы в call-by-name и call-by-value. Возможно, добавлю эта-редуктор (чтобы калькулятор приводил лямюда-терм к нормальной форме)
Ещё я научился печатать цветным текстом в консоль
Пример на си (чтоб не потерять)):
#include <stdio.h>
#define RESET "\33[0m"
#define RED "\033[40;1;31m"
#define YELLOW "\033[43;1;33m"
#define WHITE "\033[41;1;36m"
int main() {
printf("%s8%s", YELLOW, RESET);
printf("%s===3%s ", RED, RESET);
printf("%s-.%s\n", WHITE, RESET);
}
/*
Сбросить все свойства | 0
Повышенная яркость | 1
Пониженная яркость | 2
Подчеркнутый | 4
Нормальная яркость | 5
Инвертированный | 7
Скрытый | 8
********** ЦВЕТА ***********
Название цвета |Текст |Фон
----------------|-------|---
Черный | 30 | 40
Красный | 31 | 41
Зеленый | 32 | 42
Желтый | 33 | 43
Синий | 34 | 44
Маджента | 35 | 45
Циановый | 36 | 46
Белый | 37 | 47
----------------------------
*/
Если хочется в cmd такое делать, а не через си, haskel и т.д.:
@echo off
SetLocal EnableExtensions
::color 0F :: reset color all cmd (you can uncomment)
:: first hexDigit is BackGroundColor
:: second hexDigit is TextColor (ForeGround)
:: example
set start_red=0C :: red on black
set start_green=0A :: green on black
set start_cyan=0B :: cyan on black
set start_yellow=0E :: yellow on black
set start_blue=09 :: blue on black
set start_baklajan=0D :: darkMagenta on black
set start_lightblue=01 :: lightBlue on black
:: ======================================
:: common text
call :echoColor 00 "text" \n
:: WHITE text (yes, 0F is more white then 00)
call :echoColor 0D "text" \n
:: blue text on magenta
call :echoColor D1 "text" \n
:: gray text on cyan
call :echoColor B2 "text" \n
:: withount \n, Python example: print("text", end="")
call :echoColor 83 "text"
:: lightYellow text on lightYellow
call :echoColor EE "text" \n
:: =======================================
goto :eof :: skip :echoColor
:: func from The Internet, Thanks)
:echoColor [Color] [Text] [\n]
if not defined BS for /F "tokens=1 delims=#" %%i in ('"prompt #$H#& echo on& for %%j in (.) do rem"') do set "BS=%%i"
if not exist foo set /p .=.<nul>foo
set "regex=%~2" !
set "regex=%regex:"=\"%"
findstr /a:%1 /prc:"\." "%regex%\..\foo" nul
set /p .=%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%%BS%<nul
if "%3" neq "" echo.
variant = 1
-- забавно) Вроде читается получше, хоть и очень непривычноI insert second condition because if I see (\x.xx)(\x.xx) I want exit recursion
Это очень хорошее условие, которое в математике зовется фиксированной точкой (точкой стабильности) Fun-fact: в компиляторах оптимизации над программой проводятся до фиксированной точки, то есть до момента, когда программа не начнет оставаться неизменной при применении оптимизаций (в нашем случае "оптимизациями" являются бета-редукции) Предполагалось, что достижение фиксированной точки будет проверяться предикатомcanBeReduced
, но твое условие немного шире и допускает терм(\x.xx)(\x.xx)
. Что ж, почему бы и нетНа тестовых термах все работает хорошо, к коду в принципе тоже никаких замечаний нет, за задание поставлю 5. Давай еще на семинаре обсудим, что у тебя получилось по доп. заданию и если что я повышу еще на балл