Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Java 删除Jess中的临时事实_Java_Protege_Jess - Fatal编程技术网

Java 删除Jess中的临时事实

Java 删除Jess中的临时事实,java,protege,jess,Java,Protege,Jess,我试图显示所有实例插槽值,并在通过以下规则处理其所有绑定后将其删除: (defrule findSourcesOfPollution (object (is-a http..#PollutionSources) (OBJECT ?sitepoll) (http..#potentialPollutant $? ?b&:(eq (instance-na

我试图显示所有实例插槽值,并在通过以下规则处理其所有绑定后将其删除:

(defrule findSourcesOfPollution
    (object 
        (is-a http..#PollutionSources)              
        (OBJECT ?sitepoll)          
        (http..#potentialPollutant          
        $? ?b&:(eq (instance-name ?b)(instance-name http..#BiochemicalOxygenDemand)) $?) 
        (..#pollutionSourceName ?psName) 
        (http..#pollutionType ?psType) 
    )     
    (object 
        (is-a http..#MeasurementSite) 
        (OBJECT ?loc)
        (http..#hasSourcesOfPollution $? ?sitepoll $?)
    )
    (object 
            (is-a http..#tmpModerateMeasurement) 
            (OBJECT ?mob)
            (http..#observationResultLocation ?loc)
    )
=> 
    (printout t "pollution sources: " (instance-name ?sitepoll) " (Type: " ?psType ")" crlf)
    (unmake-instance ?mob)
)
但是,该规则只输出一个污染源,因为unmake实例将删除该实例并停止显示其他绑定

编辑: 出于@laune comment的动机,我使用foreach循环尝试了以下方法,但仍然没有收到输出:

(defrule findSourcesOfPollution 
    (object 
        (is-a http..#MeasurementSite) 
        (OBJECT ?loc)
        (http..#hasSourcesOfPollution $?sitepoll)
    )
    (object 
            (is-a http..#tmpModerateBODMeasurement) 
            (OBJECT ?mob)
            (http..#observationResultLocation ?loc)
    )
    (bind ?poll nil)
=> 
    (foreach ?poll ?sitepoll 
        (slot-get ?poll http..#potentialPollutant)
        (if(eq ?poll http..#BiochemicalOxygenDemand) then 
            (printout t "Pollution source: " (instance-name ?poll) " (Type: " ?loc ")" crlf)
        )
    )
)

将站点列表绑定到列表变量

(object 
    (is-a http..#MeasurementSite) 
    (OBJECT ?loc)
    (http..#hasSourcesOfPollution $?sitepoll )
) 
并在右侧迭代列表:

(foreach ?site ?sitepoll (printout ...))

感谢真主,然后感谢@laune,感谢他打开我的心扉来解决这个问题。主要问题来自slot get,它返回的是列表而不是字符串。解决方案规则如下:

(defrule findBOD5SourcesOfPollution 
    (object 
        (is-a http..#MeasurementSite) 
        (OBJECT ?loc)
        (http..#hasSourcesOfPollution $?sitepoll)
    )
    (object 
            (is-a http..#tmpModerateBODMeasurement) 
            (OBJECT ?mob)
            (http..#observationResultLocation ?loc)
    )
=> 
    (foreach ?poll ?sitepoll 
        (foreach ?pollLsItem (slot-get ?poll http..#potentialPollutant)
            (if(eq (instance-name ?pollLsItem) http..#BiochemicalOxygenDemand) then 
                (printout t "BOD5 pollution source: " (instance-name ?poll) " (Type: " (instance-name ?loc) ")" crlf)
            )
                )
    )
    (unmake-instance ?mob)
)

是的,应用foreach有帮助,但根本没有,因为?sitepoll应该被过滤掉,只包括生化需氧量和污染源见第一个目标条款。我尝试将?sitepoll转换为一个列表,即$?sitepoll,但没有生成任何输出,这是预期的,因为MeasurementSite对象中的列表$?sitepoll不等于变量?污染源对象中的sitepoll我尝试了foreach方法查看问题文本中的编辑部分,但仍然没有输出,我认为这是错误的由于?poll变量不能绑定在RHS.Grrr中,因此复制变量(包括有效美元)总是错误的。必须在RHS上安装?sitepoll。已编辑。已更正,但仍无法筛选?sitepoll列表,以仅包括生化需氧量和污染源的列表:在编辑后的规则中,您不使用实例名称,而是执行eq?poll http..BiochemicalOxygenDemand。也许您忽略了测试,只需打印列表中所有内容的实例名的结果。另外,sitepoll是否有元素你必须排除一种又一种可能性。如果有必要,可以通过Jess Technical的调用应用Java方法。对于回滚一个好的编辑,我们投了反对票。答案应该简洁,没有感谢和其他闲聊的内容。关于宗教内容是否应该在帖子中出现的讨论,请参阅。