Schreibe eine Funktion [geschlossen]

15

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.

    1. Die Eingabe in die Funktion ist optional und nicht erforderlich.

    2. 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 , also gewinnt die niedrigste Punktzahl in Bytes.

schließen Sie ihr Ladegerät an
quelle
Kommentare sind nicht für längere Diskussionen gedacht. Diese Unterhaltung wurde in den Chat verschoben .
DJMcMayhem
3
Ich verstehe nicht, warum dies wiedereröffnet wurde, als keiner der Gründe, warum es überhaupt geschlossen wurde, angesprochen wurde, nur durch Mods in einem Chat versteckt
Jo King
2
Und seit wann kannst du abstimmen, um deinen eigenen Post wieder zu eröffnen?
Jo King
7
Sie müssen Anwalt und kein Programmierer sein, um in dieser Herausforderung bestehen zu können.
anatolyg
2
Diese sollte in ihrem jetzigen Zustand definitiv nicht wiedereröffnet worden sein.
Mego

Antworten:

30

x86 / x64-Maschinencode, 1 Byte

c3

Versammlung:

ret

Probieren Sie es online! (nasm)

¯ \ _ (ツ) _ / ¯

negative sieben
quelle
2
Dies gibt der Funktion jedoch keinen Namen und speichert keinen Verweis auf die Funktion in einer Variablen.
Tanner Swett
4
@TannerSwett Kann nach Adresse aufgerufen werden.
negative sieben
7
Sie können in der Baugruppe eine Beschriftung hinzufügen. Es vergrößert den kompilierten Code nicht und gibt der Funktion einen Namen.
Daniil Tutubalin
21

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


3,4,5 1Ŀ

Probieren Sie es online!

Nick Kennedy
quelle
Die 0-Byte-Antwort sollte funktionieren.
Lirtosiast
@ KevinCruijssen ja! Guter Ort
Nick Kennedy
@NickKennedy Mit dieser Option können Sie <pre><code>...</code></pre>führende / nachfolgende Leerzeichen / Zeilenumbrüche in Codeblöcken beibehalten. Ich habe Ihre Antwort entsprechend bearbeitet. :)
Kevin Cruijssen
@ KevinCruijssen danke!
Nick Kennedy
Mein Wissen über Gelee ist ziemlich dünn, aber brauchst du keinen Zeilenumbruch, um den Link zu beenden? Es scheint im Beispiel verwendet zu werden.
Weizen-Zauberer
13

Javascript, 6 Bytes

f=_=>0

Beinhaltet eine variable Zuordnung. Hier gibt es nicht viel zu sehen.

rekursiv
quelle
28
Damit es o=_=>o
aussieht
3
Noch ein Emojid=_=>b
tsh
3
@tsh bist in diesem Fall leider nicht definiert.
Daniil Tutubalin
2
@DanielO: Das könnte man durchaus argumentieren. Aber meiner Meinung nach könnte man noch effektiver argumentieren, dass man es nicht nennen kann, es ist also keine Funktion. In Javascript wird ein Funktionsaufruf eindeutig in Klammern dargestellt.
rekursiver
2
@ DaniilTutubalin Aber das ist nur wichtig, wenn Sie es aufrufen. Und es gibt keine solche Anforderung an die Funktion, ob sie ausgeführt werden soll, ohne eine Ausnahme auszulösen.
Dienstag,
8

ZX Spectrum BASIC, 6 Bytes

DEF FN f()=PI

Hex - Dump: CE 66 28 29 3D A7. CEist ein 1-Byte-Schlüsselwort für DEF FN(einschließlich des nachfolgenden Leerzeichens), während A7es sich um ein 1-Byte-Schlüsselwort für handelt PI. Mit anrufen FN f(). Beispielprogramm:

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

Ausgabe:

3.1415927
Neil
quelle
8

Haskell , 3 Bytes

o=9

Dieser Code definiert eine polymorphe Funktion, odie einen Typparameter und einen Typklasseninstanzparameter akzeptiert. Wenn diese Funktion aufgerufen wird, nimmt sie die angegebene Typklasseninstanz fromInteger, ruft ihr Mitglied ab, ruft dieses Mitglied mit dem IntegerWert 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, odie äquivalent zu ist 9.

