Napisz funkcję [zamknięte]


15

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

    1. Wejście do funkcji jest opcjonalne i nie jest wymagane.

    2. 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 , więc wygrywa najniższy wynik w bajtach.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
James

3
Nie rozumiem, dlaczego zostało to ponownie otwarte, gdy żaden z powodów, dla których został zamknięty, nie został rozwiązany, po prostu ukryty przez modów na czacie
Jo King

2
Ponadto, od kiedy możesz głosować, aby ponownie otworzyć własny post?
Jo King,

7
Aby wziąć udział w tym wyzwaniu, musisz być prawnikiem, a nie programistą.
anatolyg

2
To zdecydowanie nie powinno zostać ponownie otwarte w obecnym stanie.
Mego

Odpowiedzi:



21

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


3,4,5 1Ŀ

Wypróbuj online!


Odpowiedź 0 bajtów powinna działać.
lirtosiast

@KevinCruijssen yes! Dobre miejsce
Nick Kennedy

@NickKennedy Możesz użyć, <pre><code>...</code></pre>aby zachować wiodące / końcowe spacje / znaki nowej linii w blokach kodu. Odpowiednio zredagowałem twoją odpowiedź. :)
Kevin Cruijssen

@KevinCruijssen dzięki!
Nick Kennedy

Moja wiedza na temat galaretki jest dość cienka, ale czy nie potrzebujesz nowej linii, aby zakończyć link? Wydaje się, że został użyty w tym przykładzie.
Post Rock Garf Hunter,

13

JavaScript, 6 bajtów

f=_=>0

Obejmuje zmienne przypisanie. Nie ma tu wiele do zobaczenia.


28
Aby wyglądał bardziej jak emoji:o=_=>o
Daniil Tutubalin

3
Kolejne emojid=_=>b
tsh

3
@tsh, niestety, bnie jest zdefiniowane w tym przypadku.
Daniil Tutubalin

2
@DanielO: Z pewnością można to argumentować. Ale moim zdaniem można jeszcze skuteczniej argumentować, że nie można tego nazwać, więc nie jest to funkcja. W javascript wywołanie funkcji jest jednoznacznie reprezentowane w nawiasach.
rekurencyjny

2
@DaniilTutubalin Ale to ma znaczenie tylko wtedy, gdy ją wywołasz. I nie ma takiego wymogu dotyczącego funkcji, czy powinna działać bez zgłaszania wyjątku.
tsh


8

ZX Spectrum BASIC, 6 bajtów

DEF FN f()=PI

Hex Dump: CE 66 28 29 3D A7. CEjest 1-bajtowym słowem kluczowym dla DEF FN(w tym spacją końcową), natomiast A7jest 1-bajtowym słowem kluczowym dla PI. Zadzwoń za pomocą FN f(). Przykładowy program:

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

Wynik:

3.1415927

8

Haskell , 3 bajty

o=9

Ten kod definiuje wywoływaną funkcję polimorficzną, októ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 o Integerwartoś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ę, októ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) 9nigdzie 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.


sprytne funkcje poziomu
Mega Man

8

R , 9 bajtów

body(t)=0

Wypróbuj online!

