模式匹配列表缺点引用

时间:2016-11-24 01:41:00

标签: f#

我正在尝试编写一个广义条件求值程序,类似于Lisp / Scheme用户调用cond,使用引号,因为它们是获取逐个语句语义的最简单方法。我在列表缺点操作上遇到模式匹配问题,并且似乎无法确切地找出如何表示它。这就是我到目前为止所拥有的:

open FSharp.Quotations.Evaluator
open Microsoft.FSharp.Quotations
open Microsoft.FSharp.Quotations.Patterns

let rec cond = function
  | NewUnionCase (Cons, [NewTuple [condition; value]; tail]) ->
    if QuotationEvaluator.Evaluate <| Expr.Cast(condition)
      then QuotationEvaluator.Evaluate <| Expr.Cast(value)
      else cond tail

  | _ -> raise <| MatchFailureException ("cond", 0, 0

问题在于模式匹配的第一个分支中的Cons标识符 - 它不存在,我无法弄清楚如何表示列表{{1}数据构造函数。

对列表缺点数据构造函数进行模式匹配的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我不认为有直接在模式中编写 using( var machine_principal = new PrincipalContext(ContextType.Machine, server1)) { try { using (var oPrincipalContext = new PrincipalContext(ContextType.Domain,"xx.com")) { GroupPrincipal use = new GroupPrincipal(oPrincipalContext); GroupPrincipal group = new GroupPrincipal(machine_principal); group = GroupPrincipal.FindByIdentity(machine_principal, "Administrators"); use = GroupPrincipal.FindByIdentity(oPrincipalContext, IdentityType.SamAccountName, "myname");//Able to find group and sid group.Members.Add(oPrinicpipalContext,IdentityType.SamAccountName,use.SamAccountName);//_Throwing exception -the member's Sid could not be resolved_ } } catch (Exception ed) { MessageBox.Show(ed.Message); }; }; 的简单方法,但您可以使用Cons子句来检查联合案例是否是名为{{1 } when类型:

"Cons"