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

2 投票
3 回答
1876 浏览
提问于 2025-04-16 07:28

在Matlab的命令行窗口里可以定义函数吗?我觉得不太可能。

但是在R语言中是可以的。我在想为什么这两者会有这样的区别,背后是否还有更多的原因,或者我可以说这只是某些编程语言(比如Python、Bash等)的特性?

谢谢!

3 个回答

1

是的,如果这个编程语言支持的话,就可以这样做。下面是一个简单的例子,来自我正在使用的命令提示符,使用的是R语言:

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

这其实不是编程语言本身的特点,而是某种编程语言的具体实现方式。比如,有C语言的解释器和Lisp语言的编译器。通常我们把这种方式称为REPL(读-评-打印-循环),它一般是解释型实现的一个特点。

4

你可以在Matlab的命令窗口里定义函数。这样定义的函数在当前会话中可以使用,但下次打开Matlab时就不能用了(不过你可以像使用变量一样保存和加载它)。

举个例子,我复制了@Dirk Eddelbuettel的一个函数:

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

编辑 1 注意,在Matlab中你只能定义单个语句的匿名函数,所以不能使用像for循环这样的结构(除非你使用比较复杂的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

撰写回答