54 typedef typename compositor_t::function function_t;
56 symbol_table_t symbol_table;
60 symbol_table.add_function(
"println", println);
62 compositor_t compositor(symbol_table);
64 compositor.add(function_t()
66 .var(
"person_x").var(
"person_y")
69 " person_x xor person_y; "
72 const std::string logical_deducation_riddle_program =
73 " var number_of_culprits := 1; "
75 " for (var Tori := false; Tori <= true; Tori += true) "
77 " for (var Annie := false; Annie <= true; Annie += true) "
79 " for (var Betsy := false; Betsy <= true; Betsy += true) "
81 " for (var Chloe := false; Chloe <= true; Chloe += true) "
83 " for (var Zoey := false; Zoey <= true; Zoey += true) "
85 " if (sum(Annie, Betsy, Chloe, Tori, Zoey) != number_of_culprits) "
89 " constraint( not(Zoey) , Annie ) and /* Tori */ "
90 " constraint( not(Betsy) , not(Zoey) ) and /* Annie */ "
91 " constraint( Zoey , not(Tori) ) and /* Betsy */ "
92 " constraint( Betsy , Annie ) and /* Chloe */ "
93 " constraint( Chloe , not(Tori) ) ; /* Zoey */ "
95 " if (solution == true) "
97 " var culprit := ''; "
100 " case Annie : culprit := 'Annie'; "
101 " case Betsy : culprit := 'Betsy'; "
102 " case Chloe : culprit := 'Chloe'; "
103 " case Tori : culprit := 'Tori' ; "
104 " case Zoey : culprit := 'Zoey' ; "
107 " println(culprit,' broke the window!'); "
116 expression_t expression;
117 expression.register_symbol_table(symbol_table);
120 parser.compile(logical_deducation_riddle_program,expression);