Index: libcfa/src/rational.cfa
===================================================================
--- libcfa/src/rational.cfa	(revision 8a30423a0b5ccbd381d8c3ea76663ae49568aa38)
+++ libcfa/src/rational.cfa	(revision 0087e0e3e79115b045d5d67778e9d3c9a5ffc766)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Dec 23 22:56:49 2018
-// Update Count     : 170
+// Last Modified On : Wed Mar 27 08:45:59 2019
+// Update Count     : 180
 //
 
@@ -54,6 +54,5 @@
 	void ?{}( Rational(RationalImpl) & r, RationalImpl n, RationalImpl d ) {
 		RationalImpl t = simplify( n, d );				// simplify
-		r.numerator = n / t;
-		r.denominator = d / t;
+		r.[numerator, denominator] = [n / t, d / t];
 	} // rational
 
@@ -78,6 +77,5 @@
 		RationalImpl prev = r.numerator;
 		RationalImpl t = gcd( abs( n ), r.denominator ); // simplify
-		r.numerator = n / t;
-		r.denominator = r.denominator / t;
+		r.[numerator, denominator] = [n / t, r.denominator / t];
 		return prev;
 	} // numerator
@@ -86,6 +84,5 @@
 		RationalImpl prev = r.denominator;
 		RationalImpl t = simplify( r.numerator, d );	// simplify
-		r.numerator = r.numerator / t;
-		r.denominator = d / t;
+		r.[numerator, denominator] = [r.numerator / t, d / t];
 		return prev;
 	} // denominator
@@ -120,20 +117,16 @@
 
 	Rational(RationalImpl) +?( Rational(RationalImpl) r ) {
-		Rational(RationalImpl) t = { r.numerator, r.denominator };
-		return t;
+		return (Rational(RationalImpl)){ r.numerator, r.denominator };
 	} // +?
 
 	Rational(RationalImpl) -?( Rational(RationalImpl) r ) {
-		Rational(RationalImpl) t = { -r.numerator, r.denominator };
-		return t;
+		return (Rational(RationalImpl)){ -r.numerator, r.denominator };
 	} // -?
 
 	Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 		if ( l.denominator == r.denominator ) {			// special case
-			Rational(RationalImpl) t = { l.numerator + r.numerator, l.denominator };
-			return t;
+			return (Rational(RationalImpl)){ l.numerator + r.numerator, l.denominator };
 		} else {
-			Rational(RationalImpl) t = { l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
-			return t;
+			return (Rational(RationalImpl)){ l.numerator * r.denominator + l.denominator * r.numerator, l.denominator * r.denominator };
 		} // if
 	} // ?+?
@@ -141,24 +134,19 @@
 	Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 		if ( l.denominator == r.denominator ) {			// special case
-			Rational(RationalImpl) t = { l.numerator - r.numerator, l.denominator };
-			return t;
+			return (Rational(RationalImpl)){ l.numerator - r.numerator, l.denominator };
 		} else {
-			Rational(RationalImpl) t = { l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
-			return t;
+			return (Rational(RationalImpl)){ l.numerator * r.denominator - l.denominator * r.numerator, l.denominator * r.denominator };
 		} // if
 	} // ?-?
 
 	Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
-		Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator };
-		return t;
+		return (Rational(RationalImpl)){ l.numerator * r.numerator, l.denominator * r.denominator };
 	} // ?*?
 
 	Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) {
 		if ( r.numerator < (RationalImpl){0} ) {
-			r.numerator = -r.numerator;
-			r.denominator = -r.denominator;
+			r.[numerator, denominator] = [-r.numerator, -r.denominator];
 		} // if
-		Rational(RationalImpl) t = { l.numerator * r.denominator, l.denominator * r.numerator };
-		return t;
+		return (Rational(RationalImpl)){ l.numerator * r.denominator, l.denominator * r.numerator };
 	} // ?/?
 
@@ -167,7 +155,6 @@
 	forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
 	istype & ?|?( istype & is, Rational(RationalImpl) & r ) {
-		RationalImpl t;
 		is | r.numerator | r.denominator;
-		t = simplify( r.numerator, r.denominator );
+		RationalImpl t = simplify( r.numerator, r.denominator );
 		r.numerator /= t;
 		r.denominator /= t;
@@ -185,4 +172,13 @@
 	} // distribution
 } // distribution
+
+forall( otype RationalImpl | arithmetic( RationalImpl ) | { RationalImpl ?\?( RationalImpl, unsigned long ); } )
+Rational(RationalImpl) ?\?( Rational(RationalImpl) x, long int y ) {
+	if ( y < 0 ) {
+		return (Rational(RationalImpl)){ x.denominator \ -y, x.numerator \ -y };
+	} else {
+		return (Rational(RationalImpl)){ x.numerator \ y, x.denominator \ y };
+	} // if
+}
 
 // conversion
Index: libcfa/src/rational.hfa
===================================================================
--- libcfa/src/rational.hfa	(revision 8a30423a0b5ccbd381d8c3ea76663ae49568aa38)
+++ libcfa/src/rational.hfa	(revision 0087e0e3e79115b045d5d67778e9d3c9a5ffc766)
@@ -12,6 +12,6 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Dec  4 23:07:46 2018
-// Update Count     : 106
+// Last Modified On : Tue Mar 26 23:16:10 2019
+// Update Count     : 109
 //
 
@@ -98,4 +98,7 @@
 } // distribution
 
+forall( otype RationalImpl | arithmetic( RationalImpl ) |{RationalImpl ?\?( RationalImpl, unsigned long );} )
+Rational(RationalImpl) ?\?( Rational(RationalImpl) x, long int y );
+
 // conversion
 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )
Index: tests/rational.cfa
===================================================================
--- tests/rational.cfa	(revision 8a30423a0b5ccbd381d8c3ea76663ae49568aa38)
+++ tests/rational.cfa	(revision 0087e0e3e79115b045d5d67778e9d3c9a5ffc766)
@@ -10,6 +10,6 @@
 // Created On       : Mon Mar 28 08:43:12 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 19 08:30:28 2019
-// Update Count     : 73
+// Last Modified On : Wed Mar 27 07:37:17 2019
+// Update Count     : 80
 //
 
@@ -54,4 +54,6 @@
 	sout | a * b;
 	sout | a / b;
+//	sout | a \ 2 | b \ 2; // FIX ME
+//	sout | a \ -2 | b \ -2;
 
 	sout | "conversion";
