egison-3.6.1: lib/math/common/functions.egi
;;;;;
;;;;;
;;;;; Mathematical Functions
;;;;;
;;;;;
(define $exp
(lambda [$x]
(if (float? x)
(b.exp x)
(if (term? x)
(match x term-expr
{[,0 1]
[,1 e]
[<mult $a ,(* i pi)> (** -1 a)]
[_ (`exp x)]})
(`exp x)))))
(define $log
(lambda [$x]
(if (float? x)
(b.log x)
(match x math-expr
{[,1 0]
[,e 1]
[_ (`log x)]}))))
(define $cos
(lambda [$x]
(if (float? x)
(b.cos x)
(match x math-expr
{[,0 1]
[<term $n <cons ,π <nil>>> (** -1 (abs n))]
[<div <mult _ ,π> ,2> 0]
[_ (`cos x)]}))))
(define $sin
(lambda [$x]
(if (float? x)
(b.sin x)
(match x math-expr
{[,0 0]
[<mult _ ,π> 0]
[<div <mult $n ,π> ,2> (** -1 (/ (- (abs n) 1) 2))]
[_ (`sin x)]}))))
(define $tan
(lambda [$x]
(if (float? x)
(b.tan x)
(match x math-expr
{[,0 0]
[_ (`tan x)]}))))
(define $cosh
(lambda [$x]
(if (float? x)
(b.cosh x)
(match x math-expr
{[,0 1]
[_ (`cosh x)]}))))
(define $sinh
(lambda [$x]
(if (float? x)
(b.sinh x)
(match x math-expr
{[,0 0]
[_ (`sinh x)]}))))
(define $tanh
(lambda [$x]
(if (float? x)
(b.tanh x)
(match x math-expr
{[,0 0]
[_ (`tanh x)]}))))
(define $sinc
(lambda [$x]
(if (float? x)
(if (eq? x 0.0)
1.0
(/ (b.sin x) x))
(match x math-expr
{[,0 1]
[_ (/ (sin x) x)]}))))
(define $sigmoid
(lambda [$z]
(/ 1 (+ 1 (exp (* -1 z))))))
(define $kronecker-delta
(cambda $js
(if (all (eq? $ (car js)) (cdr js)) 1 0)))
(define $euler-totient-function
(lambda [$n]
(* n
(product (map (lambda [$p] (- 1 (/ 1 p)))
(unique (p-f n)))))))