Nie mogę uwierzyć, że to wyzwanie już nie istnieje.
Wyzwanie
Napisz funkcję.
Specyfika
Twój program musi zdefiniować funkcję wywoływalną. Obejmuje to wszystko powszechnie znane jako funkcja, funkcja lambda lub podprogram. Wszystkie tego typu kallaby będą w tym poście określane jako „funkcja”.
Wejście do funkcji jest opcjonalne i nie jest wymagane.
Zwracana wartość z funkcji jest również opcjonalna i nie jest wymagana, ale sterowanie musi powrócić do programu wywołującego.
Funkcja musi być przypisana do jakiejś zmiennej, aby można było uzyskać do niej dostęp w późniejszym czasie. Obejmuje to pośrednie przypisanie (w większości popularnych języków, w których deklaracja nazwanej funkcji automatycznie dodaje nazwę do bieżącego zakresu) i bezpośrednie przypisanie (bezpośrednie przypisanie funkcji anonimowej do zmiennej).
Funkcja nie musi mieć nazwy.
Funkcja musi zostać utworzona przez Ciebie - nie można po prostu przypisać domyślnej funkcji z języka do zmiennej.
Poproszę o brak standardowych luk .
To jest golf golfowy , więc wygrywa najniższy wynik w bajtach.
Odpowiedzi:
Kod maszynowy x86 / x64, 1 bajt
Montaż:
Wypróbuj online! (nasm)
¯ \ _ (ツ) _ / ¯
źródło
Galaretka , 0 bajtów
Wypróbuj online!
Monadyczny link, który zwraca swój argument. Ponieważ jest to pierwsza funkcja pojawiająca się w skrypcie, można ją wywołać za pomocą
1Ŀ
.Dzięki @lirtosiast za zwrócenie uwagi, że link / funkcja 0 bajtów będzie działać w Jelly.
To znaczy
Wypróbuj online!
źródło
<pre><code>...</code></pre>
aby zachować wiodące / końcowe spacje / znaki nowej linii w blokach kodu. Odpowiednio zredagowałem twoją odpowiedź. :)JavaScript, 6 bajtów
Obejmuje zmienne przypisanie. Nie ma tu wiele do zobaczenia.
źródło
o=_=>o
d=_=>b
b
nie jest zdefiniowane w tym przypadku.Python 3 , 9 bajtów
Wypróbuj online!
źródło
ZX Spectrum BASIC, 6 bajtów
Hex Dump:
CE 66 28 29 3D A7
.CE
jest 1-bajtowym słowem kluczowym dlaDEF FN
(w tym spacją końcową), natomiastA7
jest 1-bajtowym słowem kluczowym dlaPI
. Zadzwoń za pomocąFN f()
. Przykładowy program:Wynik:
źródło
Haskell , 3 bajty
Ten kod definiuje wywoływaną funkcję polimorficzną,
o
która przyjmuje jeden parametr typu i jeden parametr instancji klasy. Gdy ta funkcja jest wywoływana, pobiera daną instancję klasy typu, pobiera jąfromInteger
element członkowski, wywołuje ten element oInteger
wartości 9 i zwraca wynik.To prawda, że właśnie opisałem tylko zachowanie funkcji Haskell
9
, a mój kod po prostu definiuje wywoływaną funkcję,o
która jest równoważna z9
.Teraz jedynym pytaniem jest:
9
funkcja jest „tworzona przez ciebie”, czy też jest to „funkcja domyślna z języka”?Myślę, że jest „stworzony przez ciebie”. Moim powodem jest to, że jeśli przeczytasz specyfikację dla Haskell, (zakładam)
9
nigdzie nie znajdziesz żadnej wzmianki o funkcji. Zamiast tego w specyfikacji podano, że można utworzyć literał liczbowy, łącząc razem jedną lub więcej cyfr. Dlatego pisząc ciąg cyfr, napisałem funkcję - nawet jeśli akurat użyłem tylko jednej cyfry.źródło
R , 9 bajtów
Wypróbuj online!
Myślę, że jest to zgodne z zasadami. Funkcja
t
nie pobiera danych wejściowych i wyjściowych0
. Działa to, ponieważ istnieje już funkcja o nazwiet
(funkcja transpozycji) i redefiniuje jej treść; nie działałoby z poleceniem saybody(a)=0
(brak wywołanego obiektua
) lubbody(F)=0
(F
jest logiczną, a nie funkcją). Myślę, że jest zgodny, ponieważ wciąż jest tworzony przeze mnie: nie używam ponownie tego, co robi wstępnie zdefiniowana funkcja, tylko jej nazwa.Nie sądzę, że kiedykolwiek widziałem to używane przez golfistów R., ale mogą zdarzyć się sytuacje, w których pozwala nam zaoszczędzić kilka bajtów na wyzwaniach, w których potrzebujemy funkcji pomocnika.
Bardziej standardowym rozwiązaniem byłoby:
R , 13 bajtów
Wypróbuj online!
Funkcja, która nie pobiera danych wejściowych i wyjściowych
0
. Jest to 1 bajt krótszy niż funkcja, która nie pobiera danych wejściowych i niczego nie wyprowadza, co byłobyJeśli spróbujemy zdefiniować funkcję bez body (
f=function()
), R interpretuje to jako niekompletne polecenie (może nie być to prawdą w starszych wersjach R).Jak zauważył OganM, zmniejszamy to do 11 bajtów
R 11 bajtów
Wypróbuj online!
który technicznie jest zgodny z wymaganiem wyzwania, aby funkcja została przypisana do jakiejś zmiennej, ponieważ jest (efemerycznie) przypisana do
.Last.value
.źródło
function()0
powinien działać na drugą odpowiedź, ponieważ funkcja nie musi być nazwana. Zgrabna sztuczkabody<-
, próbowałem użyćbody
i lubię robić niektóre z dziwnych wyzwań, aby zadzierać z językiemfunction()0
zgodna z regułami tego wyzwania. Z przyjemnością dam nagrodę za odpowiedź, która zbody()="
powodzeniem wykorzystuje tę sztuczkę.function()0
zostałby przydzielony do.Last.value()
tego, co by to popychałopryr::f(x)
jeśli pozwolimy pryr.Perl 6 , 5 bajtów
Wypróbuj online!
Tworzy dowolną lambda, która zwraca wartość logiczną nie swojego parametru i przypisuje ją do zmiennej
$!
.źródło
C (gcc) , 5 bajtów
Definiuje funkcję,
f
która nie przyjmuje argumentów i technicznie zwraca niezdefiniowaną wartość całkowitą.Wypróbuj online!
źródło
Biała spacja , 7 bajtów
Tworzy podprogram, który zwraca kontrolę nad dzwoniącym.
Wyjaśnione w kontekście:
Wypróbuj online!
źródło
[Wolfram Language (Mathematica)], 1 bajt
Ten jest nieco wątpliwy:
Definiuje
f
, które można „wywołać”, np. Przezf[]
, które „zwraca” wyrażenief[]
źródło
f
nic nie robi (oprócz pamiętania „widziałemf
”) i może zostać pominięta. Możeszf[]
jednak zadzwonić , wciąż wracając bez ocenyf[]
. W każdym razie jednak najczęściej grasz sztuczkami z zamiennikiem wzorów i nie instruujesz, aby oceniać funkcję.Global`f
, podczas gdy pusta wersja tego nie robi (możesz argumentować, żeNull
jest przypisany%1
, aleNull
jest wbudowana „funkcja”). Ale jak zauważyłem w odpowiedzi, to, czy jedno bajtowe rozwiązanie jest poprawne, nie jest również całkowicie jasne ...Dalej (gforth) , 5 bajtów
Jest to funkcja o nazwie
f
, która nic nie robi.Wypróbuj online
W kodzie TIO dodałem stopkę
see f
, która wypisuje definicję funkcji.źródło
Lua , 8 bajtów
Wypróbuj online!
Definiuje funkcję (globalną)
f
.To używa Lua
load
funkcję do kompilacji podanego ciągu znaków, który w naszym przypadku jest pusty (pusty kod jest poprawnym kodem), do funkcji wykonującej dokładnie to, co napisaliśmy w jego ciele: nic.Dla tych, którzy zastanawiają się, byłoby to standardowe rozwiązanie
ale to jest dłuższe (15 bajtów).
źródło
POSIX sh, 6 bajtów
Korzystanie z nawiasów klamrowych wymaga jeszcze jednej postaci.
źródło
Java, 10 bajtów
powinno to być zgodne z regułami wyzwania
źródło
f=a->a;
jest również ważny. :)Perl 5 , 7 bajtów
Wypróbuj online!
źródło
Kotlin , 8 bajtów
Pusta funkcja przechowywana w zmiennej f.
Zadzwoń za pomocą
f()
lubf.invoke()
.źródło
shortC , 1 bajt
Wypróbuj online!
Transpozycje do tego C:
źródło
C (gcc) ,
1413 bajtówWypróbuj online!
Definiuje to funkcję
f
zwracającąint
i przyjmującą nieokreśloną liczbę (i typ) parametrów, których kod maszynowy jest zawarty w literale ciągu. Znak UnicodeÃ
(przechowywany w pamięci jak0xc3 0x00 0x00 0x00
na małej maszynie Endian) odpowiada x86ret
instrukcji która powraca z funkcji. Architektury inne niż x86 mogą wymagać różnych kodów operacyjnych do zwrócenia.gcc
może wymagać-zexecstack
flagi, aby uniknąć awarii.źródło
Haskell , 5 bajtów
Wypróbuj online!
źródło
Tcl ,
6511 bajtówWypróbuj online!
Uwzględnienie przypisania do zmiennej f jako części bajtu w celu zachowania zgodności z regułami. Dzięki tej zmianie bardziej konwencjonalna definicja poniżej wiąże powyższą z liczbą bajtów:
źródło
XSLT, 134 bajty
Szablon jest najbliższą funkcją tego języka. Można to zdecydowanie nazwać; pobiera zero argumentów i „zwraca” pusty ciąg.
źródło
F # (.NET Core) , 9 bajtów
Wypróbuj online!
źródło
Rubin , 6 bajtów
Proc wywołany,
f
który nie przyjmuje argumentów i zwracanil
.Wypróbuj online!
źródło
Python 3 , 10 bajtów
Wypróbuj online!
źródło
def f():0
zapisać bajtu?Pascal 23 bajtów
źródło
AppleScript, 10
Wyjaśnione, skompilowane, w tym wywołanie:
źródło
Japt , 2 bajty
Nazywany jako
$U ($
._
mogą być zastąpione@
,Ï
lubÈ
.Spróbuj
źródło
SmileBASIC (>=3), 9 bytes
Function is called by
A
.źródło
DEF A*END
in SB4Wolfram Language (Mathematica), 2 bytes
Try it online!
Unfortunately, just
&
does not work (an anonymous function that does nothing).źródło
f=#&
%1
so there's no need for an explicit assignment to a variable likef
.