簡體   English   中英

如何在片段中建立兩個LHS之間的關系?

[英]How can I stablish a relation between two LHS in clips?

我正在嘗試制作一個剪輯程序以解決任何推箱子問題,但我遇到了一個大問題:

在此示例中,我僅具有該字段的初始狀態,以及一條規則,如果沒有框或障礙物,該規則將嘗試將玩家向右移動(在完整程序中,我也具有移動框的規則)。 當我的狀態與LHS ?ff <- (R ?Ir ?Xr ?Yr $?a B ?Ib ?Xb ?Yb $?b S ?Is ?Xs ?Ys ?Es $?c W ?w D ?d L ?l F ?)和另一個由於框的運動而產生的,不允許規則(not (R $? B ? =(+ ?Xr 1) ?Yr $?) )即使第一個遺產為真,也要為真。

(deffacts InitialState
    ;------static---------
            (MAX_DEPTH 5)
            ;field
            ;      X Y
            (FIELD 8 5)
            ;obstacle
            ;  X Y
            (O 4 1)
            (O 1 3)
            (O 8 3)
            (O 4 3)
            (O 5 3)
            (O 4 4)
            (O 4 5)


    ;-----dynamic-----
            (
            ;robot
            ; I X Y
            R 1 2 4

            ;box
            ; I X Y
            B 1 2 2
            B 2 3 4
            B 3 6 2

            ;storehouse
            ; I X Y E
            S 1 7 1 0
            S 2 5 4 0
            S 3 5 5 0

            ;win
            W 0 ;Posibilidad de cambiar la R por W asi paramos la ejec

            ; depth
            D 0

            ;last move
            ;0:nothing 1:up 2:right 3:down 4:left
            L 0

            ;father id
            F 0
            )
    )

    (defrule move_right_no_box
            (MAX_DEPTH ?MD)
            (FIELD ?Xf ?Yf)

            ?ff <- (R ?Ir ?Xr ?Yr $?a B ?Ib ?Xb ?Yb $?b S ?Is ?Xs ?Ys ?Es $?c W ?w D ?d L ?l F ?)


            ;comprueba que a la derecha no hay un obstacle
            (not (O =(+ ?Xr 1) ?Yr) )

            ;comprueba que a la derecha no hay un box
            (not (R $? B ? =(+ ?Xr 1) ?Yr $?) )
    =>      
            (assert (R ?Ir (+ ?Xr 1) ?Yr $?a B ?Ib ?Xb ?Yb $?b S ?Is ?Xs ?Ys ?Es $?c W ?w D (+ ?d 1) L 2 F ?ff))
    )

例如,我的狀態右邊沒有盒子或障礙物,但是我有另一種狀態。 我需要一種建立規則之間關系的方法: ?ff <- (R ?Ir ?Xr ?Yr $?a B ?Ib ?Xb ?Yb $?b S ?Is ?Xs ?Ys ?Es $?c W ?w D ?d L ?l F ?)(not (R $? B ? =(+ ?Xr 1) ?Yr $?) ) ,以確保它們指的是相同狀態(和不同狀態)。狀態(與我正在評估的狀態不同)沒有干擾)。

換句話說,我需要的是一種確保兩個LHS都評估相同狀態的方法。 謝謝!

PD1:我不能使用ID之類的東西,因為它會使程序的執行速度太慢。

聲明一個事實,其中包含有關兩個規則匹配的狀態的信息。

好的,最后我找不到確保兩個LHS正在評估同一狀態的方法,因此我使用“成員”功能解決了該問題: https : //www.csie.ntu.edu.tw/~ sylee /場/短片/ BPG / node12.2.3.html

我可以創建一個LHS規則,該規則始終返回True,並且由多字段變量組成,然后使用成員函數檢查規則的一部分是否滿足我的條件。

另一種選擇(即使由於我尚未測試而無法確定是否可行),也可以使用以下方法評估一個LHS中的所有條件: https : //www.csie.ntu.edu.tw/~sylee/courses /clips/bpg/node5.4.1.4.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM