示例#1
0
        public static Goal AllOne(this KRunner k, object lst)
        {
            var d = k.Fresh();

            return(k.Any(
                       k.Eq(lst, null),
                       k.All(
                           k.Eq(lst, k.Pair(1, d)),
                           k.Recurse(() => k.AllOne(d)))));
        }
示例#2
0
        public static Goal Distincto(this KRunner k, params object[] vs)
        {
            if (vs.Length < 2)
            {
                return(k.Succeed);
            }
            if (vs.Length == 2)
            {
                return(k.Noto(k.Eq(vs[0], vs[1])));
            }
            var gs = Enumerable.Empty <Goal>().ToList();

            for (var i = 0; i < vs.Length; ++i)
            {
                for (var j = i + 1; j < vs.Length; ++j)
                {
                    gs.Add(k.Noto(k.Eq(vs[i], vs[j])));
                }
            }
            return(k.All(gs.ToArray()));
        }