using System;
interface ScalarProduct< A> {
int scalarProduct( A second) ;
}
class Nil : ScalarProduct< Nil> {
public Nil( ) { }
public int scalarProduct( Nil second) {
return 0 ;
}
}
class Cons< A> : ScalarProduct< Cons< A>> where A : ScalarProduct< A> {
public int value;
public A tail;
public Cons( int _value, A _tail) {
value = _value;
tail = _tail;
}
public int scalarProduct( Cons< A> second) {
return value * second.value + tail.scalarProduct ( second.tail ) ;
}
}
class _Test{
public static int main( int n) {
return _main( n, 0 , new Nil( ) , new Nil( ) ) ;
}
public static int _main< A> ( int n, int i, A first, A second) where A : ScalarProduct< A> {
if ( n == 0 ) {
return first.scalarProduct ( second) ;
} else {
return _main( n- 1 , i+ 1 , new Cons< Cons< A>> ( i, new Cons< A> ( 2 * i+ 1 , new Nil( ) ) ) , new Cons< Cons< A>> ( i* i, new Cons< A> ( i, second) ) ) ; // Works
//return _main(n-1, i+1, new Cons<A>(2*i+1,first), new Cons<A>(i*i, second)); // Works
//return _main(n-1, i+1, first, new Cons<A>(i*i, second)); // Doesn't work
}
}
}
public class Test{
public static void Main( ) {
Console.Write ( "Enter a number: " ) ;
int val = Convert.ToInt32 ( Console.ReadLine ( ) ) ;
Console.WriteLine ( _Test.main ( val) ) ;
}
}
dXNpbmcgU3lzdGVtOwppbnRlcmZhY2UgU2NhbGFyUHJvZHVjdDxBPiB7CiAgaW50IHNjYWxhclByb2R1Y3QoQSBzZWNvbmQpOwp9CmNsYXNzIE5pbCA6IFNjYWxhclByb2R1Y3Q8TmlsPiB7CiAgcHVibGljIE5pbCgpe30KICBwdWJsaWMgaW50IHNjYWxhclByb2R1Y3QoTmlsIHNlY29uZCkgewogICAgcmV0dXJuIDA7CiAgfQp9CmNsYXNzIENvbnM8QT4gOiBTY2FsYXJQcm9kdWN0PENvbnM8QT4+IHdoZXJlIEEgOiBTY2FsYXJQcm9kdWN0PEE+IHsKICBwdWJsaWMgaW50IHZhbHVlOwogIHB1YmxpYyBBIHRhaWw7CiAgcHVibGljIENvbnMoaW50IF92YWx1ZSwgQSBfdGFpbCkgewogICAgdmFsdWUgPSBfdmFsdWU7CiAgICB0YWlsID0gX3RhaWw7CiAgfQogIHB1YmxpYyBpbnQgc2NhbGFyUHJvZHVjdChDb25zPEE+IHNlY29uZCl7CiAgICByZXR1cm4gdmFsdWUgKiBzZWNvbmQudmFsdWUgKyB0YWlsLnNjYWxhclByb2R1Y3Qoc2Vjb25kLnRhaWwpOwogIH0KfQpjbGFzcyBfVGVzdHsKICBwdWJsaWMgc3RhdGljIGludCBtYWluKGludCBuKXsKICAgIHJldHVybiBfbWFpbihuLCAwLCBuZXcgTmlsKCksIG5ldyBOaWwoKSk7CiAgfQogIHB1YmxpYyBzdGF0aWMgaW50IF9tYWluPEE+KGludCBuLCBpbnQgaSwgQSBmaXJzdCwgQSBzZWNvbmQpIHdoZXJlIEEgOiBTY2FsYXJQcm9kdWN0PEE+IHsKICAgIGlmIChuID09IDApIHsKICAgICAgcmV0dXJuIGZpcnN0LnNjYWxhclByb2R1Y3Qoc2Vjb25kKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfbWFpbihuLTEsIGkrMSwgbmV3IENvbnM8Q29uczxBPj4oaSwgbmV3IENvbnM8QT4oMippKzEsIG5ldyBOaWwoKSkpLCBuZXcgQ29uczxDb25zPEE+PihpKmksIG5ldyBDb25zPEE+KGksIHNlY29uZCkpKTsgLy8gV29ya3MKICAgICAgLy9yZXR1cm4gX21haW4obi0xLCBpKzEsIG5ldyBDb25zPEE+KDIqaSsxLGZpcnN0KSwgbmV3IENvbnM8QT4oaSppLCBzZWNvbmQpKTsgLy8gV29ya3MKICAgICAgLy9yZXR1cm4gX21haW4obi0xLCBpKzEsIGZpcnN0LCBuZXcgQ29uczxBPihpKmksIHNlY29uZCkpOyAvLyBEb2Vzbid0IHdvcmsKICAgIH0KICB9Cn0KcHVibGljIGNsYXNzIFRlc3R7CiAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKXsKICAgIENvbnNvbGUuV3JpdGUoIkVudGVyIGEgbnVtYmVyOiAiKTsKICAgIGludCB2YWwgPSBDb252ZXJ0LlRvSW50MzIoQ29uc29sZS5SZWFkTGluZSgpKTsKICAgIENvbnNvbGUuV3JpdGVMaW5lKF9UZXN0Lm1haW4odmFsKSk7CiAgfQp9
compilation info
prog.cs(30,51): error CS1502: The best overloaded method match for `Cons<A>.Cons(int, A)' has some invalid arguments
prog.cs(14,10): (Location of the symbol related to previous error)
prog.cs(30,70): error CS1503: Argument `#2' cannot convert `Nil' expression to type `A'
Compilation failed: 2 error(s), 0 warnings
stdout