Escribir una función [cerrada]


15

Sinceramente, no puedo creer que este desafío aún no exista.

El reto

Escribe una función.

Los detalles

  • Su programa debe definir algún tipo de función invocable. Esto incluye cualquier cosa comúnmente conocida como función, función lambda o subrutina. Todos estos tipos de llamadas se denominarán "función" en esta publicación.

    1. La entrada a la función es opcional y no es obligatoria.

    2. Un valor de retorno de la función también es opcional y no es obligatorio, pero el control debe volver al programa de llamada.

  • La función debe asignarse a algún tipo de variable para que se pueda acceder más adelante. Esto incluye la asignación indirecta (en la mayoría de los idiomas comunes donde declarar una función nombrada agrega automáticamente el nombre al alcance actual) y la asignación directa (asignar una función anónima a una variable directamente).

  • La función no necesita ser nombrada.

  • La función debe ser creada por usted ; no puede simplemente asignar una función predeterminada del idioma a una variable.

  • Ninguna de las lagunas estándar , por favor.

Este es el , por lo que gana la puntuación más baja en bytes.


Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
DJMcMayhem

3
No entiendo por qué esto se volvió a abrir cuando ninguna de las razones por las que se cerró en primer lugar se ha abordado, simplemente oculta por mods en un chat
Jo King

2
Además, ¿desde cuándo puedes votar para reabrir tu propia publicación?
Jo King

77
Debes ser un abogado en lugar de un programador para competir en este desafío.
anatolyg

2
Esto definitivamente no debería haber sido reabierto en su estado actual.
Mego

Respuestas:



21

Jalea , 0 bytes

Pruébalo en línea!

Un enlace monádico que devuelve su argumento. Como es la primera función que aparece en el script, se puede llamar usando 1Ŀ.

Gracias a @lirtosiast por señalar que un enlace / función de 0 bytes funcionaría en Jelly.

Es decir


3,4,5 1Ŀ

Pruébalo en línea!


La respuesta de 0 bytes debería funcionar.
lirtosiast el

@KevinCruijssen sí! Buen lugar
Nick Kennedy

@NickKennedy Puede usar <pre><code>...</code></pre>para preservar espacios iniciales / finales / nuevas líneas en bloques de código. He editado tu respuesta en consecuencia. :)
Kevin Cruijssen

@KevinCruijssen gracias!
Nick Kennedy el

Mi conocimiento sobre gelatina es bastante escaso, pero ¿no necesitas una nueva línea para finalizar el enlace? Parece ser usado en el ejemplo.
Post Rock Garf Hunter

13

Javascript, 6 bytes

f=_=>0

Incluye asignación variable. No hay mucho que ver aqui.


28
Para que parezca más emoji:o=_=>o
Daniil Tutubalin, el

3
Otro emojid=_=>b
tsh

3
@tsh, por desgracia, bno está definido en este caso.
Daniil Tutubalin

2
@DanielO: Uno ciertamente podría argumentar eso. Pero en mi opinión, uno podría argumentar aún más efectivamente que no se puede llamar, por lo que no es una función. En javascript, una llamada de función se representa inequívocamente entre paréntesis.
recursivo el

2
@DaniilTutubalin Pero esto solo importa si lo invocas. Y no existe tal requisito sobre la función si debe ejecutarse sin lanzar una excepción.
tsh


8

ZX Spectrum BASIC, 6 bytes

DEF FN f()=PI

Hex Dump: CE 66 28 29 3D A7. CEes una palabra clave de 1 byte para DEF FN(incluido el espacio final), mientras que A7es una palabra clave de 1 byte para PI. Llamar usando FN f(). Programa de ejemplo:

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

Salida:

3.1415927

8

Haskell , 3 bytes

o=9

Este código define una función polimórfica llamada oque toma un parámetro de tipo y un parámetro de instancia de clase de tipo. Cuando se llama a esta función, toma la instancia de clase de tipo dada, obtiene su fromIntegermiembro, llama a ese miembro con el Integervalor de 9 y devuelve el resultado.

De acuerdo, lo que acabo de describir es simplemente el comportamiento de la función Haskell 9, y mi código simplemente define una función llamada oque es equivalente a 9.

Ahora la única pregunta es, ¿es la 9función "creada por usted" o es "una función predeterminada del idioma"?

Creo que es "creado por ti". Mi razón para decir esto es que si lees la especificación de Haskell, (supongo) no encontrarás ninguna 9función en ninguna parte. En cambio, la especificación establece que puede crear un número literal al unir uno o más dígitos. Por lo tanto, al escribir una cadena de dígitos, he escrito una función, incluso si resulta que solo he usado un dígito.


funciones inteligentes de nivel de tipo
Mega Man

8

R , 9 bytes

body(t)=0

Pruébalo en línea!

Creo que esto cumple con las reglas. La función tno toma entradas y salidas 0. Esto funciona porque ya existe una función llamada t(la función de transposición) y redefine el cuerpo de la función; no funcionaría con say body(a)=0(no se llama ningún objeto a) o body(F)=0( Fes una función lógica, no una). Creo que cumple porque todavía lo creo: no estoy reutilizando lo que hace la función predefinida, simplemente su nombre.

No creo que haya visto esto usado por los golfistas R, pero puede haber situaciones en las que nos permita ahorrar unos pocos bytes en desafíos donde necesitamos una función auxiliar.

Una solución más estándar habría sido:

R , 13 bytes

f=function()0

Pruébalo en línea!

