view functional.rhope @ 95:f4fd8962c385

Cleaned up binary trees benchmark, made memory allocator somewhat configurable at compile time
author Mike Pavone <pavone@retrodev.com>
date Mon, 02 Aug 2010 01:55:56 -0400
parents e73a93fb5de1
children a34a982ecd32
line wrap: on
line source


_Fold[list,index,current,worker:out]
{
	newval <- [worker]Call[current, [list]Index[index], index]
	
	[list]Next[index]
	{
		out <- _Fold[list, ~, newval, worker]
	}{
		out <- Val[newval]
	}
}

Fold[worker,start,list:out]
{
	[list]First
	{
		out <- _Fold[list, ~, start, worker]
	}{
		out <- start
	}
}

_Map[list,worker,cur:out]
{
	val <- [list]Index[cur]
	nlist <- [list]Set[cur, [worker]Call[val, cur]]

	[nlist]Next[cur]
	{
		out <- _Map[nlist, worker, ~]
	}{
		out <- Val[nlist]
	}
}

Map[list,worker:out]
{
	[list]First
	{
		out <- _Map[list,worker,~]
	}{
		out <- list
	}
}

_Find[list,pred,cur:loc,not found]
{
	val <- [list]Index[cur]
	If[[pred]Call[val]]
	{
		loc <- cur
	}{
		,not found <- [list]Next[cur]
		{ loc,not found <- _Find[list,pred,~] }
	}
}

Find[list,pred:loc,not found]
{
	,not found <- [list]First
	{
		loc,not found <- _Find[list,pred,~]
	}
}

_Filter[list,pred,cur,dest:out]
{
	val <- [list]Index[cur]
	If[[pred]Call[val,cur]]
	{
		ndest <- [dest]Append[val]
	}{
		ndest <- dest
	}
	[list]Next[cur]
	{
		out <- _Filter[list,pred,~,ndest]
	}{
		out <- Val[ndest]
	}
}

Filter[list,pred:out]
{
	[list]First
	{
		out <- _Filter[list,pred,~, List[]]
	}{
		out <- list
	}
}