aruslan: (Default)
[personal profile] aruslan
Сижу в четвёртой главе Grokking Nemerle.

Пока не очень понял, как делать функцию, принимающую саму себя в качества аргумента.

То есть типа такого:
module test1
{
	public Main() : void
	{
		def test(cc) // cc - это test и есть.
		{
			()
		}
		test(test);
		
		/*
		def fib_(last1,last2,cur,cc)
		{
			if(cur<=0)
				last2
			else
				cc(last2,last2+last1,cur-1,cc)
		}
		def t = fib_(0,1,5,fib_);
		*/
	}
}


Очевидным образом тип - циклический.
Вывести его невозможно, явно указать - тоже.

Видимо, так просто нельзя, и правильнее использовать порождающие функции.

Буду пробовать.


Update: Можно, конечно, вот так:
	def cc_cast = cc :> int * int * int * object -> int;
	cc_cast(last2,last2+last1,cur-1,cc)

Но не с первого же дня такие злобные хаки...

Date: Feb. 12th, 2006 22:44 (UTC)
From: [identity profile] octavarium.livejournal.com
ничего не понял.
зачем это нужно?

Date: Feb. 12th, 2006 23:08 (UTC)
From: [identity profile] aruslan.livejournal.com
"это" - это что? :)
Немерле или передача функции ей же самой?
Если передача функции - интересно понять, как оно работает со сложными типами.
Скажем, с рекурсивными.
И как сделать генераторы и комбинаторы.
И как сделать pattern matching на сложных структурах.

Profile

aruslan: (Default)
aruslan

January 2014

S M T W T F S
   1234
56789 1011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 16th, 2026 07:46
Powered by Dreamwidth Studios