?

Log in

No account? Create an account
Сижу в четвёртой главе Grokking Nemerle. Пока не очень понял, как… - Valse oubliée [entries|archive|friends|userinfo]
aruslan

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
[ delicious | aruslan's delicious ]

Links
[Links:| Tags Profile Friends FG1 PP gamedev XNA FF Entries Comments Memories ]

[Feb. 12th, 2006|09:45 pm]
aruslan
[Tags|]

Сижу в четвёртой главе 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)

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

Comments:
From: eandreev
2006-02-12 07:03 pm (UTC)
А что за штука такая, этот Grokking Nemerle?
(Reply) (Thread)
[User Picture]From: aruslan
2006-02-12 07:37 pm (UTC)
Это учебник по Nemerle для чайников.
А Nemerle - это язык, который скоро станет очень модным.
А вот тут - рассказ про его макросы.
(Reply) (Parent) (Thread)
[User Picture]From: justy_tylor
2006-02-12 07:37 pm (UTC)
Можно поинтересоваться, а что вызвало потребность грокнуть? Что-то никаких особых идей за этим миксом Java(C#)/Pascal/OCaml не наблюдается. Пролистать доки и сложить в архив - имхо, оптимально.
(Reply) (Thread)
[User Picture]From: aruslan
2006-02-12 07:38 pm (UTC)
Макросы.
(Reply) (Parent) (Thread)
[User Picture]From: justy_tylor
2006-02-12 08:03 pm (UTC)
Хм, заценил. Сам когда-то рисовал похожие реализации макросов, возмущаясь лисповской идеей обозначать параметры по месту использования. Подстановки, ветвления, [if] - для preprocessing time, (if) - для compile time... Когда времени было много и делать нехрен. -_-

Эту часть действительно стоит посмотреть более детально. На первый взгляд макросы Nemerle напоминают не только TH/camlp4, но и одновременно что-то вроде opencxx. Есть на подумать.
(Reply) (Parent) (Thread)
[User Picture]From: aruslan
2006-02-12 08:17 pm (UTC)
На самом деле - еще и scala.
Причём camlp4 + scala, даже как-то так.
Впрочем, ничего из перечисленного я внимательно не смотрел, так что disclaimer.
(Reply) (Parent) (Thread)
[User Picture]From: octavarium
2006-02-12 10:44 pm (UTC)
ничего не понял.
зачем это нужно?
(Reply) (Thread)
[User Picture]From: aruslan
2006-02-12 11:08 pm (UTC)
"это" - это что? :)
Немерле или передача функции ей же самой?
Если передача функции - интересно понять, как оно работает со сложными типами.
Скажем, с рекурсивными.
И как сделать генераторы и комбинаторы.
И как сделать pattern matching на сложных структурах.
(Reply) (Parent) (Thread)
[User Picture]From: _gvozdoder_
2006-02-13 04:29 am (UTC)
Мда... сделать полноценную подсветку синтаксиса для такого языка будет крайне тяжело. Впрочем, как и refactoring browser.
(Reply) (Thread)
From: hash_map
2006-02-13 05:01 pm (UTC)
Макросы как в лиспе! Это, наверно, язык будущего.
Спасибо!
(Reply) (Thread)