CLIPS递归实现最大公约数函数问题:非相等输入致CLIPSIDE崩溃
CLIPS递归GCD函数导致CLIPSIDE崩溃的解决办法
问题出在你代码里的else if语法上——CLIPS的deffunction条件语句中,else if必须写成连在一起的elseif关键字,分开写会导致语法解析错误,递归调用时触发异常进而让CLIPSIDE崩溃。
修正后的代码如下:
(deffunction mcd (?a ?b) (if (= ?a ?b) then (return ?a) elseif (> ?a ?b) then (return (mcd (- ?a ?b) ?b)) else (return (mcd ?a (- ?b ?a))) ) )
CLIPS的条件结构严格要求elseif作为单个使用的关键字,分开的else if会被解析为else块内嵌套了一个未正确闭合的if语句,这会让函数逻辑完全偏离预期,递归调用时无法正常终止或触发语法错误,最终导致CLIPSIDE崩溃。修正后,函数可以正常执行GCD计算,比如输入(mcd 12 8)会返回4,(mcd 15 9)返回3。
内容的提问来源于stack exchange,提问作者zpip101
相关产品推荐
相关产品推荐

