Codetree Example: nfib - Spicery/Nutmeg GitHub Wiki
nfib
This is a variation of a Fibonacci function that has the elegant property that (without optimisation) it returns the number of function calls made.
Nutmeg:
def nfib( n ):
if n <= 1:
1
else:
1 + nfib(n - 1) + nfib(n - 2)
end
end
JSON:
{
"comment": "An example function 'nfib'",
"kind": "binding",
"lhs": {
"kind": "id",
"name": "nfib",
"reftype": "var"
},
"rhs": {
"kind": "lambda",
"parameters": {
"kind": "id",
"name": "n",
"reftype": "var"
},
"body": {
"kind": "if",
"test": {
"kind": "syscall",
"name": "<=",
"arguments": {
"kind": "seq",
"body": [
{
"kind": "id",
"name": "n",
"reftype": "get"
},
{
"kind": "int",
"value": "1"
}
]
}
},
"then": {
"kind": "int",
"value": "1"
},
"else": {
"kind": "syscall",
"name": "+",
"arguments": {
"kind": "seq",
"body": [
{
"kind": "int",
"value": "1"
},
{
"kind": "call",
"function": {
"kind": "id",
"name": "nfib",
"reftype": "get"
},
"arguments": {
"kind": "seq",
"body": [
{
"kind": "syscall",
"name": "-",
"arguments": {
"kind": "seq",
"body": [
{
"kind": "id",
"name": "n",
"reftype": "get"
},
{
"kind": "int",
"value": "1"
}
]
}
}
]
}
},
{
"kind": "call",
"function": {
"kind": "id",
"name": "nfib",
"reftype": "get"
},
"arguments": {
"kind": "syscall",
"name": "-",
"arguments": {
"kind": "seq",
"body": [
{
"kind": "id",
"name": "n",
"reftype": "get"
},
{
"kind": "int",
"value": "2"
}
]
}
}
}
]
}
}
}
}
}