Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
F# 析取范式公式_F#_Set_Formula_Declaration - Fatal编程技术网

F# 析取范式公式

F# 析取范式公式,f#,set,formula,declaration,F#,Set,Formula,Declaration,我将使用析取范式的基于集合的公式表示。我发现,由于连词是交换的,结合的和(a∧ a) 相当于一个方便 通过它的一组字面值litOf(bc)表示基本的连词bc 我在考虑表示析取范式公式a: BC1V。v bcn 按规定: dnfToSet(a) = {litOf(bc1), . . . , litOf(bcn)} 我们称之为a的dns集 我应该如何为函数litOf和dnfToSet编写F#声明?我不确定我是否理解这个问题,但我想到了以下几点: let litOf = Set.ofSeq let

我将使用析取范式的基于集合的公式表示。我发现,由于连词是交换的,结合的和(a∧ a) 相当于一个方便 通过它的一组字面值litOf(bc)表示基本的连词bc

我在考虑表示析取范式公式a:

BC1V。v bcn

按规定:

dnfToSet(a) = {litOf(bc1), . . . , litOf(bcn)}
我们称之为a的dns集


我应该如何为函数litOfdnfToSet编写F#声明?

我不确定我是否理解这个问题,但我想到了以下几点:

let litOf = Set.ofSeq
let dnfToSet a =
    let isNotSuperset bci = a |> Set.forall(fun bcj -> (bci = bcj) || not(Set.isSuperset bci bcj))
    a |> Set.filter isNotSuperset
以下说明:

type bc = A | B | C | D

let bc1 = litOf [A; B; C]
let bc2 = litOf [B; C; B]
let bc3 = litOf [C; B; A]
let bc4 = litOf [D]
let a = litOf [ bc1; bc2; bc3; bc4 ]
let dnf = dnfToSet a
将其全部投入FSI收益率:

type bc =
  | A
  | B
  | C
  | D
val bc1 : Set<bc> = set [A; B; C]
val bc2 : Set<bc> = set [B; C]
val bc3 : Set<bc> = set [A; B; C]
val bc4 : Set<bc> = set [D]
val a : Set<Set<bc>> = set [set [A; B; C]; set [B; C]; set [D]]
val dnf : Set<Set<bc>> = set [set [B; C]; set [D]]

((B ∧ C) V (D))

如果我的回答完全没有抓住要点,也许您可以在问题中添加一些示例,说明litOf和dnfToSet作为输出生成了什么,给出了一些示例输入。
let sprintlit lit =
    System.String.Join(" ∧ ", lit |> Seq.map(sprintf "%A") |> Seq.toArray)
    |> sprintf "(%s)"

let sprintdnf set =
    System.String.Join(" V ", set |> Seq.map sprintlit |> Seq.toArray)
    |> sprintf "(%s)"