Size: a a a

2021 July 10

И

Иван in F# Chat
Не компилится из-за inline
источник

VK

Vladislav Khapin in F# Chat
Компилится
источник

VK

Vladislav Khapin in F# Chat
источник

И

Иван in F# Chat
источник

И

Иван in F# Chat
источник

P

Pavel in F# Chat
Спасибо. Интересное решение, в лоб)
источник

IC

Ilya L Che in F# Chat
У меня вот так заработало:
let inline factorial n =
 let rec factorialInner p =
     match p with
     | x when x <= LanguagePrimitives.GenericOne -> LanguagePrimitives.GenericOne
     | _ -> p * factorialInner (p - LanguagePrimitives.GenericOne)
 factorialInner n
источник

IC

Ilya L Che in F# Chat
Кстати, только у меня райдер при попытке перейти к объявлению LanguagePrimitives.GenericOne просто открывает начало prim-types.fs? Это известная проблема?
источник

И

Иван in F# Chat
Надо чтобы bigint возвращало, там довольно быстро начинается переполнение
источник

И

Иван in F# Chat
У меня тоже
источник

IC

Ilya L Che in F# Chat
Тогда надо задать к n требование, что у bigint есть конструктор с этим типом, получается.
источник

IC

Ilya L Che in F# Chat
А с учётом того, что у bigint есть конструкторы для byte[] и ReadOnlySpan<byte>, это всё выглядит очень странно.
источник

P

Pavel in F# Chat
Тогда надо в лисп или смолток, там если операция породила большое / дробное число, оно и возвращается
источник

IC

Ilya L Che in F# Chat
Да не, наверное, можно перечислить типы, как это сделано для GenericOne.
источник

P

Pavel in F# Chat
Тут в другом проблема, если на вход подан инт, то функция стипизируется к инту, а операция инт * инт даст переполнение
источник

IC

Ilya L Che in F# Chat
Почему это? Внутренняя функция будет работать только с bigint просто.
источник

P

Pavel in F# Chat
А так, это да
источник

IC

Ilya L Che in F# Chat
Ладно, я сдаюсь. Тут нужны люди, познавшие дзен сртп.
источник

P

Pavel in F# Chat
А не, не поможет, если внутренняя с бигинтом, а внешняя затипизировалась как инт, то снова возвращаемся на исходную - бигинт в инт не влезет
источник

IC

Ilya L Che in F# Chat
Внешняя возвращает bigint всегда, разумеется.
источник