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.


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:



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!


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.


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

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.


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.


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

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!


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

[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[]


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

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).


5

POSIX sh, 6 Bytes

s()(1)

Die Verwendung von geschweiften Klammern erfordert ein weiteres Zeichen.


5

Java, 10 Bytes

Dies sollte den Regeln der Herausforderung entsprechen

void f(){}

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().



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.



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 _ {}

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.






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()


2

SmileBASIC (> = 3), 9 Bytes

DEF A
END

Funktion wird aufgerufen von A.


Alternativ DEF A*ENDin SB4
12Me21

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.