Escreva uma função [fechada]

15

Sinceramente, não acredito que esse desafio ainda não exista.

O desafio

Escreva uma função.

Os detalhes

  • Seu programa deve definir algum tipo de função que pode ser chamada. Isso inclui qualquer coisa comumente conhecida como função, função lambda ou sub-rotina. Todos esses tipos de chamadas são mencionados como uma "função" nesta postagem.

    1. A entrada para a função é opcional e não é necessária.

    2. Um valor de retorno da função também é opcional e não é necessário, mas o controle deve retornar ao programa de chamada.

  • A função deve ser atribuída a algum tipo de variável para que seja possível acessá-la posteriormente. Isso inclui a atribuição indireta (nos idiomas mais comuns em que a declaração de uma função nomeada adiciona automaticamente o nome ao escopo atual) e a atribuição direta (a atribuição direta de uma função anônima a uma variável).

  • A função não precisa ser nomeada.

  • A função deve ser criada por você - você não pode apenas atribuir uma função padrão do idioma a uma variável.

  • Nenhuma das brechas padrão , por favor.

Isso é , então a pontuação mais baixa em bytes vence.

conecte seu carregador
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
DJMcMayhem
3
Eu não entendo por que isso foi reaberto quando nenhum dos motivos foi fechado em primeiro lugar ter sido abordados, apenas escondido por mods em um bate-papo
Jo rei
2
Além disso, desde quando você pode votar para reabrir sua própria postagem?
Jo rei
7
Você precisa ser um advogado e não um programador para competir nesse desafio.
Anatolyg 21/07/19
2
Definitivamente, isso não deveria ter sido reaberto em seu estado atual.
Mego

Respostas:

30

código de máquina x86 / x64, 1 byte

c3

Montagem:

ret

Experimente online! (nasm)

¯ \ _ (ツ) _ / ¯

sete negativos
fonte
2
Mas isso não dá um nome à função ou armazena uma referência à função em uma variável.
Tanner Swett
4
@TannerSwett Pode ser chamado pelo endereço.
negativo sete
7
Você pode adicionar uma etiqueta na montagem. Não aumenta o tamanho do código compilado e atribui um nome à função.
Daniil Tutubalin
21

Geléia , 0 bytes

Experimente online!

Um link monádico que retorna seu argumento. Como é a primeira função a aparecer no script, ela pode ser chamada usando 1Ŀ.

Obrigado a @lirtosiast por apontar que um link / função de 0 byte funcionaria no Jelly.

Ou seja,


3,4,5 1Ŀ

Experimente online!

Nick Kennedy
fonte
A resposta de 0 byte deve funcionar.
lirtosiast
@KevinCruijssen yes! Bom local
Nick Kennedy
@NickKennedy Você pode usar <pre><code>...</code></pre>para preservar espaços à esquerda / à direita / novas linhas em blocos de código. Editei sua resposta de acordo. :)
Kevin Cruijssen 5/07
@KevinCruijssen thanks!
Nick Kennedy
Meu conhecimento sobre geléia é bastante limitado, mas você não precisa de uma nova linha para finalizar o link? Parece ser usado no exemplo.
Post Rock Garf Hunter
13

Javascript, 6 bytes

f=_=>0

Inclui atribuição de variável. Não há muito para ver aqui.

recursivo
fonte
28
Para torná-lo olhando mais emoji like-:o=_=>o
Daniil Tutubalin
3
Outro emojid=_=>b
tsh
3
@tsh, infelizmente, bnão está definido neste caso.
Daniil Tutubalin
2
@ DanielO: Alguém poderia certamente argumentar isso. Mas, na minha opinião, alguém poderia argumentar ainda mais efetivamente que você não pode chamá-lo, por isso não é uma função. Em javascript, uma chamada de função é representada sem ambiguidade entre parênteses.
recursiva
2
@DaniilTutubalin Mas isso só importa se você o invocar. E não existe tal requisito sobre a função se deve ser executado sem gerar uma exceção.
tsh
8

ZX Spectrum BASIC, 6 bytes

DEF FN f()=PI

Hex Dump: CE 66 28 29 3D A7. CEé uma palavra-chave de 1 byte para DEF FN(incluindo o espaço à direita), enquanto A7é uma palavra-chave de 1 byte para PI. Ligue usando FN f(). Exemplo de programa:

  10 PRINT FN f(): DEF FN f()=PI

Resultado:

3.1415927
Neil
fonte
8

Haskell , 3 bytes

o=9

Esse código define uma função polimórfica chamada oque aceita um parâmetro de tipo e um parâmetro de instância de classe de tipo. Quando essa função é chamada, ela pega a instância de classe de tipo especificada, obtém seu fromIntegermembro, chama esse membro com o Integervalor para 9 e retorna o resultado.

