;;;; Cyclone Scheme ;;;; https://github.com/justinethier/cyclone ;;;; ;;;; Copyright (c) 2014-2016, Justin Ethier ;;;; All rights reserved. ;;;; ;;;; This module contains the complex library from r7rs. ;;;; (define-library (scheme complex) (export angle imag-part magnitude make-polar make-rectangular real-part ) (inline real-part imag-part) (import (scheme base) (scheme inexact)) (begin (define (real-part x) (if (complex? x) (%real-part x) x)) (define (imag-part x) (if (complex? x) (%imag-part x) 0)) (define (magnitude z) (sqrt (+ (* (real-part z) (real-part z)) (* (imag-part z) (imag-part z))))) (define (angle z) (atan (imag-part z) (real-part z))) (define (make-polar r phi) (make-rectangular (* r (cos phi)) (* r (sin phi)))) (define (make-rectangular x y) (%make-rect x y)) (define-c %real-part "(void *data, int argc, closure _, object k, object z)" " make_double(d, creal(complex_num_value(z))); return_closcall1(data, k, &d); ") (define-c %imag-part "(void *data, int argc, closure _, object k, object z)" " make_double(d, cimag(complex_num_value(z))); return_closcall1(data, k, &d); ") (define-c %make-rect "(void *data, int argc, closure _, object k, object r, object i)" " Cyc_check_num(data, r); Cyc_check_num(data, i); Cyc_make_rectangular(data, k, r, i); ") ))