Die Frage ist nur, ob die 9Funktion "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) 9nirgendwo 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.

Tanner Swett
quelle
clevere Funktionen
Mega Man
8

R , 9 Bytes

body(t)=0

Probieren Sie es online!

Ich denke, das entspricht den Regeln. Die Funktion tnimmt keine Ein- und Ausgänge 0. Dies funktioniert, weil es bereits eine Funktion gibt, tdie Transponierungsfunktion genannt wird, und sie definiert den Körper der Funktion neu. es würde nicht funktionieren mit say body(a)=0(kein Objekt aufgerufen a) oder body(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

f=function()0

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äre

f=function(){}

Wenn 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

function()0

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.

Robin Ryder
quelle
1
function()0sollte für Ihre zweite Antwort funktionieren, da die Funktion nicht benannt werden muss. Ordentlicher Trick aufbody<- , ich habe zu verwenden versucht , bodyund das , wie einige der seltsamen Herausforderungen zu Chaos mit der Sprache zu tun
Giuseppe
1
@ Giuseppe "Die Funktion muss einer Variablen zugewiesen werden", daher denke ich, dass sie nicht function()0den Regeln dieser Herausforderung entspricht. Ich würde gerne eine Prämie für eine Antwort geben, die das verwendetbody()=" Trick erfolgreich einsetzt.
Robin Ryder
4
function()0würde zugewiesen werden, .Last.value()obwohl das drängen würde
OganM
@OganM Schöner Punkt!
Robin Ryder
pryr::f(x)wenn wir pryr erlauben
Qwr
6

Perl 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 $!.

Scherzen
quelle
6

C (gcc) , 5 Bytes

Definiert eine Funktion f, die keine Argumente akzeptiert und technisch gesehen einen undefinierten ganzzahligen Wert zurückgibt.

f(){}

Probieren Sie es online!

ErikF
quelle
1
"nimmt keine Argumente" - liegt schlecht. Dies ist eines der häufigsten Missverständnisse in Bezug auf C: Eine leere Argumentliste bedeutet eine undefinierte Menge von Argumenten mit undefiniertem Typ, auf die nicht portabel zugegriffen werden kann. Als Randnotiz ist dies auch eine C / C ++ - Inkompatibilität.
Val sagt Reinstate Monica
6

Leerzeichen , 7 Bytes


  

	

Erstellt eine Unterroutine, die die Kontrolle an den Aufrufer zurückgibt.

Im Zusammenhang erklärt:

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

Probieren Sie es online!

ein Stein Spinnentier
quelle
6

[Wolfram Language (Mathematica)], 1 Byte

Dieser ist etwas fraglich:

f

Definiert f, welche zB von "aufgerufen" werden können f[], welche den Ausdruck "zurückliefern"f[]

Lukas Lang
quelle
1
Hey, es kann aufgerufen werden und der Rückgabewert ist optional. Das zählt.
connectyourcharger
1
Wenn diese Lösung akzeptabel ist, ist die Null-Byte-Antwort genauso gut: Ihre "Definition" von " ftut nichts" (abgesehen von der Erinnerung an "Ich habe gesehen f") und kann weggelassen werden. Sie können f[]trotzdem anrufen und immer noch unbewertet zurückkehren f[]. In jedem Fall spielen Sie jedoch meistens Streiche mit dem Musterersetzer und weisen nicht an, eine Funktion zu bewerten.
Roman
@Roman Ich habe darüber nachgedacht, die Null-Byte-Version hinzuzufügen, aber am Ende kam ich mir noch fragwürdiger vor: Dadurch wird das Symbol tatsächlich erstellt Global`f, während die leere Version dies nicht tut (man könnte argumentieren, dass dies Nullzugewiesen ist %1, dies aber Nullist) 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 ...
Lukas Lang
5

Viertens (viertens) , 5 Bytes

Dies ist eine Funktion mit dem Namen f, die nichts tut.

: f ;

Probieren Sie es online

Im TIO-Code habe ich eine Fußzeile von hinzugefügt see f, die die Definition der Funktion ausgibt .

mbomb007
quelle
5

Lua , 8 Bytes

f=load''

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

function f()end

Dies ist jedoch länger (15 Byte).

val sagt Reinstate Monica
quelle
5

POSIX sh, 6 Bytes

s()(1)

Die Verwendung von geschweiften Klammern erfordert ein weiteres Zeichen.

Kojiro
quelle
5

Java, 10 Bytes

Dies sollte den Regeln der Herausforderung entsprechen

void f(){}
pixma140
quelle
1
Ich bin mir ziemlich sicher, dass dies auch f=a->a;gültig ist. :)
Kevin Cruijssen
@ Kevin Cruijssen Ich bin kein Java-Experte und habe nie die Java-Array-Notation verwendet. Wie kann ich Ihre Lösung kompilieren lassen? Ich habe meine Methode zunächst in diesem TIO "getestet" und dann Ihren Ansatz dort angehängt. Der Compiler erwartet nun einen Bezeichner. Irgendeine Erklärung oder falsche Verwendung von mir?
Pixma140
2
Es ist eine Java 8+ Lambda-Funktion. Also würde einer dieser beiden in diesem Fall funktionieren. Hier eine ausführlichere Erklärung von Java 8+ Lambdas, falls Sie mit diesen noch nicht vertraut sind.
Kevin Cruijssen
4

Kotlin , 8 Bytes

val f={}

Eine leere Funktion, die in einer Variablen f gespeichert ist.
Rufen Sie es mit f()oder auf f.invoke().

Peïo THIBAULT
quelle
4

shortC , 1 Byte

A

Probieren Sie es online!

Transpiles in dieses C:

 int main(int argc, char **argv){;}
ein Stein Spinnentier
quelle
4

C (gcc) , 14 13 Bytes

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

Probieren Sie es online!

Dies definiert eine Funktion f, intdie eine nicht angegebene Anzahl (und Art) von Parametern zurückgibt und akzeptiert, deren Maschinencode im Zeichenfolgenliteral enthalten ist. Das Unicode-Zeichen Ã(im Speicher wie 0xc3 0x00 0x00 0x00auf einem kleinen Endian-Computer gespeichert ) entspricht dem x86- retBefehl, 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.

Ceilingcat
quelle
3

Tcl , 6 5 11 Bytes

set f {_ ;}

Probieren 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:

proc f _ {}
SmileAndNod
quelle
Ist das eine benannte Funktion? Die Funktion muss einer Variablen zugewiesen werden, damit zu einem späteren Zeitpunkt darauf zugegriffen werden kann.
mbomb007
@ mbomb007 Ich verstehe deinen Punkt und habe ihn entsprechend
korrigiert
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>

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.

Silvio Mayolo
quelle
3

Python 3 , 10 Bytes

f=lambda:0

Probieren Sie es online!

U10-Stürmer - Setzen Sie Monica wieder ein
quelle
Können Sie nicht einfach def f():0ein Byte speichern?
EdgyNerd
@EdgyNerd Dat hat vor mir mit diesem Code geantwortet, und ich möchte ihn nicht kopieren
U10-Weiterleiten - Monica
Oh ok,
egal
3

Pascal 23bytes

procedure A;begin end;
rnso
quelle
2

AppleScript, 10

on a()
end

Erklärt, kompiliert und inklusive Aufruf:

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

-- invoke it:
a()
ein Stein Spinnentier
quelle
2

Japt , 2 Bytes

_

Genannt als $U ($.

_kann ersetzt werden @, Ïoder È.

Versuch es

Verkörperung der Ignoranz
quelle
2

SmileBASIC (> = 3), 9 Bytes

DEF A
END

Funktion wird aufgerufen von A.

Schnecke_
quelle
Alternativ DEF A*ENDin SB4
12Me21
2

Wolfram Language (Mathematica) , 2 Bytes

#&

Probieren Sie es online!

Funktioniert leider einfach &nicht (eine anonyme Funktion, die nichts macht).

römisch
quelle
Sie müssen die Funktion gemäß den Regeln in einer Variablen speichern, z. B.f=#&
Lukas Lang,
@LukasLang wird automatisch gespeichert, %1sodass keine explizite Zuordnung zu einer Variablen wie erforderlich ist f.
Roman
Guter Punkt, das sollte ausreichen, um die Regeln zu erfüllen
Lukas Lang