标准ML中命题逻辑公式的大小

时间:2018-03-08 05:57:34

标签: sml ml mosml

我正在研究这个问题,其中命题逻辑公式由:

表示
datatype fmla =
     F_Var of string
   | F_Not of fmla
   | F_And of fmla * fmla
   | F_Or of fmla * fmla 

我试着编写一个返回命题逻辑公式大小的函数。命题变量的大小为1;逻辑否定的大小为1加上其子公式的大小;逻辑连接和析取的大小为1加上子公式的大小。

我将如何尝试解决此问题?

1 个答案:

答案 0 :(得分:4)

一般来说,当你有这样的和类型时,最好先从一个只列出每个案例的函数定义开始,但不考虑实现:

fun size (F_Var v) =
  | size (F_Not f) =        
  | size (F_And (f1, f2)) =
  | size (F_Or (f1, f2)) =

然后在弄清楚的时候一次填写一个案例的定义。

由于您已经列出了每种情况下的尺寸;

  • 命题变量的大小为1。
  • 否定的大小为1加上其子公式的大小。
  • 连词的大小为1加上子公式大小的总和。
  • 分离的大小为1加上其子公式大小的总和。

你可以将它直接翻译成ML:

fun size (F_Var _) = 1
  | size (F_Not f) = 1 + size f
  | size (F_And (f1, f2)) = ...
  | size (F_Or (f1, f2)) = ...

我留下了两个案例供你填写。
请注意,英语定义与每个案例的ML定义之间存在非常密切的对应关系。