mirror of
				https://github.com/thunderbrewhq/thunderbrew
				synced 2025-10-28 14:56:06 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			33 lines
		
	
	
		
			707 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			707 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- function closures are powerful
 | |
| 
 | |
| -- traditional fixed-point operator from functional programming
 | |
| Y = function (g)
 | |
|       local a = function (f) return f(f) end
 | |
|       return a(function (f)
 | |
|                  return g(function (x)
 | |
|                              local c=f(f)
 | |
|                              return c(x)
 | |
|                            end)
 | |
|                end)
 | |
| end
 | |
| 
 | |
| 
 | |
| -- factorial without recursion
 | |
| F = function (f)
 | |
|       return function (n)
 | |
|                if n == 0 then return 1
 | |
|                else return n*f(n-1) end
 | |
|              end
 | |
|     end
 | |
| 
 | |
| factorial = Y(F)   -- factorial is the fixed point of F
 | |
| 
 | |
| -- now test it
 | |
| function test(x)
 | |
| 	io.write(x,"! = ",factorial(x),"\n")
 | |
| end
 | |
| 
 | |
| for n=0,16 do
 | |
| 	test(n)
 | |
| end
 | 
