Какие общие советы у вас есть для игры в гольф в F #? Я ищу идеи, которые могут быть применены к кодовым проблемам гольфа в целом, которые, по крайней мере, несколько специфичны для F # (например, «удалить комментарии» - это не ответ). Пожалуйста, оставьте один совет за ответ.
21
Деконструкция кортежей
Если вы не можете обойтись при использовании переменных, используйте деконструкцию кортежа вместо нескольких выражений let
вместо того
Чтение со стандартного ввода
Библиотека ядра F # определяет псевдоним для
System.Console.In
вызываемогоstdin
. Это позволяет вам читать ввод.TextReader на MSDN
Большим преимуществом является тот факт, что он короче, чем
Console
вам, и вам не нужно открывать систему.Перебор строки
Строка в основном
char seq
, это позволяет вам использоватьSeq.map
напрямую со строками. Также возможно использовать их в понимании[for c in "" do]
Mutables / Reference клетки
Использование ссылочных ячеек не всегда короче, поскольку каждая операция чтения содержит дополнительный символ для разыменования ячейки.
Общие советы
Можно написать полный
match .. with
текстНет необходимости в пробелах до и после не буквенно-цифровых символов.
Если вам нужно заполнить строку слева или справа пробелами, вы можете использовать для этого флаги [s] printf [n].
Модуль Core.Printf
источник
Используйте идентификатор вместо х-> х
id - это оператор, обозначающий функцию тождества.
можно написать
источник
Я использую это здесь
источник
Эта-конвертация для функций
Большое спасибо Лайкони за этот совет в одном из моих решений .
Рассмотрим функцию, скажем, для суммирования строки с 3 для заглавных букв и 1 для всех остальных символов. Так:
По эте-преобразование , это может быть переписано как:
и вызывается так же, как и раньше:
Функция оператора прямого сложения
>>
Теперь предположим, что наша первоначальная задача состоит в суммировании строки с 3 для букв верхнего регистра и 1 для букв нижнего регистра, а все остальные символы исключаются.
Мы могли бы написать это как:
Мы можем использовать оператор прямой композиции (
>>
), чтобы связать две функции (Seq.filter
иSeq.sumBy
) вместе. С eta-преобразованием определение функции стало бы:Крис Смит написал отличную статью об
>>
операторе в своем блоге MSDN .источник
По возможности
Seq
короче чемList
:на один символ короче ...
источник
Избегайте скобок при использовании одного параметра и в кортеже
можно написать
источник
Предпочитать новую строку строки над "\ n"
Это начнет окупаться даже при появлении одного символа новой строки в вашем коде. Один вариант использования может быть:
(18 байт)
(17 байт)
Вдохновленный ответом Chiru для es6 .
Используется здесь
источник
Используйте .NET
.NET предлагает много хороших встроенных функций. F # может использовать их, так что не забывайте их!
Пример:
Это может быть полезно!
источник
Используйте лямбды, чтобы сохранить байт. Например, это:
Можно выразить так:
источник
Используйте для ..., а не для ..., чтобы пройти диапазон
источник
module
Ключевое слово может быть использовано для сокращения имен модулей при использовании повторно. Например:может стать
Это более полезно для более длинных программ, где методы модуля используются многократно (и каждый раз должны иметь полное имя, потому что они имеют
RequireQualifiedAccess
модификатор), и позволяют сбрасывать несколько символов, особенно когда более полезно использовать обычный массив CLR (например, изменяемость ), чем F #seq
илиlist
.источник