Ich kann ehrlich gesagt nicht glauben, dass es diese Herausforderung noch nicht gibt.
Die Herausforderung
Schreiben Sie eine Funktion.
Die Besonderheiten
Ihr Programm muss eine Art aufrufbare Funktion definieren. Dies schließt alles ein, was allgemein als Funktion, Lambda-Funktion oder Subroutine bekannt ist. Alle diese Arten von Callables werden in diesem Beitrag als "Funktion" bezeichnet.
Die Eingabe in die Funktion ist optional und nicht erforderlich.
Ein Rückgabewert der Funktion ist ebenfalls optional und nicht erforderlich, die Steuerung muss jedoch zum aufrufenden Programm zurückkehren.
Die Funktion muss einer Variablen zugewiesen werden, damit zu einem späteren Zeitpunkt darauf zugegriffen werden kann. Dies umfasst die indirekte Zuweisung (in den meisten gängigen Sprachen, in denen beim Deklarieren einer benannten Funktion der Name automatisch zum aktuellen Bereich hinzugefügt wird) und die direkte Zuweisung (direkte Zuweisung einer anonymen Funktion zu einer Variablen).
Die Funktion muss nicht benannt werden.
Die Funktion muss von Ihnen erstellt werden - Sie können einer Variablen nicht einfach eine Standardfunktion aus der Sprache zuweisen.
Keine der Standardlücken , bitte.
Dies ist Code-Golf , also gewinnt die niedrigste Punktzahl in Bytes.
Antworten:
x86 / x64-Maschinencode, 1 Byte
Versammlung:
Probieren Sie es online! (nasm)
¯ \ _ (ツ) _ / ¯
quelle
Gelee , 0 Bytes
Probieren Sie es online!
Ein monadischer Link, der sein Argument zurückgibt. Da es die erste Funktion ist, die im Skript angezeigt wird, kann sie mit aufgerufen werden
1Ŀ
.Vielen Dank an @lirtosiast für den Hinweis, dass eine 0-Byte-Verknüpfung / -Funktion in Jelly funktionieren würde.
Dh
Probieren Sie es online!
quelle
<pre><code>...</code></pre>
führende / nachfolgende Leerzeichen / Zeilenumbrüche in Codeblöcken beibehalten. Ich habe Ihre Antwort entsprechend bearbeitet. :)Javascript, 6 Bytes
Beinhaltet eine variable Zuordnung. Hier gibt es nicht viel zu sehen.
quelle
o=_=>o
d=_=>b
b
ist in diesem Fall leider nicht definiert.Python 3 , 9 Bytes
Probieren Sie es online!
quelle
ZX Spectrum BASIC, 6 Bytes
Hex - Dump:
CE 66 28 29 3D A7
.CE
ist ein 1-Byte-Schlüsselwort fürDEF FN
(einschließlich des nachfolgenden Leerzeichens), währendA7
es sich um ein 1-Byte-Schlüsselwort für handeltPI
. Mit anrufenFN f()
. Beispielprogramm:Ausgabe:
quelle
Haskell , 3 Bytes
Dieser Code definiert eine polymorphe Funktion,
o
die einen Typparameter und einen Typklasseninstanzparameter akzeptiert. Wenn diese Funktion aufgerufen wird, nimmt sie die angegebene TypklasseninstanzfromInteger
, ruft ihr Mitglied ab, ruft dieses Mitglied mit demInteger
Wert für 9 auf und gibt das Ergebnis zurück.Zugegeben, was ich gerade beschrieben habe, ist lediglich das Verhalten der Haskell-Funktion
9
, und mein Code definiert lediglich eine aufgerufene Funktion,o
die äquivalent zu ist9
.Die Frage ist nur, ob die
9
Funktion "von Ihnen erstellt" oder "eine Standardfunktion aus der Sprache" ist.Ich denke, dass es "von dir geschaffen" ist. Wenn Sie die Spezifikation für Haskell lesen, werden Sie (ich nehme an)
9
nirgendwo eine Erwähnung einer Funktion finden. Stattdessen wird in der Spezifikation angegeben, dass Sie ein Zahlenliteral erstellen können, indem Sie eine oder mehrere Ziffern miteinander verbinden. Daher habe ich durch das Schreiben einer Ziffernfolge eine Funktion geschrieben - auch wenn ich zufällig nur eine Ziffer verwendet habe.quelle
R , 9 Bytes
Probieren Sie es online!
Ich denke, das entspricht den Regeln. Die Funktion
t
nimmt keine Ein- und Ausgänge0
. Dies funktioniert, weil es bereits eine Funktion gibt,t
die Transponierungsfunktion genannt wird, und sie definiert den Körper der Funktion neu. es würde nicht funktionieren mit saybody(a)=0
(kein Objekt aufgerufena
) oderbody(F)=0
(F
ist eine logische, keine Funktion) funktionieren. Ich denke, es entspricht, weil es immer noch von mir erstellt wird: Ich verwende nicht wieder, was die vordefinierte Funktion tut, nur ihren Namen.Ich glaube, ich habe das noch nie von R-Golfern gesehen, aber es kann Situationen geben, in denen wir bei Herausforderungen, bei denen wir eine Helferfunktion benötigen, ein paar Bytes sparen können.
Eine Standardlösung wäre gewesen:
R , 13 Bytes
Probieren Sie es online!
Funktion ohne Ein- und Ausgänge
0
. Dies ist 1 Byte kürzer als die Funktion, die keine Eingabe annimmt und nichts ausgibt, was wäreWenn wir versuchen, eine Funktion ohne Körper zu definieren (
f=function()
) , interpretiert R dies als unvollständigen Befehl (dies trifft möglicherweise nicht auf ältere Versionen von R zu).Wie von OganM hervorgehoben, reduzieren wir dies auf 11 Bytes mit
R , 11 Bytes
Probieren Sie es online!
die technisch die Herausforderungsanforderung erfüllt, dass die Funktion einer Art von Variable zugewiesen wird, da sie (vorübergehend) zugewiesen wird
.Last.value
.quelle
function()0
sollte für Ihre zweite Antwort funktionieren, da die Funktion nicht benannt werden muss. Ordentlicher Trick aufbody<-
, ich habe zu verwenden versucht ,body
und das , wie einige der seltsamen Herausforderungen zu Chaos mit der Sprache zu tunfunction()0
den Regeln dieser Herausforderung entspricht. Ich würde gerne eine Prämie für eine Antwort geben, die das verwendetbody()="
Trick erfolgreich einsetzt.function()0
würde zugewiesen werden,.Last.value()
obwohl das drängen würdepryr::f(x)
wenn wir pryr erlaubenPerl 6 , 5 Bytes
Probieren Sie es online!
Erstellt ein beliebiges Lambda, das den Booleschen Wert und nicht den Wert seines Parameters zurückgibt, und weist ihn der Variablen zu
$!
.quelle
C (gcc) , 5 Bytes
Definiert eine Funktion
f
, die keine Argumente akzeptiert und technisch gesehen einen undefinierten ganzzahligen Wert zurückgibt.Probieren Sie es online!
quelle
Leerzeichen , 7 Bytes
Erstellt eine Unterroutine, die die Kontrolle an den Aufrufer zurückgibt.
Im Zusammenhang erklärt:
Probieren Sie es online!
quelle
[Wolfram Language (Mathematica)], 1 Byte
Dieser ist etwas fraglich:
Definiert
f
, welche zB von "aufgerufen" werden könnenf[]
, welche den Ausdruck "zurückliefern"f[]
quelle
f
tut nichts" (abgesehen von der Erinnerung an "Ich habe gesehenf
") und kann weggelassen werden. Sie könnenf[]
trotzdem anrufen und immer noch unbewertet zurückkehrenf[]
. In jedem Fall spielen Sie jedoch meistens Streiche mit dem Musterersetzer und weisen nicht an, eine Funktion zu bewerten.Global`f
, während die leere Version dies nicht tut (man könnte argumentieren, dass diesNull
zugewiesen ist%1
, dies aberNull
ist) eine eingebaute "Funktion"). Aber wie ich in der Antwort bemerkt habe, ist auch nicht ganz klar, ob die Ein-Byte-Lösung gültig ist ...Viertens (viertens) , 5 Bytes
Dies ist eine Funktion mit dem Namen
f
, die nichts tut.Probieren Sie es online
Im TIO-Code habe ich eine Fußzeile von hinzugefügt
see f
, die die Definition der Funktion ausgibt .quelle
Lua , 8 Bytes
Probieren Sie es online!
Definiert eine (globale) Funktion
f
.Dies nutzt Lua
load
Funktion, um einen gegebenen String, der in unserem Fall leer ist (leerer Code ist gültiger Code), in eine Funktion zu kompilieren, die genau das tut, was wir in ihrem Körper geschrieben haben: nichts.Für diejenigen, die sich fragen, wäre eine Standardlösung
Dies ist jedoch länger (15 Byte).
quelle
POSIX sh, 6 Bytes
Die Verwendung von geschweiften Klammern erfordert ein weiteres Zeichen.
quelle
Java, 10 Bytes
Dies sollte den Regeln der Herausforderung entsprechen
quelle
f=a->a;
gültig ist. :)Perl 5 , 7 Bytes
Probieren Sie es online!
quelle
Kotlin , 8 Bytes
Eine leere Funktion, die in einer Variablen f gespeichert ist.
Rufen Sie es mit
f()
oder auff.invoke()
.quelle
shortC , 1 Byte
Probieren Sie es online!
Transpiles in dieses C:
quelle
C (gcc) ,
1413 BytesProbieren Sie es online!
Dies definiert eine Funktion
f
,int
die eine nicht angegebene Anzahl (und Art) von Parametern zurückgibt und akzeptiert, deren Maschinencode im Zeichenfolgenliteral enthalten ist. Das Unicode-ZeichenÃ
(im Speicher wie0xc3 0x00 0x00 0x00
auf einem kleinen Endian-Computer gespeichert ) entspricht dem x86-ret
Befehl, der von der Funktion zurückgegeben wird. Für Nicht-x86-Architekturen sind möglicherweise andere Opcodes erforderlich, um zurückgegeben zu werden.gcc
kann das erfordern-zexecstack
Flagge, um einen Segfault zu vermeiden.quelle
Haskell , 5 Bytes
Probieren Sie es online!
quelle
Tcl ,
6511 BytesProbieren Sie es online!
Einbeziehung der Zuweisung zur Variablen f im Rahmen des bytecount zur Einhaltung von Regeln. Mit dieser Änderung wird die oben für bytecount angegebene konventionellere Definition gleichbedeutend:
quelle
XSLT, 134 Bytes
Eine Vorlage ist das, was diese Sprache einer Funktion am nächsten kommt. Es kann definitiv aufgerufen werden; Es akzeptiert keine Argumente und "gibt" die leere Zeichenfolge zurück.
quelle
F # (.NET Core) , 9 Byte
Probieren Sie es online!
quelle
Rubin , 6 Bytes
Proc wird aufgerufen,
f
der kein Argument akzeptiert und zurückgibtnil
.Probieren Sie es online!
quelle
Python 3 , 10 Bytes
Probieren Sie es online!
quelle
def f():0
ein Byte speichern?Pascal 23bytes
quelle
AppleScript, 10
Erklärt, kompiliert und inklusive Aufruf:
quelle
Japt , 2 Bytes
Genannt als
$U ($
._
kann ersetzt werden@
,Ï
oderÈ
.Versuch es
quelle
SmileBASIC (> = 3), 9 Bytes
Funktion wird aufgerufen von
A
.quelle
DEF A*END
in SB4Wolfram Language (Mathematica) , 2 Bytes
Probieren Sie es online!
Funktioniert leider einfach
&
nicht (eine anonyme Funktion, die nichts macht).quelle
f=#&
%1
sodass keine explizite Zuordnung zu einer Variablen wie erforderlich istf
.