関数を書く[終了]


15

私はこの挑戦がまだ存在しないとは信じられない。

チャレンジ

関数を書きます。

詳細

  • プログラムは、なんらかの呼び出し可能な関数を定義する必要があります。これには、関数、ラムダ関数、またはサブルーチンとして一般に知られているものが含まれます。これらのタイプの呼び出し可能オブジェクトはすべて、この投稿では「関数」と呼ばれます。

    1. 関数への入力はオプションであり、必須ではありません。

    2. 関数からの戻り値もオプションであり、必須ではありませんが、制御は呼び出し側プログラムに戻す必要があります。

  • 関数は、後でアクセスできるように、何らかの変数に割り当てる必要があります。これには、間接割り当て(名前付き関数を宣言すると自動的に名前が現在のスコープに追加されるほとんどの一般的な言語)と直接割り当て(匿名関数を変数に直接割り当てる)が含まれます。

  • 関数に名前を付ける必要はありません。

  • 関数はユーザーが作成する必要があります -言語から変数にデフォルト関数を割り当てることはできません。

  • 標準的な抜け穴ありません、お願いします。

これはであるため、バイト単位の最低スコアが優先されます。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
DJMcMayhem

3
そもそも閉じられた理由のいずれも解決されておらず、チャットでmodによって隠されただけで、これが再び開かれた理由がわかりません
ジョーキング

2
また、いつから自分の投稿を再開するか投票できますか?
ジョーキング

7
この課題に取り組むには、プログラマーではなく弁護士である必要があります。
アナトリグ

2
これは間違いなく現在の状態で再開されるべきではありません。
メゴ

回答:


30

x86 / x64マシンコード、1バイト

c3

アセンブリ:

ret

オンラインでお試しください!(鼻)

¯\ _(ツ)_ /¯


2
しかし、これは関数に名前を付けたり、変数への関数への参照を保存したりしません。
タナースウェット

4
@TannerSwettアドレスで呼び出すことができます。
7

7
アセンブリにラベルを追加できます。コンパイルされたコードのサイズは増加せず、関数に名前が付けられます。
ダニエルツツバリン

21

ゼリー、0バイト

オンラインでお試しください!

引数を返すモナドリンク。スクリプトに表示される最初の関数であるため、を使用して呼び出すことができます1Ŀ

0バイトのリンク/関数がJellyで機能することを指摘してくれた@lirtosiastに感謝します。

すなわち


3,4,5 1Ŀ

オンラインでお試しください!


0バイトの回答が機能するはずです。
リトシアスト

@KevinCruijssenはい!良い場所
ニックケネディ

@NickKennedy <pre><code>...</code></pre>コードブロックの先頭/末尾のスペース/改行を保持するために使用できます。それに応じて回答を編集しました。:)
ケビンクルーッセン

@KevinCruijssenありがとう!
ニックケネディ

私のゼリーの知識はかなり薄いですが、リンクを終了するために改行が必要ではありませんか?例で使用されているようです。
ポストロックガーフハンター

13

Javascript、6バイト

f=_=>0

変数の割り当てが含まれます。ここではあまり見ません。


28
絵文字のように見えるようにするには:o=_=>o
Daniil Tutubalin

3
別の絵文字d=_=>b
-tsh

3
bこの場合、@ tshは悲しいことに定義されていません。
ダニエルツツバリン

2
@DanielO:確かにそれを主張できます。しかし、私の意見では、もっと効果的にあなたはそれを呼び出すことはできないと主張することができるので、それは機能ではありません。JavaScriptでは、関数呼び出しは括弧で明確に表されます。
再帰的

2
@DaniilTutubalinしかし、これはあなたがそれを呼び出す場合にのみ重要です。また、例外をスローせずに実行する必要があるかどうかについて、関数に関するそのような要件はありません。
tsh


8

ZX Spectrum BASIC、6バイト

