代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

可以在编程语言的命令行窗口中定义函数吗?

  •  2
  • Tim unnamed eng  · 技术社区  · 14 年前

    可以在Matlab的命令行窗口中定义函数吗?在我看来不是。

    但对R来说,这是可能的。我想知道为什么会有这种差异,如果在编程语言的这种特性背后还有更多的话要说,或者我能说的只是解释性语言(比如Python,Bash,…)?

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  4
  •   Community CDub    8 年前

    您可以在Matlab的命令窗口中定义函数。它将像一个函数一样进行计算,但在下一个Matlab会话中它将不可用(尽管您可以像变量一样保存和加载它)。

    例如,我复制 @Dirk Eddelbuettel 的函数

    >> cubed = @(x)x^3;
    >> cubed(2)
    ans =
         8
    

    编辑1 注意,在Matlab中只能将单个语句函数定义为匿名函数,因此不能使用例如for循环(除非使用evil eval ,它允许一切)。但是,如果嵌套匿名函数,则可以创建任意复杂的递归语句。因此,我想您确实可以在命令行窗口中定义任何函数。这可能是不值得的努力,我敢打赌,这将是非常难以理解的。

    编辑2 下面是一个递归嵌套匿名函数的示例,用于计算 Matlab central :

    >> fact = @(val,branchFcns) val*branchFcns{(val <= 1)+1}(val-1,branchFcns);
    >> returnOne = @(val,branchFcns) 1;
    >> branchFcns = {fact returnOne};
    >> fact(4,branchFcns)
    ans =
        24
    >> fact(5,branchFcns)
    ans =
       120
    
        2
  •  2
  •   aaronasterling    14 年前

    这实际上不是编程语言的一个特性,而是编程语言的一个实现。例如,存在C解释器和LISP编译器。这通常称为REPL(Read Eval Print Loop),通常是解释实现的一个特性。

        3
  •  1
  •   Dirk is no longer here    14 年前

    是的,如果手边的语言支持它。所以这里有一个小问题 R 例如,从我正在使用的命令提示符中剪切和粘贴:

    R> cubed <- function(x) x^3
    R> cubed(2)
    [1] 8
    R> cubed(3)
    [1] 27
    R>