É verdade que o que acabei de descrever é apenas o comportamento da função Haskell 9, e meu código apenas define uma função chamada oque é equivalente a 9.

Agora, a única questão é: a 9função é "criada por você" ou é "uma função padrão do idioma"?

Eu acho que é "criado por você". Minha razão para dizer isso é que, se você ler a especificação para Haskell, (presumo) não encontrará menção de uma 9função em nenhum lugar. Em vez disso, a especificação afirma que você pode criar um literal numérico unindo um ou mais dígitos. Portanto, escrevendo uma sequência de dígitos, escrevi uma função - mesmo que por acaso tenha usado apenas um dígito.

Tanner Swett
fonte
funções inteligentes, de nível de tipo
Mega Man
8

R , 9 bytes

body(t)=0

Experimente online!

Eu acho que isso está em conformidade com as regras. A função tnão aceita entradas e saídas 0. Isso funciona porque já existe uma função chamada t(a função de transposição) e redefine o corpo da função; não funcionaria com o say body(a)=0(nenhum objeto chamado a) ou body(F)=0( Fé uma lógica, não uma função). Eu acho que cumpre porque ainda é criado por mim: não estou reutilizando o que a função predefinida faz, simplesmente o seu nome.

Acho que nunca vi isso ser usado pelos jogadores de golfe R, mas pode haver situações em que isso nos permita economizar alguns bytes em desafios nos quais precisamos de uma função auxiliar.

Uma solução mais padrão teria sido:

R , 13 bytes

f=function()0

Experimente online!

Função que não requer entrada e saída 0. Este é 1 byte menor que a função que não recebe entrada e não produz nada, o que seria

f=function(){}

Se tentarmos definir uma função sem corpo ( f=function()), R interpreta isso como um comando incompleto (isso pode não ser verdade nas versões mais antigas do R).

Conforme apontado por OganM, reduzimos isso para 11 bytes com

R , 11 bytes

function()0

Experimente online!

que tecnicamente atende ao requisito de desafio de que a função seja atribuída a algum tipo de variável, uma vez que é (efêmera) atribuída a .Last.value.

Robin Ryder
fonte
1
function()0deve funcionar para sua segunda resposta, já que a função não precisa ser nomeada. Truque on body<-, eu tentei usar bodye similares para fazer alguns dos desafios estranhos para mexer com a língua
Giuseppe
1
@ Giuseppe "A função deve ser atribuída a algum tipo de variável", então não acho que function()0esteja em conformidade com as regras deste desafio. Eu ficaria feliz em dar uma recompensa a uma resposta que usa o body()="truque com sucesso.
Robin Ryder
4
function()0seria atribuído a .Last.value()no entanto, que seria levando
OganM
@OganM Nice point!
Robin Ryder
pryr::f(x)se permitirmos pryr.
QWR
6

Perl 6 , 5 bytes

$!=!*

Experimente online!

Cria um lambda Qualquer que retorne o booleano não de seu parâmetro e o atribui à variável $!.

Brincadeira
fonte
6

C (gcc) , 5 bytes

Define uma função fque não aceita argumentos e, tecnicamente, retorna um valor inteiro indefinido.

f(){}

Experimente online!

ErikF
fonte
1
"não aceita argumentos" - mente mal. Esse é um dos mal-entendidos comuns sobre C: lista de argumentos vazia significa quantidade indefinida de argumentos de tipo indefinido sem uma maneira portátil de acessá-los. Como nota de rodapé, isso também é incompatibilidade com C / C ++.
val diz Restabelecer Monica
6

Espaço em branco , 7 bytes


  

	

Cria uma sub-rotina que retorna o controle ao chamador.

Explicado no contexto:

[N
S S N
_Create_Label][N
T   N
_Return]

Experimente online!

um aracnídeo de pedra
fonte
6

[Wolfram Language (Mathematica)], 1 byte

Este é um pouco questionável:

f

Define f, que pode ser "chamado" f[], por exemplo , por , que "retorna" a expressãof[]

