Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中调用短路逻辑运算符作为函数?_Matlab_Operator Overloading_Logical Operators_Low Level_Short Circuiting - Fatal编程技术网

如何在MATLAB中调用短路逻辑运算符作为函数?

如何在MATLAB中调用短路逻辑运算符作为函数?,matlab,operator-overloading,logical-operators,low-level,short-circuiting,Matlab,Operator Overloading,Logical Operators,Low Level,Short Circuiting,MATLAB运算符通常转换为函数形式,如以下示例所示: ~A=>不是(A) A+B=>plus(A,B) A(…)=>subsref(…) A(…)=…=>subsasgn(…) 等等 现在请考虑运算符。 各种文档(1-、2-、3-)对此没有任何说明,也没有帮助和、帮助或、帮助重新加载。 这也没有帮助:profile('on'、'-detail'、'builtin') 我能说的是,|似乎被重定向到或() >> 1 || [0,0] ans = 1 &g

MATLAB运算符通常转换为函数形式,如以下示例所示:

  • ~A
    =>
    不是(A)
  • A+B
    =>
    plus(A,B)
  • A(…)
    =>
    subsref(…)
  • A(…)=…
    =>
    subsasgn(…)
  • 等等

现在请考虑运算符。

各种文档(1-、2-、3-)对此没有任何说明,也没有
帮助和
帮助或
帮助重新加载
。 这也没有帮助:
profile('on'、'-detail'、'builtin')

我能说的是,
|
似乎被重定向到
或()

>> 1 || [0,0]    
ans =    
     1

>> 1 | [0,0]    
ans =    
     1     1

>> or(1,[0,0])    
ans =    
     1     1

>> 1 && [0,0]
Operands to the || and && operators must be convertible to logical scalar values.
所以我的问题是:假设这是可能的-如何显式调用
&&
|
的底层函数?


(注意:这个问题涉及的是“如何”,而不是“为什么”)

不可能有一个函数实现底层功能。假设有一个实现此运算符的函数
scor
,则调用
scor(true,B)
将在调用
scor
之前计算
B
,但运算符不计算
B

显然,scor可以定义为
scor=@(x,y)(x | | y)
,但它将以大写形式计算
B

/关于使用函数句柄的注释,这可能是一种解决方法:

%not printing a:
true||fprintf('a')
%printing a:
scor=@(x,y)(x||y)
scor(true,fprintf('a'))
%not printing a:
scor(true,@()(fprintf('a')))

我怀疑AND的函数式调用可以避免执行参数。@Dev-iL:如果您想要的函数形式,您必须使用带有模型的语言。@Amro-您可能知道MATLAB提供了某种形式的参数(例如,如Daniel的回答所示)。尽管如此,我还是要感谢你的洞察力。顺便说一句,&&&
| |
是MATLAB确实具有惰性评估功能的“活生生的证明”。。。问题是,为什么我们不能将所说的MATLAB功能轻松地用于其他事情?而且,
sAND(@()expr1,@()expr2,…)
可能是最接近的了。@knedlsepp:我想起了几年前在Loren Shure的博客上介绍的,这是MATLAB@Dev-iL:逻辑短路运算符
&&
| |
没有函数形式,出于充分的理由。。。在调用此类函数之前,必须对参数进行求值,这会破坏函数的功能。也许
内置('&&',a,@()b)
?@Dev iL:安装Matlab时,您似乎希望得到Haskell;-)顺便说一句——我刚刚注意到SO建议了以下内容,我认为这些内容非常有用。(我接受这个答案的前提是,杰出的Daniel和@Amro不适合:)