Project Description
Chaow Framework is the set of class libraries designed for enhancing standard .NET framework. It allows you to write more simple but powerful code.
Features
1. Extend your .NET language
Chaow.Extensions contains several extensions for array, list, date, int, string and more.
You can use the extensions to make you code easier.
var matchQuery = new {
BirthDate = 1.January(2000), //Create date easily
Iam = Sex.Man,
LookingFor = Array.Enum<Sex>(), //Looking for Man, and Woman! (Expand enum)
AgeRange = 18.To(25) //Create number range
}
You will also be able to write Functional Programming and Dynamic Programming.
Func<int, int> fibo = null;
fibo = x => fibo(x  1) + fibo(x  2);
fibo = fibo.When(x => x <= 1, x => x); //Able to do pattern matching
fibo = fibo.Memoize(); //Allow you to do memoization
var result = fibo(38);
2. Set of based class libraries
With
Chaow.Numeric, you will get several new based classes for using in your code.
Feature classes are BigInteger, Prime, and much more.
BigInteger a = 2;
var result = a.Power(1000); //2^1000 value is more than 300 digits of number, but BigInteger has no boundary
var prime = new Prime();
var isPrime = prime.Contains(142857); //Test for prime number
var primeList = prime.Take(10000); //Generate prime numbers
3. Solve polynomial problems
You can easily analyze your math functions with
Chaow.Numeric 2.
ie. Solve integer of X, Y in 3XX + 14XY + 6YY  17X  23Y  505 = 0
var solutions = Diophantine.Parse((x, y) => 3 * x * x + 14 * x * y + 6 * y * y  17 * x  23 * y  505).Solutions;
var x = solutions[0].X0;
var y = solutions[0].Y0;
ie2. Find formula from sequence of numbers
var formula = MathExt2.PolynomialInterpolation(new Rational[] { 1, 8, 27, 64 });
Console.WriteLine(formula.Rewrite());
//Output is x => x.Power(3)
4. Solve nonpolynomial problems
Chaow.Combinatorics will allow you to backtrack with any types of problem.
ie. Solve 8 Queens easily, with few lines of code.
var solutions = "ABCDEFGH".Backtrack(8);
solutions.BacktrackingModel = BacktrackingModel.Permutation;
solutions.AppendConstraint(set => q =>
set.All((x, i) => (set.Length  i != (x  q).Abs()))
);
var answer = solutions.First();
Have more than 1 CPU? You can do concurrent backtracking easily.
ie2. Create concurrent Sudoku solver with few lines of code.
//Just add AsConcurrent to transform normal enumeration into concurrent enumeration.
var solutions = 1.To(9).AsConcurrent().Backtrack(
valued,
(set, cell, i) => set.Append(cell),
set => set.Length == 81);
solutions.AppendConstraint(
set => cell => !set.Any((x, i) => x == cell && Sudoku.hasImpact(position[i], position[set.Length]))
);
var answer = solutions.SelectResults().First();
Finally, may I introduce new language LINCON (Language INtegrated CONstraint programming).
LINCON is strong type constraint programming, which fast, declarative style and fun!
ie3. Solving Einstein's puzzle with LINCON!
var solutions = from n in ArrayExt.Enum<Nationality>().ToConstraintList(5)
from c in ArrayExt.Enum<HouseColor>().ToConstraintList(5)
from s in ArrayExt.Enum<Smoke>().ToConstraintList(5)
from d in ArrayExt.Enum<Drink>().ToConstraintList(5)
from p in ArrayExt.Enum<Pet>().ToConstraintList(5)
from i in 0.To(4).ToConstraintIndex()
where Constraint.AllDifferent(n)
where Constraint.AllDifferent(c)
where Constraint.AllDifferent(s)
where Constraint.AllDifferent(d)
where Constraint.AllDifferent(p)
where n[0] == Nationality.Norwegian
where d[2] == Drink.Milk
where (n[i] == Nationality.British) == (c[i] == HouseColor.Red)
where (n[i] == Nationality.German) == (s[i] == Smoke.Prince)
where (c[i] == HouseColor.Yellow) == (s[i] == Smoke.DunHill)
where (n[i] == Nationality.Danish) == (d[i] == Drink.Tea)
where (c[i] == HouseColor.Green) == (d[i] == Drink.Coffee)
where (s[i] == Smoke.BlueMaster) == (d[i] == Drink.Beer)
where (n[i] == Nationality.Swedish) == (p[i] == Pet.Dog)
where (s[i] == Smoke.PallMall) == (p[i] == Pet.Bird)
where (c[i] == HouseColor.Green) == (c[i + 1] == HouseColor.White)
where (p[i] == Pet.Cat) ? (s[i  1] == Smoke.Blend  s[i + 1] == Smoke.Blend) : true
where ((p[i] == Pet.Horse) ? (s[i  1] == Smoke.DunHill  s[i + 1] == Smoke.DunHill) : true)
where ((n[i] == Nationality.Norwegian) ? (c[i  1] == HouseColor.Blue  c[i + 1] == HouseColor.Blue) : true)
where ((s[i] == Smoke.Blend) ? (d[i  1] == Drink.Water  d[i + 1] == Drink.Water) : true)
select 0.To(4).Select(x =>
new {
Nationality = n[x],
HouseColor = c[x],
Smoke = s[x],
Drink = d[x],
Pet = p[x]
});
var answer = solutions.First();
Download
Download now to get more samples and source codes.
Modules
module 
description 
Chaow.Collections

provides additional types used as the collections ie. disjoint set, collection string

Chaow.Combinatorics

enables you to do combinatoric search easier ie. combination, permutation, partition

Chaow.Expression

enhances the power of expression ie. exp matcher, exp replacer, exp rewriter 
Chaow.Extensions

extends .NET framework types ie. int, string, ienumerable, func 
Chaow.LINCON

language integrated constraint programming, allows you to write cp with linq 
Chaow.Numeric

provides various high performance numeric types ie. prime, biginteger, rational

Chaow.Numeric 2

allows you to do mathematical analysis ie. diophantine solver, polynomial rewriter

Chaow.Threading

enables you to write multithread code easier 
Links

my blog (Thai language)

donation