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

Python 可以在编程语言的命令行窗口中定义函数吗?,python,bash,r,matlab,Python,Bash,R,Matlab,可以在Matlab的命令行窗口中定义函数吗?我看不是 但对于R来说,这样做是可能的。我想知道为什么会有这种差异,在编程语言的这种特性背后是否还有更多的话要说,或者我可以说只是解释性语言(比如Python、Bash等等) 谢谢 这实际上不是编程语言的一个特性,而是该编程语言的一个实现。例如,存在C解释器和Lisp编译器。这通常称为REPL(读取-评估-打印循环),通常是解释实现的一个功能。是,如果手边的语言支持它。下面是一个简单的示例,从我使用的命令提示符中剪切和粘贴: R> cubed &

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

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


谢谢

这实际上不是编程语言的一个特性,而是该编程语言的一个实现。例如,存在C解释器和Lisp编译器。这通常称为REPL(读取-评估-打印循环),通常是解释实现的一个功能。

是,如果手边的语言支持它。下面是一个简单的示例,从我使用的命令提示符中剪切和粘贴:

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

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

例如,我复制了的函数

>> cubed = @(x)x^3;
>> cubed(2)
ans =
     8
编辑1 请注意,在Matlab中,您只能将单语句函数定义为匿名函数,因此不能使用例如for循环(除非您使用evil
eval
,它允许所有操作)。但是,如果嵌套匿名函数,则可以创建任意复杂的递归语句。因此,我想您确实可以在命令行窗口中定义任何函数。这可能不值得付出努力,我敢打赌这很难理解

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

>fact=@(val,branchFcns)val*branchFcns{(val>returnOne=@(val,branchFcns)1;
>>branchFcns={fact returnOne};
>>事实(4,branchFcns)
ans=
24
>>事实(5,branchFcns)
ans=
120

您想要的短语是“REPL”。相关问题:。谢谢!很高兴知道这一点。回到我原来的问题,那么允许在命令行窗口中运行的函数的定义是否取决于特定的实现?对于同一种语言,不同实现的命令行窗口可能允许也可能不允许在其中定义函数?@Tim,t这是正确的。如果您对某一特定语言感兴趣,您只需要找到一个带有REPL的实现。当然,可能有,也可能没有。另外,我很确定您所说的是REPL。“命令行窗口”在这里是一种非标准术语,但REPL是这里唯一有意义的东西。再次感谢。在阅读了关于REPL的维基百科之后,我现在对REPL和解释器之间的关系感到困惑?谢谢!有什么函数可以在Matlab命令行窗口中定义吗?为什么我不能?蒂姆:如果你发布你的示例,我可以告诉你u为什么它不起作用。另外,请看我的编辑。@Tim:很高兴提供帮助。我添加了一个如何计算阶乘的示例。你从MATLAB Central发布的代码看起来很熟悉,但我花了几秒钟才意识到是我发布了它!=D我想一致的变量命名方案对于识别你自己的handy-w是一件好事奥克。@gnovice:我没有马上建立连接,但至少当我看到它时,我意识到了它的惊人之处:)
>> 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