Myślę, że jest to zgodne z zasadami. Funkcja tnie pobiera danych wejściowych i wyjściowych 0. Działa to, ponieważ istnieje już funkcja o nazwie t(funkcja transpozycji) i redefiniuje jej treść; nie działałoby z poleceniem say body(a)=0(brak wywołanego obiektu a) lub body(F)=0( Fjest 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

f=function()0

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łoby

f=function(){}

Jeś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

function()0

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.


1
function()0powinien działać na drugą odpowiedź, ponieważ funkcja nie musi być nazwana. Zgrabna sztuczka body<-, próbowałem użyć bodyi lubię robić niektóre z dziwnych wyzwań, aby zadzierać z językiem
Giuseppe

1
@Giuseppe „Funkcja musi być przypisana do jakiejś zmiennej”, więc nie sądzę, aby była function()0zgodna z regułami tego wyzwania. Z przyjemnością dam nagrodę za odpowiedź, która z body()="powodzeniem wykorzystuje tę sztuczkę.
Robin Ryder

4
function()0zostałby przydzielony do .Last.value()tego, co by to popychało
OganM,

@OganM Nice point!
Robin Ryder,

pryr::f(x)jeśli pozwolimy pryr.
qwr


6

C (gcc) , 5 bajtów

Definiuje funkcję, fktóra nie przyjmuje argumentów i technicznie zwraca niezdefiniowaną wartość całkowitą.

f(){}

Wypróbuj online!


1
„nie bierze argumentów” - kłamie źle. To jedno z powszechnych nieporozumień na temat C: pusta lista argumentów oznacza nieokreśloną liczbę argumentów nieokreślonego typu bez przenośnego sposobu dostępu do nich. Krótko mówiąc, jest to także niezgodność C / C ++.
val mówi Przywróć Monikę


6

[Wolfram Language (Mathematica)], 1 bajt

Ten jest nieco wątpliwy:

f

Definiuje f, które można „wywołać”, np. Przez f[], które „zwraca” wyrażenief[]


1
Hej, można go wywołać, a zwracana wartość jest opcjonalna. To się liczy.
connectyourcharger

1
Jeśli to rozwiązanie jest możliwe do zaakceptowania, odpowiedź zerowa jest równie dobra: twoja „definicja” fnic nie robi (oprócz pamiętania „widziałem f”) i może zostać pominięta. Możesz f[]jednak zadzwonić , wciąż wracając bez oceny f[]. W każdym razie jednak najczęściej grasz sztuczkami z zamiennikiem wzorów i nie instruujesz, aby oceniać funkcję.
Rzym.

@Roman Zastanawiałem się nad dodaniem wersji zero-bajtowej, ale w końcu czułem, że jest to jeszcze bardziej wątpliwe: to faktycznie tworzy symbol Global`f, podczas gdy pusta wersja tego nie robi (możesz argumentować, że Nulljest przypisany %1, ale Nulljest wbudowana „funkcja”). Ale jak zauważyłem w odpowiedzi, to, czy jedno bajtowe rozwiązanie jest poprawne, nie jest również całkowicie jasne ...
Lukas Lang


5

Lua , 8 bajtów

f=load''

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

function f()end

ale to jest dłuższe (15 bajtów).


5

POSIX sh, 6 bajtów

s()(1)

Korzystanie z nawiasów klamrowych wymaga jeszcze jednej postaci.


5

Java, 10 bajtów

powinno to być zgodne z regułami wyzwania

void f(){}

1
Jestem pewien, że f=a->a;jest również ważny. :)
Kevin Cruijssen

@Kevin Cruijssen Nie jestem ekspertem od Java i nigdy nie korzystałem z notacji tablic Java. Jak mogę zmusić kompilację Twojego rozwiązania? Początkowo „przetestowałem” moją metodę w tym TIO, a następnie dołączyłem tam twoje podejście. Teraz kompilator oczekuje identyfikatora. Wszelkie wyjaśnienia lub nieprawidłowe użycie przeze mnie?
pixma140,

2
Jest to funkcja lambda Java 8+. Więc jedno z tych dwóch działałoby w tym przypadku. Oto bardziej szczegółowe wyjaśnienie lambd Java 8+ na wypadek, gdybyś ich jeszcze nie znał.
Kevin Cruijssen




4

C (gcc) , 14 13 bajtów

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

Wypróbuj online!

Definiuje to funkcję fzwracającą inti 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 jak 0xc3 0x00 0x00 0x00na 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.

gccmoże wymagać -zexecstackflagi, aby uniknąć awarii.



3

Tcl , 6 5 11 bajtów

set f {_ ;}

Wypró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:

proc f _ {}

Czy to funkcja o nazwie? Funkcja musi być przypisana do jakiejś zmiennej, aby można było uzyskać do niej dostęp w późniejszym czasie.
mbomb007

@ mbomb007 Rozumiem twój punkt i odpowiednio go naprawiłem
SmileAndNod

3

XSLT, 134 bajty

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template name="a"></xsl:template></xsl:stylesheet>

Szablon jest najbliższą funkcją tego języka. Można to zdecydowanie nazwać; pobiera zero argumentów i „zwraca” pusty ciąg.






2

AppleScript, 10

on a()
end

Wyjaśnione, skompilowane, w tym wywołanie:

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

-- invoke it:
a()


2

SmileBASIC (>=3), 9 bytes

DEF A
END

Function is called by A.


Alternatively DEF A*END in SB4
12Me21

2

Wolfram Language (Mathematica), 2 bytes

#&

Try it online!

Unfortunately, just & does not work (an anonymous function that does nothing).


You need to save the function to a variable according to the rules, e.g. f=#&
Lukas Lang

@LukasLang it's automatically saved to %1 so there's no need for an explicit assignment to a variable like f.
Roman

Good point, that should be enough to fulfil the rules
Lukas Lang
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.