阅读表示树,几乎所有的文本都只包含数字运算符,例如加号、减号、时间等……但是,有一些随便在里面有“if then”运算符。我真的很困惑这是否在每个版本的表示树中共享,或者它是否只有少数程序具有。
问问题
164 次
1 回答
0
绝对可以if
用作树中允许的功能之一,但有一个问题。通常if
需要三个输入:条件、然后结果和其他结果。通常这些是不同类型的——条件是布尔值,然后结果/其他结果是其他东西(数字)。如果if
在树中插入此类,则会破坏类型一致性——并非每个子树都会产生相同类型的结果。例如,这会导致交叉困难,因为您不能只取其任何子树if
并将其替换为来自第二个父级的一些随机子树——它可能属于错误类型。
所以常见的解决方案是:
- 要么使交叉/变异运算符具有类型感知能力;
- 或使用某种类型一致的
if
;例如,您可以将其视为if
具有 4 个数字输入的函数,该函数f(a, b, c, d)
返回c
ifa > b
和d
else。在这种情况下,所有子树仍然期望产生相同类型的值,并且不需要额外的交叉和变异。当然,您可以将其简化为三输入if
:b
如果a
为正则返回,c
否则。但是,据我所知,这种方法通常被认为(至少在某些文献中,第 3.2.1 节)是“可能引入意外偏差”,不推荐超过 4-inputif
。
于 2017-02-23T12:04:13.353 回答