Función que no requiere entradas ni salidas 0. Esto es 1 byte más corto que la función que no toma entrada y no emite nada, lo que sería

f=function(){}

Si tratamos de definir una función sin cuerpo ( f=function()), R interpreta esto como un comando incompleto (esto podría no ser cierto en versiones anteriores de R).

Como señaló OganM, reducimos esto a 11 bytes con

R , 11 bytes

function()0

Pruébalo en línea!

que técnicamente cumple con el requisito de desafío de que la función se asigne a algún tipo de variable, ya que está (efímeramente) asignada .Last.value.


1
function()0debería funcionar para su segunda respuesta ya que la función no necesita ser nombrada. Buen truco body<-, he tratado de usar bodyy hacer algunos de los desafíos extraños para meterse con el idioma
Giuseppe

1
@Giuseppe "La función debe asignarse a algún tipo de variable", por lo que no creo que function()0cumpla con las reglas de este desafío. Me encantaría dar una recompensa por una respuesta que utiliza el body()="truco con éxito.
Robin Ryder

44
function()0se asignaría a .Last.value()pesar de que sería empujar
OganM

@OganM ¡Buen punto!
Robin Ryder

pryr::f(x)si permitimos pryr.
qwr


6

C (gcc) , 5 bytes

Define una función fque no toma argumentos y técnicamente devuelve un valor entero indefinido.

f(){}

Pruébalo en línea!


1
"no toma argumentos" - miente mal. Ese es uno de los malentendidos comunes sobre C: la lista de argumentos vacía significa una cantidad indefinida de argumentos de tipo indefinido sin una forma portátil de acceder a ellos. Como nota al margen, esto también es incompatibilidad C / C ++.
Val dice Reinstate Monica


6

[Wolfram Language (Mathematica)], 1 byte

Este es un poco cuestionable:

f

Define f, que se puede "llamar" f[], por ejemplo , por , que "devuelve" la expresiónf[]


1
Hola, se puede llamar y el valor de retorno es opcional. Esto cuenta
connectyourcharger

1
Si esta solución es aceptable, entonces la respuesta de cero bytes es igual de buena: su "definición" de fno hace nada (aparte de recordar "He visto f") y puede omitirse. No f[]obstante, puede llamar , aún regresando sin evaluar f[]. Sin embargo, en cualquier caso, en su mayoría estás jugando trucos con el reemplazador de patrones y no estás instruyendo para evaluar una función.
Romano

@Roman He considerado agregar la versión de cero bytes, pero al final sentí que es aún más cuestionable: esto realmente crea el símbolo Global`f, mientras que la versión vacía no hace eso (podría argumentar que Nullestá asignado %1, pero Nulles una "función" incorporada). Pero como he señalado en la respuesta, si la solución de un byte es válida tampoco está del todo clara ...
Lukas Lang


5

Lua , 8 bytes

f=load''

Pruébalo en línea!

Define una función (global) f.

Esto usa la loadfunción Lua para compilar una cadena dada que está vacía en nuestro caso (el código vacío es un código válido) en una función que hace exactamente lo que escribimos en su cuerpo: nada.

Para los que se preguntan, la solución estándar sería

function f()end

pero esto es más largo (15 bytes).


5

POSIX sh, 6 bytes

s()(1)

El uso de llaves requiere un personaje más.


5

Java, 10 bytes

esto debería coincidir con las reglas del desafío

void f(){}

1
Estoy bastante seguro de que también f=a->a;es válido. :)
Kevin Cruijssen

@Kevin Cruijssen No soy un experto en Java y nunca usé la notación de matriz de Java. ¿Cómo podría hacer que su solución se compile? Inicialmente "probé" mi método en este TIO y luego agregué su enfoque allí. Ahora, el compilador espera un identificador. ¿Alguna explicación o uso incorrecto por mi parte?
pixma140

2
Es una función lambda de Java 8+. Entonces, cualquiera de estos dos funcionaría en este caso. Aquí una explicación más profunda de Java 8+ lambdas en caso de que aún no esté familiarizado con ellas.
Kevin Cruijssen




4

C (gcc) , 14 13 bytes

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

Pruébalo en línea!

Esto define una función que fdevuelve inty acepta un número no especificado (y tipo) de parámetros, cuyo código de máquina está contenido dentro del literal de cadena. El carácter unicode Ã(almacenado en la memoria como 0xc3 0x00 0x00 0x00en una pequeña máquina endian) corresponde a la retinstrucción x86 que regresa de la función. Las arquitecturas que no son x86 pueden requerir diferentes códigos de operación para regresar.

gccpuede requerir la -zexecstackbandera para evitar un defecto de seguridad.



3

Tcl , 6 5 11 bytes

set f {_ ;}

Pruébalo en línea!

Incluyendo la asignación a la variable f como parte del bytecount para cumplir con las reglas. Con este cambio, la definición más convencional a continuación vincula la anterior para bytecount:

proc f _ {}

¿Es esta una función con nombre? La función debe asignarse a algún tipo de variable para que se pueda acceder más adelante.
mbomb007

@ mbomb007 veo su punto, y lo arreglé en consecuencia
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>

Una plantilla es lo más parecido que tiene este lenguaje a una función. Definitivamente se puede llamar; toma cero argumentos y "devuelve" la cadena vacía.






2

AppleScript, 10

on a()
end

Explicación, compilación e inclusión de invocación:

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

-- invoke it:
a()


2

SmileBASIC (> = 3), 9 bytes

DEF A
END

La función es llamada por A.


Alternativamente DEF A*ENDen SB4
12Me21

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.