Login
7 branches 0 tags
Ben (RPi4) Added [cbrt] operation 3d2d323 4 years ago 209 Commits
nujel / stdlib / math.nuj
[def PI 3.14159]
[def π  3.14159]

[defmacro ++ [i]
          "Increment I by 1 and store the result in I"
          `[set! ~i [+ 1 ~i]]
]

[defmacro -- [i]
          "Decrement I by 1 and store the result in I"
          `[set! ~i [+ -1 ~i]]
]

[defun +x [α]
       "Return a function that adds α to it's argument, useful for mapping"
       [λ [β] [+ α β]]
]

[defun >> [val amount]
       "Shifts VAL by AMOUNT bits to the right"
       [ash val [- amount]]
]

[def min [let*
        [def iter [λ [a l]
                [cond [[nil? l] a]
                      [[< a [car l]] [iter a [cdr l]]]
                      [#t [iter [car l] [cdr l]]]
                ]
        ]]

        [λ [...l]
                "Returns the minimum value of its arguments"
                [cond [[nil? ...l] 0]
                      [[nil? [cdr ...l]] [car ...l]]
                      [#t [iter [car ...l] [cdr ...l]]]
                ]
        ]
]]

[def max [let*
        [def iter [λ [a l]
                [cond [[nil? l] a]
                      [[> a [car l]] [iter a [cdr l]]]
                      [#t [iter [car l] [cdr l]]]
                ]
        ]]

        [λ [...l]
                "Returns the maximum value of its arguments"
                [cond [[nil? ...l] 0]
                      [[nil? [cdr ...l]] [car ...l]]
                      [#t [iter [car ...l] [cdr ...l]]]
                ]
        ]
]]

[defun fib [i]
           "Terribly inefficient, but, useful for testing the GC"
           [if [< i 2]
               i
               [+ [fib [- i 2]] [fib [- i 1]]]]
]