写一个函数[关闭]


15

老实说,我不敢相信这个挑战还不存在。

挑战

编写一个函数。

细节

  • 您的程序必须定义某种可调用的函数。这包括通常称为函数,lambda函数或子例程的任何内容。所有这些类型的可调用对象在本文中均称为“功能”。

    1. 该功能的输入是可选的,不是必需的。

    2. 该函数的返回值也是可选的,不是必需的,但控制必须返回到调用程序。

  • 该函数必须分配给某种变量,以便以后可以访问。这包括间接赋值(在大多数常见的语言中,声明命名函数会自动将名称添加到当前作用域中)和直接赋值(将匿名函数直接赋给变量)。

  • 该函数无需命名。

  • 该函数必须由创建-您不能仅将语言的默认函数分配给变量。

  • 请不要使用标准漏洞

这是,因此以字节为单位的最低分数获胜。


评论不作进一步讨论;此对话已转移至聊天
DJMcMayhem

3
我不知道为什么在最初关闭它的原因都没有解决的情况下重新打开它的原因,只是在聊天中被mods隐藏了起来
Jo King

2
另外,自从什么时候您可以投票决定重新开放自己的帖子??
约翰·金

7
您需要是一名律师而不是程序员才能参与这个挑战。
anatolyg

2
绝对不应该在当前状态下重新打开它。
Mego,

Answers:


30

x86 / x64机器码,1个字节

c3

部件:

ret

在线尝试!(nasm)

¯\ _(ツ)_ /¯


2
但这并没有给函数命名或在函数中存储对该函数的引用。
Tanner Swett

4
@TannerSwett可以通过地址调用。
7

7
您可以在装配体中添加标签。它不会增加已编译代码的大小,而是为函数命名。
Daniil Tutubalin

21

果冻,0字节

在线尝试!

返回其参数的单子链接。由于它是出现在脚本中的第一个函数,因此可以使用调用它1Ŀ

感谢@lirtosiast指出在Jelly中可以使用0字节链接/函数。


3,4,5 1Ŀ

在线尝试!


0字节的答案应该起作用。
lirtosiast

@KevinCruijssen是的!好地方
Nick Kennedy

@NickKennedy您可以用来<pre><code>...</code></pre>在代码块中保留前导/后缀空格/换行符。我已经相应地编辑了您的答案。:)
Kevin Cruijssen

@KevinCruijssen谢谢!
肯尼迪

我对果冻的知识很薄,但是您不需要换行符来结束链接吗?似乎在示例中使用了它。
发布Rock Garf Hunter,

13

Javascript,6个字节

f=_=>0

包括变量分配。这里没什么可看的。


28
为了使其看起来更像表情符号:o=_=>o
Daniil Tutubalin

3
另一个表情符号d=_=>b
tsh,

3
t @ tsh,b在这种情况下未定义。
Daniil Tutubalin

2
@DanielO:可以肯定地说。但是我认为,甚至可以更有效地辩称您不能调用它,因此它不是一个函数。在javascript中,函数调用明确地用括号表示。
递归

2
@DaniilTutubalin但这仅在您调用它时才重要。而且对于函数是否应该运行而不会引发异常没有这样的要求。
tsh


8

ZX Spectrum BASIC,6个字节

DEF FN f()=PI

十六进制转储:CE 66 28 29 3D A7CE是1字节的关键字DEF FN(包括尾随空格),A7而是1字节的关键字PI。使用拨打电话FN f()。示例程序:

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

输出:

3.1415927

8

Haskell,3个字节

o=9

这段代码定义了一个称为的多态函数o,该函数具有一个类型参数和一个typeclass实例参数。调用此函数时,它将使用给定的typeclass实例,获取其fromInteger成员,Integer以9 的值调用该成员,并返回结果。

当然,我刚刚描述的只是Haskell函数的行为9,而我的代码仅定义了一个称为的函数o,它等效于9

现在唯一的问题是,该9功能是“由您创建的”,还是“该语言的默认功能”?

