Recursion 期权声明的F#分析

Recursion 期权声明的F#分析,recursion,f#,options,Recursion,F#,Options,我从这样开始的函数中提取了以下行(教科书示例不完整): 让rec统一(exp1:exp)(exp2:exp)(k:(subst->subst))(sub:subst)= 将checkmap exp1 sub、checkmap exp2 sub与 |变量a,当a=b->k sub时的变量b |Var a,Var b->k(安全输入输入输入输入输入输入) (<|||);; 要改进该功能,您还可以: 创建let绑定以保存立即值 重新使用exp1和exp2而不是创建相同的值 e、 g 如果你

我从这样开始的函数中提取了以下行(教科书示例不完整):

让rec统一(exp1:exp)(exp2:exp)(k:(subst->subst))(sub:subst)=
将checkmap exp1 sub、checkmap exp2 sub与
|变量a,当a=b->k sub时的变量b
|Var a,Var b->k(安全输入输入
输入
输入
输入
输入

(<|||);;
要改进该功能,您还可以:

  • 创建let绑定以保存立即值
  • 重新使用
    exp1
    exp2
    而不是创建相同的值
e、 g

如果你打字

(<|||);;
要改进该功能,您还可以:

  • 创建let绑定以保存立即值
  • 重新使用
    exp1
    exp2
    而不是创建相同的值
e、 g

如果你打字

(<|||);;
要改进该功能,您还可以:

  • 创建let绑定以保存立即值
  • 重新使用
    exp1
    exp2
    而不是创建相同的值
e、 g

如果你打字

(<|||);;
要改进该功能,您还可以:

  • 创建let绑定以保存立即值
  • 重新使用
    exp1
    exp2
    而不是创建相同的值
e、 g


我认为,要获得更完整的答案,您需要发布更多的代码。uniify被标记为递归,但就代码而言,它不需要这样——因此,它看起来似乎缺少代码。我认为,要获得更完整的答案,您需要发布更多的代码。uniify被标记为递归,但就代码而言,它不需要这样——因此看起来缺少代码。我认为要获得更完整的答案,您需要发布更多的代码。Unify被标记为递归,但就代码本身而言,它不需要这样做——因此看起来似乎缺少代码。我认为要获得更完整的答案,您需要发布更多的代码。Unify被标记为递归,但就代码本身而言,它不需要这样做看起来好像有代码丢失了。
(<|||);;
val it : (('a -> 'b -> 'c -> 'd) -> 'a * 'b * 'c -> 'd) = <fun:it@1>
let inline (<|||) f (a, b, c) = f a b c
k (safeInput (safeInput sub a (Var b)) b (Var a))
let rec unify (exp1 : exp) (exp2 : exp) (k : subst -> subst) (sub : subst) =
    match checkmap exp1 sub,checkmap exp2 sub with
    | Var a, Var b when a = b -> k sub
    | Var a, Var b -> 
        let sub' = safeInput sub a exp2
        k (safeInput sub' b exp1)