分号是否在Matlab/倍频程函数体中?

分号是否在Matlab/倍频程函数体中?,matlab,octave,Matlab,Octave,在Octave/Matlab中考虑以下两个函数:;它们之间的唯一区别在于正文中的行是否以分号结尾: function [a, b, c] = fooNoSemicolons (x, y, z) a = x * 42 b = y + 42 c = (x * y) / (z * 42) endfunction function [a, b, c] = fooSemicolons (x, y, z) a = x * 42; b = y + 42; c = (x * y) /

在Octave/Matlab中考虑以下两个函数:;它们之间的唯一区别在于正文中的行是否以分号结尾:

function [a, b, c] = fooNoSemicolons (x, y, z)
  a = x * 42
  b = y + 42
  c = (x * y) / (z * 42)
endfunction

function [a, b, c] = fooSemicolons (x, y, z)
  a = x * 42;
  b = y + 42;
  c = (x * y) / (z * 42);
endfunction

现在考虑下列调用及其输出:

fprintf ("no semicolons: \n"); disp (fooNoSemicolons (12, 13, 14));
fprintf ("done\n");
fprintf ("semicolons:    \n"); disp (fooSemicolons (12, 13, 14));
fprintf ("done\n");
显然,这两个函数产生相同的答案,a的值,即504,但我不太清楚里面是否有语义上的不同

我在Matlab/Octave中找不到关于分号含义的文档,但我又做了一些实验,但没有给出太多说明:

fprintf ("noSemicolons: \n");
[someA, someB, someC] = fooNoSemicolons (12, 13, 14);
fprintf ("done\n"); 
disp ([someA, someB, someC]);

fprintf ("semicolons:\n");
[moreA, moreB, moreC] = fooSemicolons (12, 13, 14);
fprintf ("done\n");
disp ([moreA, moreB, moreC]);

fprintf ("noSemicolons: \n");
otherStuff = fooNoSemicolons (12, 13, 14);
% otherStuff apparently does not get bound to an array or vector!
disp (otherStuff);
fprintf ("done\n"); 

fprintf ("semicolons:\n");
moreStuff  = fooSemicolons (12, 13, 14);
% moreStuff apparently does not get bound to an array or vector!
fprintf ("done\n"); 
disp (moreStuff);

在Matlab/Octave代码行的末尾放一个分号可以防止控制台打印答案/变量赋值/任何内容

x=5
将x设置为5并打印x的值

x=5;

将x设置为5。

在命令窗口中键入
help punct
。这是一个通常在学习Matlab的前五分钟学习的东西。看起来你的问题已经被正确回答了。正如您所知,如果您使用的是MATLAB的许可副本,那么您应该可以通过MATLAB帐户访问免费的2小时在线培训课程。它很好地概述了基础知识,包括分号。我使用的是八度音阶,但尽量保持在它的Matlab子集内。我使用的是DSL生成的代码,所以我要深入到最深处,以一种由内而外的方式进行计算,而不是像学生那样从顶部进行计算。@horchler
help punct
不幸的是,在八度音阶下无法工作。
x=5
x=5;