| 
									
										
										
										
											2010-04-27 10:51:00 -04:00
										 |  |  | ! Copyright (C) 2009, 2010 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: assocs math.order sequences ;
 | 
					
						
							|  |  |  | IN: compiler.cfg.comparisons | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-03 21:32:05 -04:00
										 |  |  | SYMBOL: +unordered+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOLS:
 | 
					
						
							|  |  |  |     cc<  cc<=  cc=  cc>  cc>=  cc<>  cc<>=  | 
					
						
							|  |  |  |     cc/< cc/<= cc/= cc/> cc/>= cc/<> cc/<>= ;
 | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-01 16:35:38 -04:00
										 |  |  | SYMBOLS:
 | 
					
						
							| 
									
										
										
										
											2009-10-01 20:53:30 -04:00
										 |  |  |     vcc-all vcc-notall vcc-any vcc-none ;
 | 
					
						
							| 
									
										
										
										
											2009-10-01 16:35:38 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-27 10:51:00 -04:00
										 |  |  | SYMBOLS: cc-o cc/o ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  | : negate-cc ( cc -- cc' )
 | 
					
						
							|  |  |  |     H{ | 
					
						
							| 
									
										
										
										
											2009-09-03 21:32:05 -04:00
										 |  |  |         { cc<    cc/<   } | 
					
						
							|  |  |  |         { cc<=   cc/<=  } | 
					
						
							|  |  |  |         { cc>    cc/>   } | 
					
						
							|  |  |  |         { cc>=   cc/>=  } | 
					
						
							|  |  |  |         { cc=    cc/=   } | 
					
						
							|  |  |  |         { cc<>   cc/<>  } | 
					
						
							|  |  |  |         { cc<>=  cc/<>= } | 
					
						
							|  |  |  |         { cc/<   cc<    }  | 
					
						
							|  |  |  |         { cc/<=  cc<=   } | 
					
						
							|  |  |  |         { cc/>   cc>    } | 
					
						
							|  |  |  |         { cc/>=  cc>=   }  | 
					
						
							|  |  |  |         { cc/=   cc=    }  | 
					
						
							|  |  |  |         { cc/<>  cc<>   }  | 
					
						
							|  |  |  |         { cc/<>= cc<>=  } | 
					
						
							| 
									
										
										
										
											2010-04-27 10:51:00 -04:00
										 |  |  |         { cc-o   cc/o   } | 
					
						
							|  |  |  |         { cc/o   cc-o   } | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  |     } at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-01 20:53:30 -04:00
										 |  |  | : negate-vcc ( cc -- cc' )
 | 
					
						
							|  |  |  |     H{ | 
					
						
							|  |  |  |         { vcc-all vcc-notall } | 
					
						
							|  |  |  |         { vcc-any vcc-none } | 
					
						
							|  |  |  |         { vcc-none vcc-any } | 
					
						
							|  |  |  |         { vcc-notall vcc-all } | 
					
						
							|  |  |  |     } at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  | : swap-cc ( cc -- cc' )
 | 
					
						
							|  |  |  |     H{ | 
					
						
							| 
									
										
										
										
											2009-09-03 21:32:05 -04:00
										 |  |  |         { cc<   cc> } | 
					
						
							|  |  |  |         { cc<=  cc>= } | 
					
						
							|  |  |  |         { cc>   cc< } | 
					
						
							|  |  |  |         { cc>=  cc<= } | 
					
						
							|  |  |  |         { cc=   cc= } | 
					
						
							|  |  |  |         { cc<>  cc<> } | 
					
						
							|  |  |  |         { cc<>= cc<>= } | 
					
						
							|  |  |  |         { cc/<   cc/> } | 
					
						
							|  |  |  |         { cc/<=  cc/>= } | 
					
						
							|  |  |  |         { cc/>   cc/< } | 
					
						
							|  |  |  |         { cc/>=  cc/<= } | 
					
						
							|  |  |  |         { cc/=   cc/= } | 
					
						
							|  |  |  |         { cc/<>  cc/<> } | 
					
						
							|  |  |  |         { cc/<>= cc/<>= } | 
					
						
							|  |  |  |     } at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : order-cc ( cc -- cc' )
 | 
					
						
							|  |  |  |     H{ | 
					
						
							|  |  |  |         { cc<    cc<  } | 
					
						
							|  |  |  |         { cc<=   cc<= } | 
					
						
							|  |  |  |         { cc>    cc>  } | 
					
						
							|  |  |  |         { cc>=   cc>= } | 
					
						
							|  |  |  |         { cc=    cc=  } | 
					
						
							|  |  |  |         { cc<>   cc/= } | 
					
						
							|  |  |  |         { cc<>=  t    } | 
					
						
							|  |  |  |         { cc/<   cc>= }  | 
					
						
							|  |  |  |         { cc/<=  cc>  } | 
					
						
							|  |  |  |         { cc/>   cc<= } | 
					
						
							|  |  |  |         { cc/>=  cc<  }  | 
					
						
							|  |  |  |         { cc/=   cc/= }  | 
					
						
							|  |  |  |         { cc/<>  cc=  }  | 
					
						
							|  |  |  |         { cc/<>= f    } | 
					
						
							| 
									
										
										
										
											2009-07-13 15:42:52 -04:00
										 |  |  |     } at ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : evaluate-cc ( result cc -- ? )
 | 
					
						
							|  |  |  |     H{ | 
					
						
							| 
									
										
										
										
											2009-09-03 21:32:05 -04:00
										 |  |  |         { cc<    { +lt+                       } } | 
					
						
							|  |  |  |         { cc<=   { +lt+ +eq+                  } } | 
					
						
							|  |  |  |         { cc=    {      +eq+                  } } | 
					
						
							|  |  |  |         { cc>=   {      +eq+ +gt+             } } | 
					
						
							|  |  |  |         { cc>    {           +gt+             } } | 
					
						
							|  |  |  |         { cc<>   { +lt+      +gt+             } } | 
					
						
							|  |  |  |         { cc<>=  { +lt+ +eq+ +gt+             } } | 
					
						
							|  |  |  |         { cc/<   {      +eq+ +gt+ +unordered+ } } | 
					
						
							|  |  |  |         { cc/<=  {           +gt+ +unordered+ } } | 
					
						
							|  |  |  |         { cc/=   { +lt+      +gt+ +unordered+ } } | 
					
						
							|  |  |  |         { cc/>=  { +lt+           +unordered+ } } | 
					
						
							|  |  |  |         { cc/>   { +lt+ +eq+      +unordered+ } } | 
					
						
							|  |  |  |         { cc/<>  {      +eq+      +unordered+ } } | 
					
						
							|  |  |  |         { cc/<>= {                +unordered+ } } | 
					
						
							| 
									
										
										
										
											2009-10-28 16:02:00 -04:00
										 |  |  |     } at member-eq? ;
 | 
					
						
							| 
									
										
										
										
											2009-09-03 21:32:05 -04:00
										 |  |  | 
 |