Dr. Friedrich
Один для функций, который всегда возвращает сам себя
Dr. Friedrich
И второй — для юнита
Dr. Friedrich
Ага?
Дмитрий
вам что-то такое не прокатит?
в "нормальном языке" debugLog настолько агрессивно заинлайнил debugEnabled, что забыл, что она мутабельная
Pavel
Дмитрий
а, нет, я дебил
Дмитрий
Дмитрий
???
Dr. Friedrich
Nikolay
Nikolay
kprintf не отвалится?
Дмитрий
в любом кроме ассемблера
ну во-первых в ассемблере функций нет
а во-вторых в моем "любимом" сишарпе у функций может быть сколько хочешь аргументов
Aleksandr
Pavel
Дмитрий
я вот не помню чтоб у меня где-то были какие-то туплы
Дмитрий
а как out/ref параметры в туплы засунуть?
Nikolay
А в C# в Func разве может быть сколько угодно аргументов?
Pavel
а причем тут спецификация? в програмировани это тупл. в реализации конкретного языка это может называтся как угодно со своими тараканами что туда можно засунуть
Дмитрий
Vladislav
Dr. Friedrich
У кого есть сэмплы с SRTP? Я опять всё позабыл
Dr. Friedrich
Через оператор $ чтобы, ну или что-то такое эдакое
Nikolay
14
https://docs.microsoft.com/en-us/dotnet/api/system.func-17?view=netcore-3.1
16
Vladislav
Nikolay
Dr. Friedrich
https://stackoverflow.com/a/51010918/2684760 вроде во
Дмитрий
Дмитрий
где про это можно прочитать
Nikolay
Aleksandr
Aleksandr
от одного кортежа элементов
Aleksandr
тупл - это кортеж по-русски
Дмитрий
я знаю что такое тупл
Dr. Friedrich
Aleksandr
просто этот термин точно у нас в матане где-то фигурировал
Aleksandr
не могу вспомнить где
Dr. Friedrich
type T = T with
static member inline ($) (T, arg: unit) = ()
static member inline ($) (T, func: 'a -> 'b): 'a -> 'b =
fun _ -> (T $ Unchecked.defaultof<'b>)
let inline negate<'a>(): 'a =
let argType = typeof<'a>
printfn "%A" <| typeof<'a>
T $ Unchecked.defaultof<'a>
Вот такое должно работать, наверное
Dr. Friedrich
Но пока что у меня ни хрена не вышло
Дмитрий
Дмитрий
(и я тоже не помню где)
Dr. Friedrich
Он ругается, что второй инстанс оператора не находит сам себя, кажется
Nikolay
Nikolay
Dr. Friedrich
Dr. Friedrich
А как починить?
Aleksandr
и если определять мат. функцию как правило отображения множества A на B, то там будут кортежи
Dr. Friedrich
А в F# и a, b, c — тоже тупл, без всяких скобочек.
Dr. Friedrich
Aleksandr
тут поинт, наверное, в том, что в typescript есть пустые кортежи, видимо
Dr. Friedrich
let x = a, b, c
foon x
Dr. Friedrich
Или через всякие там <| и т.п. приколы
Dr. Friedrich
Хотя тут хз, сработает ли; наверняка у запятой повыше приоритет?
Aleksandr
это не промежуточное значение. это то же значение
Aleksandr
тождественное ему. alias по сути
Pavel
блин. я про синтаксис. понятно что для выполняемого кода это одно и тоже.
Pavel
что let что скобки собирают тупл из нескольких элементов
Дмитрий
а, т.е. ты применяешь понятие "тупл" к языкам, в которых их нет, только потому что и там и там круглые скобки
Aleksandr
ну это кстати, соответстувет тезису о том, что функции из ML\F# - это таки функции от одного аргумента.
Но мемберы из ООП F# не получается так рассматривать. из-за всяких [<Out>], [<ParamArray>]
Дмитрий
ладно, в сишке есть туплы
Дмитрий
раз в тайпскрипте туплы это [...]
то в ассемблере mov [eax], ebx - тоже тупл
Дмитрий
что такое "общепринятая нотация"
Дмитрий
ты даже сам сказал, "книжка по фп"
Дмитрий
сишка это фп язык?
Pavel
Pavel
Aleksandr
Nikolay
Дмитрий
а где в сишке функции первого порядка, замыкания и прочая лямбда-дичь?
Pavel
а.. сишка.. я думал ты про свой любимый сшарп.. попутал
Nikolay
Сложно
Aleksandr
а еще напомните пожалуйста язык, в котором туплы определяются в <...>