DEF FN f()=PI

六角ダンプ:CE 66 28 29 3D A7CEDEF FN(末尾スペースを含む)A7の1バイトのキーワードですが、はの1バイトのキーワードですPI。を使用して呼び出しFN f()ます。サンプルプログラム:

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

出力:

3.1415927

8

Haskell、3バイト

o=9

このコードは、o1つの型パラメーターと1つの型クラスインスタンスパラメーターを受け取るポリモーフィック関数を定義します。この関数が呼び出されると、指定されたtypeclassインスタンスを取得し、そのfromIntegerメンバーを取得しInteger、9 の値でそのメンバーを呼び出し、結果を返します。

確かに、私が説明したのはHaskell関数の動作のみ9であり、私のコードは単にと呼ばれる関数を定義するだけoです9

唯一の質問は、 9関数は「あなたが作成した」か、それとも「言語からのデフォルト関数」ですか?

それは「あなたが作った」と思います。私がこれを言った理由は、Haskellの仕様を読んだ場合、9どこにも関数の記述が見つからない(と思われる)からです。代わりに、仕様では、1つ以上の数字をつなぎ合わせることで数値リテラルを作成できると述べています。したがって、数字の文字列を記述することにより、たまたま1桁しか使用していなくても、関数を記述しました。


賢い、型レベルの機能
メガマン

8

R、9バイト

body(t)=0

オンラインでお試しください!

これはルールに準拠していると思います。この関数tは入力も出力も行いません0。これは、t(転置関数)と呼ばれる関数が既に存在し、関数の本体を再定義するために機能します。say body(a)=0(オブジェクトが呼び出されないa)またはbody(F)=0F論理関数であり、関数ではありません)では機能しません。それは私によってまだ作成されているため、私はそれが準拠していると思います:私は、事前に定義された関数が何をするか、単にその名前を再利用していません。

Rゴルファーがこれを使ったのを見たことはないと思いますが、ヘルパー機能が必要なチャレンジで数バイト節約できる状況があるかもしれません。

より標準的なソリューションは次のとおりです。

R、13バイト

f=function()0

オンラインでお試しください!

入力と出力を受け取らない関数0。これは、入力を取らず、何も出力しない関数よりも1バイト短くなります。

f=function(){}

ボディ(f=function())のない関数を定義しようとすると、Rはこれを不完全なコマンドとして解釈します(これはRの古いバージョンでは当てはまらない場合があります)。

OganMが指摘したように、これを11バイトに減らします。

R、11バイト

function()0

オンラインでお試しください!

これは、(一時的に)に割り当てられているため、関数を何らかの変数に割り当てるというチャレンジ要件に技術的に準拠しています.Last.value


1
function()0関数に名前を付ける必要がないため、2番目の答えで機能するはずです。きちんとしたトリックbody<-を使用して、私はbody言語を混乱させるための奇妙な挑戦のいくつかを使用しようとしました
ジュゼッペ

1
@Giuseppe「関数はある種の変数に割り当てられなければならない」ので、私はfunction()0このチャレンジのルールに準拠するとは思わない。body()="トリックをうまく使った答えに賞金を与えてうれしいです。
ロビンライダー

4
function()0割り当てられますが.Last.value()、それはそれを推進するだろう
-OganM

@OganMナイスポイント!
ロビンライダー

pryr::f(x)pryrを許可する場合。
qwr


6

C(gcc)、5バイト

f引数を取らず、技術的には未定義の整数値を返す関数を定義します。

f(){}

オンラインでお試しください!


1
「引数をとらない」—ひどい嘘です。これは、Cに関するよくある誤解の1つです。空の引数リストは、それらにアクセスする移植性のない方法で、未定義の型引数の未定義の量を意味します。補足として、これはC / C ++の非互換性でもあります。
ヴァルは


6

[Wolfram Language(Mathematica)]、1バイト

これは少し疑問です。

f

を定義しますf。これは、たとえばf[]「式」を「返す」「呼び出す」ことができますf[]


1
ちょっと、それを呼び出すことができ、戻り値はオプションです。これは重要です。
connectyourcharger

1
この解決策が受け入れられる場合、ゼロバイトの答えは同じくらい良いです:あなたの「定義」fは何もせず(「私は見たf」を覚えていることを除いて)、除外することができます。f[]それにもかかわらず、未評価の値を返しながら呼び出すことができますf[]。ただし、いずれの場合も、ほとんどの場合、パターン置換プログラムを使用してトリックを実行し、関数の評価を指示していません。
ローマン

これは実際にシンボルを作成します。私は、ゼロバイトのバージョンを追加すると考えられてきたが、それはもっと疑問だように、最終的に私が感じた@Roman Global`f空のバージョンは(あなたがそれを主張する可能性があることを行うわけではありませんが、Nullに割り当てられている%1が、Nullあります組み込みの「関数」)。しかし、私は1バイトソリューションが有効であるかどうか、答えで述べてきたようにしています...また、完全には明らかではありません
ルーカス・ラング


5

Lua、8バイト

f=load''

オンラインでお試しください!

(グローバル)関数を定義しますf

これは、Lua load関数を使用して、この場合空になっている文字列(空のコードは有効なコード)を、本文に記述したとおりに実行する関数にコンパイルします。

不思議な人にとっては、標準的な解決策は

function f()end

しかし、これはより長い(15バイト)。


5

POSIX sh、6バイト

s()(1)

中括弧を使用するには、もう1文字が必要です。


5

Java、10バイト

これはチャレンジのルールと一致する必要があります

void f(){}

1
f=a->a;同様に有効であると確信しています。:)
ケビンクルーッセン

@Kevin Cruijssen私はJavaの専門家ではなく、Java配列表記を使用したことはありません。ソリューションをコンパイルするにはどうすればよいですか?最初にこのTIOでメソッドを「テスト」してから、そこにアプローチを追加しました。現在、コンパイラは識別子を期待しています。私による説明や間違った使い方はありますか?
pixma140

2
これは、Java 8+ラムダ関数です。したがって、この場合、これら2つのいずれかが機能します。ここで、Java 8+ラムダについて詳しく説明します(まだ慣れていない場合)。
ケビンCruijssen




4

C(gcc)14 13バイト

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

オンラインでお試しください!

これは、指定されていない数(および型)のパラメーターをf返しint、受け入れる関数を定義します。パラメーターのマシンコードは、文字列リテラル内に含まれています。Unicode文字Ã0xc3 0x00 0x00 0x00リトルエンディアンマシンのようにメモリに格納されている)retは、関数から返されるx86 命令に対応しています。x86以外のアーキテクチャでは、返すために異なるオペコードが必要になる場合があります。

gcc-zexecstackセグメンテーション違反を回避するためにフラグが必要になる場合があります。



3

Tcl6 5 11バイト

set f {_ ;}

オンラインでお試しください!

ルールに従うために、バイトカウントの一部として変数fへの割り当てを含めます。この変更により、以下のより一般的な定義により、バイトカウントの上記の定義が結び付けられます。

proc f _ {}

これは名前付き関数ですか?関数は、後でアクセスできるように、何らかの変数に割り当てる必要があります。
mbomb007

mbomb007 @私はあなたのポイントを見て、それに応じて固定
SmileAndNod

3

XSLT、134バイト

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

テンプレートは、この言語が機能に最も近いものです。間違いなく呼び出すことができます。引数はゼロで、空の文字列を「返します」。






2

AppleScript、10

on a()
end

説明、コンパイル、および呼び出しを含む:

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

-- invoke it:
a()


2

SmileBASIC(> = 3)、9バイト

DEF A
END

関数はによって呼び出されAます。


またはDEF A*ENDSB4
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.