# conditional rule and addressing functions

Discussion created by pledgeshield on Nov 1, 2013
Latest reply on Dec 9, 2013 by MBuehler-esristaff
Hello guys,

I have been reading your forum for a couple of weeks now. In my opinion City Engine is a great peace of software, although CGA  gives me hard time.
I watched/red most of the tutorials and I read the help all the time but It seems my way of thinking is a bit different.

My first question is about conditional rule. How do I nest conditions properly?

```nRange = 4
attr temp = 0

Lot --> Loop(nRange)

Loop(nRange) -->
case nRange >= temp: print("nRange = " + nRange) Loop(nRange - 1)
case nRange == 3: print("INNER CASE")
else: print("END OF LOOP")
```

What I want to achieve is to print:

nRange = 4
nRange = 3
INNERCASE
nRange = 2
nRange = 1
nRange = 0
END OF LOOP

But it seems the cycle never gets within the second case, so instead I get:

nRange = 4
nRange = 3
nRange = 2
nRange = 1
nRange = 0
END OF LOOP

Second question is about how to properly address a function?
What I want to achieve is the following:

```const listOfBuildings =  //what is the purpose of constant in CGA?
"building_01.obj;building_02.obj;building_03.obj;building_04.obj;"
nRange = (listSize(listOfBuildings) - 1)
buildingList = ""/empty string to fill with chosen buildings
const temp = 0

#FUNCTION
testFunction(nRange) = //not sure about the attribute here
#RULE
Loop(nRange) -->
case nRange >= temp: Loop(nRange - 1)
case geometry.isRectangular(5)
&& ((scope.sx > assetInfo(listItem(listOfBuildings, nRange), sx)
&& scope.sz > assetInfo(listItem(listOfBuildings, nRange), sz)))
|| ((scope.sx > assetInfo(listItem(listOfBuildings, nRange), sz)
&& scope.sz > assetInfo(listItem(listOfBuildings, nRange), sx))):
testFunctionn(nRange)                  //this gives me error? what should I put here ???