Lukas Lang
fonte
1
Ei, pode ser chamado e o valor de retorno é opcional. Isso conta.
connectyourcharger
1
Se essa solução for aceitável, a resposta de zero byte é igualmente boa: sua "definição" de fnão faz nada (além de lembrar de "eu vi f") e pode ser deixada de fora. f[]No entanto, você pode ligar , ainda retornando sem avaliação f[]. No entanto, em qualquer caso, você está praticando truques com o substituto de padrão e não instruindo para avaliar uma função.
Roman
@Roman Eu considerei adicionar a versão de zero byte, mas no final me senti ainda mais questionável: isso realmente cria o símbolo Global`f, enquanto a versão vazia não faz isso (você pode argumentar que Nullestá atribuída %1, mas Nullé uma "função" incorporada). Mas, como já observei na resposta, se a solução de um byte é válido também não é totalmente claro ...
Lukas Lang
5

Quarto (gforth) , 5 bytes

Esta é uma função nomeada fque não faz nada.

: f ;

Experimente Online

No código TIO, adicionei um rodapé de see f, que imprime a definição da função.

mbomb007
fonte
5

Lua , 8 bytes

f=load''

Experimente online!

Define uma função (global) f.

Isso usa a loadfunção Lua para compilar determinada string que está vazia no nosso caso (código vazio é código válido) em uma função que faz exatamente o que escrevemos em seu corpo: nada.

Para quem se pergunta, a solução padrão seria

function f()end

mas isso é mais longo (15 bytes).

val diz Reinstate Monica
fonte
5

POSIX sh, 6 bytes

s()(1)

O uso de aparelho encaracolado requer mais um caractere.

kojiro
fonte
5

Java, 10 bytes

isso deve corresponder às regras do desafio

void f(){}
pixma140
fonte
1
Eu tenho certeza que também f=a->a;é válido. :)
Kevin Cruijssen
@ Kevin Cruijssen Não sou especialista em Java e nunca usei a notação de matriz Java. Como eu poderia fazer sua solução ser compilada? Inicialmente, "testei" meu método neste TIO e, em seguida, anexei sua abordagem. Agora, o compilador espera um identificador. Alguma explicação ou uso errado por mim?
precisa saber é
2
É uma função lambda Java 8+. Portanto, qualquer um desses dois funcionaria neste caso. Aqui está uma explicação mais detalhada do Java 8+ lambdas , caso você ainda não esteja familiarizado com eles.
Kevin Cruijssen 9/07/19
4

Kotlin , 8 bytes

val f={}

Uma função vazia armazenada em uma variável f.
Ligue usando f()ou f.invoke().

Peïo THIBAULT
fonte
4

shortC , 1 byte

A

Experimente online!

Transpiles para este C:

 int main(int argc, char **argv){;}
um aracnídeo de pedra
fonte
4

C (gcc) , 14 13 bytes

(*f)()=L"Ã";

Experimente online!

Isso define uma função fretornando inte aceitando um número não especificado (e tipo) de parâmetros, cujo código de máquina está contido na cadeia literal. O caractere unicode Ã(armazenado na memória como 0xc3 0x00 0x00 0x00em uma pequena máquina endian) corresponde à retinstrução x86 que retorna da função. Arquiteturas não x86 podem exigir diferentes códigos opcionais para retornar.

gccpode exigir que o -zexecstacksinalizador evite um segfault.

teto
fonte
3

Tcl, 6 5 11 bytes

set f {_ ;}

Try it online!

Including the assignment to the variable f as part of the bytecount to comply with rules. With this change, the more conventional definition below ties the one above for bytecount:

proc f _ {}
SmileAndNod
fonte
Is this a named function? The function must be assigned to some sort of variable so that it is possible to be accessed at a later time.
mbomb007
@mbomb007 I see your point, and fixed it accordingly
SmileAndNod
3

XSLT, 134 bytes

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template name="a"></xsl:template></xsl:stylesheet>

A template is the closest thing this language has to a function. It can definitely be called; it takes zero arguments and "returns" the empty string.

Silvio Mayolo
fonte
3

Python 3, 10 bytes

f=lambda:0

Try it online!

U10-Forward - Reinstate Monica
fonte
Can't you just do def f():0 to save a byte?
EdgyNerd
@EdgyNerd Dat answered before me with that code, and i don't want to copy it
U10-Forward - Reinstate Monica
Oh ok, never mind then
EdgyNerd
3

Pascal 23bytes

procedure A;begin end;
rnso
fonte
2

AppleScript, 10

on a()
end

Explained, compiled, and including invocation:

on a()    -- declare event handler "a"
end a     -- end declaration

-- invoke it:
a()
a stone arachnid
fonte
2

Japt, 2 bytes

_

Called as $U ($.

_ can be replaced with @, Ï, or È.

Try it

Embodiment of Ignorance
fonte
2

SmileBASIC (>=3), 9 bytes

DEF A
END

Function is called by A.

snail_
fonte
Alternatively DEF A*END in SB4
12Me21
2

Wolfram Language (Mathematica), 2 bytes

#&

Try it online!

Unfortunately, just & does not work (an anonymous function that does nothing).

Roman
fonte
You need to save the function to a variable according to the rules, e.g. f=#&
Lukas Lang
@LukasLang it's automatically saved to %1 so there's no need for an explicit assignment to a variable like f.
Roman
Good point, that should be enough to fulfil the rules
Lukas Lang