簡體   English   中英

SML中的命題邏輯評估

[英]Propositional Logic Valuation in SML

我正在嘗試使用SML結構定義命題邏輯評估。 命題邏輯中的評估將命名變量(即字符串)映射為布爾值。

這是我的簽名:

signature VALUATION =
sig
    type T
    val empty: T
    val set: T -> string -> bool -> T
    val value_of: T -> string -> bool
    val variables:  T -> string list
    val print: T -> unit
end;

然后,我定義了一個匹配結構:

structure Valuation :> VALUATION =
        struct
            type T = (string * bool) list
            val empty = []
            fun set  C a b = (a, b) :: C
            fun value_of [] x = false
                | value_of ((a,b)::d) x = if x = a then b else value_of d x  
            fun variables [] = []
                | variables ((a,b)::d) =  a::(variables d ) 
            fun print valuation = 
                (
                    List.app
                        (fn name => TextIO.print (name ^ " = " ^ Bool.toString (value_of valuation name) ^ "\n"))
                        (variables valuation);
                    TextIO.print "\n"
                )
        end;

因此,估值應類似於[("s",true), ("c", false), ("a", false)]

但是我不能像結構評估那樣聲明或做出類似以下的指令: [("s",true)]: Valuation.T; 當我嘗試在函數中使用評估時,出現如下錯誤:

Can't unify (string * bool) list (*In Basis*) with
      Valuation.T

有人可以幫我嗎? 謝謝。

Valuation.T類型是不透明的(隱藏的)。
您只知道它叫“ T”。
除了通過VALUATION簽名,您無法對其進行任何操作,並且該簽名沒有提及列表。

您只能使用emptyset構造函數來構建Valuation ,並且必須從empty開始。

- val e = Valuation.empty;
val e = - : Valuation.T
- val v = Valuation.set e "x" true;
val v = - : Valuation.T
- val v2 = Valuation.set v "y" false;
val v2 = - : Valuation.T
- Valuation.value_of v2 "x";
val it = true : bool
- Valuation.variables v2;
val it = ["y","x"] : string list
- Valuation.print v2;
y = false
x = true

val it = () : unit

請注意,因為沒有公開內部表示,所以每個Valuation.T值都打印為“-”。

暫無
暫無

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

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