我认为它是“由您创造的”。我这样说的原因是,如果您阅读Haskell的规范,您(我假设)将9在任何地方都没有提及函数。规范指出,您可以通过将一个或多个数字串在一起来创建数字文字。因此,通过编写一串数字,我编写了一个函数-即使我恰好只使用了一位数字。


聪明的,类型级别的功能
Mega Man

8

R,9个字节

body(t)=0

在线尝试!

我认为这符合规则。该函数t没有输入和输出0。之所以可行,是因为已经存在一个称为t(转置函数)的函数,并且它重新定义了函数的主体;说body(a)=0(没有对象称为a)或body(F)=0F是逻辑的,不是函数)是不可行的。我认为它符合要求是因为它仍然是我自己创建的:我不是在重复使用预定义函数的功能,而只是重复使用它的名称。

我认为我从未见过R高尔夫球手使用过此功能,但是在某些情况下,它可以让我们节省一些需要辅助功能的挑战。

一个更标准的解决方案是:

R,13个字节

f=function()0

在线尝试!

无需输入和输出的功能0。这比不输入,不输出的函数短1个字节,这将是

f=function(){}

如果我们尝试定义一个没有body(f=function())的函数,R会将其解释为不完整的命令(在较旧的R版本中可能不正确)。

正如OganM指出的那样,我们将其减少到11个字节,

R,11个字节

function()0

在线尝试!

从技术上讲,该函数符合将功能分配给某种变量的挑战性要求,因为它(短暂地)分配给.Last.value


1
function()0应该为您的第二个答案而工作,因为该函数无需命名。整洁的技巧body<-,我试图用body类似的方法做一些奇怪的挑战来弄乱语言
朱塞佩

1
@Giuseppe“必须将函数分配给某种变量”,所以我认为不function()0符合此挑战的规则。我很乐意为body()="成功使用该技巧的答案提供赏金。
罗宾·赖德

4
function()0将被分配给.Last.value()它,尽管这将推动它
OganM

@OganM好点!
罗宾·赖德

pryr::f(x)如果我们允许pryr。
qwr



6

空格,7个字节


  

	

创建一个子例程,该例程将控制权返回给调用者。

在上下文中解释:

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

在线尝试!


6

[Wolfram语言(Mathematica)],1个字节

这个有点可疑:

f

定义f,可以“调用”,例如通过f[],可以“返回”表达式f[]


1
嘿,它可以被调用,并且返回值是可选的。这很重要。
connectyourcharger

1
如果可以接受这种解决方案,那么零字节答案也将是一样好的:您的“定义” f不会做任何事情(除了记住“我见过f”之外),可以将其忽略。f[]尽管如此,您仍然可以打电话,仍然返回unvaluated f[]。但是,无论如何,您大多是在用模式替换器来玩弄技巧,而不是指示对函数进行求值。
罗马

@Roman我已经考虑加入零字节的版本,但最后我觉得这更值得怀疑:这实际上创建的符号Global`f,而空荡荡的版本没有做到这一点(你可以争辩说,Null被分配到%1,但Null就是内置的“功能”)。但是正如我在答案中指出的那样,一字节解是否有效还不是很清楚……
Lukas Lang


5

Lua,8个字节

f=load''

在线尝试!

定义(全局)函数f

它使用Lua load函数将给定的字符串(在我们的情况下为空(空代码为有效代码))编译为函数,该函数完全执行我们在其主体中编写的内容:不执行任何操作。

有人想知道,标准解决方案是

function f()end

但这会更长(15个字节)。


5

POSIX sh,6个字节

s()(1)

使用花括号还需要一个字符。


5

Java,10字节

这应该符合挑战的规则

void f(){}

1
我很确定f=a->a;也是有效的。:)
凯文·克鲁伊森

@Kevin Cruijssen我不是Java专家,并且我从未使用过Java数组表示法。我怎样才能使您的解决方案得到编译?我最初在此TIO中 “测试”了我的方法,然后在此处附加了您的方法。现在,编译器需要一个标识符。我有任何解释或错误用法吗?
pixma140 '19

2
这是Java 8+ lambda函数。因此,在这种情况下,这两种方法都可以使用。如果您还不熟悉Java 8+ lambda,请这里进行更深入的说明
凯文·克鲁伊森




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 '19

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



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.