Que dicas gerais você tem para jogar golfe em F #? Estou procurando idéias que possam ser aplicadas aos problemas de código de golfe em geral que sejam pelo menos um pouco específicos para F # (por exemplo, "remover comentários" não é uma resposta). Poste uma dica por resposta.
21
Desconstrução de tupla
Caso não consiga usar variáveis, use a desconstrução da tupla em vez de várias expressões let
ao invés de
Lendo de stdin
A biblioteca principal do F # define um alias para
System.Console.In
chamadostdin
. Isso permite que você leia a entrada.TextReader no msdn
A grande vantagem, além de ser mais curta do que
Console
é, não é necessário abrir o SystemIterando sobre String
string é basicamente um
char seq
, isso permite que você useSeq.map
diretamente com strings. Também é possível usá-los em compreensões[for c in "" do]
Mutables / células de referência
O uso de células de referência nem sempre é mais curto, pois toda operação de leitura vem com um caractere adicional para apagar a célula.
Dicas gerais
É possível escrever a
match .. with
linha completaNão há necessidade de espaço em branco antes e depois de caracteres não alfanuméricos.
Caso você precise colocar uma string com espaços à esquerda ou à direita, você pode usar sinalizadores [s] printf [n] para isso.
Módulo Core.Printf
fonte
Use id em vez de x-> x
id é um operador que representa a função de identidade.
pode ser escrito
fonte
Eu uso aqui
fonte
Eta-conversão para funções
Muito obrigado a Laikoni por esta dica em uma das minhas soluções .
Considere uma função para, digamos, somar uma sequência com 3 para letras maiúsculas e 1 para todos os outros caracteres. Tão:
Por conversão eta, isso pode ser reescrito como:
e chamado da mesma maneira que antes:
O operador de composição direta da função
>>
Agora, suponha que nosso desafio original seria somar uma sequência com 3 para letras maiúsculas e 1 para letras minúsculas, e todos os outros caracteres são excluídos.
Podemos escrever isso como:
Podemos usar o operador de composição direta (
>>
) para encadear as duas funções (Seq.filter
eSeq.sumBy
) juntas. Com a conversão eta, a definição da função se tornaria:Chris Smith fez um ótimo artigo sobre o
>>
operador em seu blog do MSDN .fonte
Quando possível,
Seq
é menor queList
:é um char mais curto ...
fonte
Evite parênteses ao usar um parâmetro e na tupla
pode ser escrito
fonte
Preferir nova string de linha sobre "\ n"
Isso começará a render até mesmo um único caractere de nova linha no seu código. Um caso de uso pode ser:
(18 bytes)
(17 bytes)
Inspirado na resposta de Chiru para es6 .
Utilizado aqui
fonte
Use .NET
O .NET oferece muitos bons recursos. O F # pode usá-los, então não os esqueça!
Exemplo:
Pode ser útil!
fonte
Use lambdas para salvar um byte. Por exemplo, isto:
Pode ser expresso como este:
fonte
Use para ... para em vez de para ... para percorrer um intervalo
fonte
A
module
palavra-chave pode ser usada para encurtar os nomes dos módulos quando usados repetidamente. Por exemplo:pode se tornar
Isso é mais útil para programas mais longos, em que os métodos do módulo são usados repetidamente (e devem ser totalmente nomeados toda vez porque possuem o
RequireQualifiedAccess
modificador) e permite reduzir alguns caracteres, especialmente quando é mais útil usar uma matriz CLR regular (por exemplo, mutabilidade ) que um F #seq
oulist
.fonte