gpt4 book ai didi

matlab - for 循环范围语法

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:31 25 4
gpt4 key购买 nike

我花了几个小时调试一个我认为是语法错误的问题。

a = zeros(3);
for i=1:1size(a,2) % note the missing colon between 1 and size(a,2)
i
end

以下仅显示

ans = 3
1

从本质上讲,似乎 Matlab/Octave 将上述内容解析为:

for i=1:1
size(a,2)
i
end

但是请注意

i=1:1size(a,2)

产生语法错误。 Matlab/Octave 有这种 for 循环语法有充分的理由吗?有什么东西应该让它变得更容易吗?只是好奇是否还有其他人对此有任何想法。谢谢。

最佳答案

Matlab 的语法允许这样做确实有点意外。我不知道为什么这是允许的。一个原因可能是在一行中允许 for 循环:

>> for i=1:3 disp(i);end
1
2
3

但有趣的是,删除空格是不允许的:

>> for i=1:3disp(i);end
for i=1:3disp(i);end
|
Error: Unexpected MATLAB operator.

这可能是因为数字后跟 d 是另一种写 float 的方式 (3d10 == 3e10),所以解析器/分词器最初认为您定义了一个数字,但当它看到 i 时会感到困惑。 Daniel 的 fprintf 示例确实有效,因为后跟 f 的数字不是有效数字,因此分词器知道您启动了一个新 token 。

我猜很多年前(>30?),当他们定义 matlab 的语法时,他们没有预见到这会引入这种难以发现的问题。我想 matlab 最初是由工程师为工程师编写的,而不是由知道如何设计通用编程语言的人编写的。其他语言如 C 或 Python 使用标点符号将循环条件与循环体分开,因此没有歧义。我不知道是否仍然可以更正 Matlab 的语法,因为它可能会破坏依赖于当前行为的旧代码。

至少,如果你使用最新版本的Matlab,编辑器warns for various problems在你的代码中。注意右侧边框中的红色小破折号可以为您节省几个小时的调试时间(但也许您使用的是 Octave)。我试图养成修复它指示的所有警告的习惯。对于您的代码,它显示以下内容:

editor Screenshot

关于matlab - for 循环范围语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com