我正在尝试编写一个广义条件求值程序,类似于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}数据构造函数。
对列表缺点数据构造函数进行模式匹配的正确方法是什么?
答案 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"