manpagez: man pages & more
info guile-tut
Home | html | info | man
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.4.3 c_builtins.c

Here is ‘c_builtins.c’:

 
#include <stdio.h>
#include <math.h>

#include <guile/gh.h>

#include "c_builtins.h"

/* this is a factorial routine in C, made to be callable by Scheme */
SCM c_factorial(SCM s_n)
{
  int i;
  unsigned long result = 1, n;

  n = gh_scm2ulong(s_n);

  gh_defer_ints();
  for (i = 1; i <= n; ++i) {
    result = result*i;
  }
  gh_allow_ints();
  return gh_ulong2scm(result);
}

/* a sin routine in C, callable from Scheme.  it is named c_sin() to
   distinguish it from the default Scheme sin function */
SCM c_sin(SCM s_x)
{
  double x = gh_scm2double(s_x);

  return gh_double2scm(sin(x));
}

/* play around with vectors in Guile: this routine creates a vector of
   the given length, initializes it all to zero except element 2 which
   is set to 1.9.  */
SCM vector_test(SCM s_length)
{
  SCM xvec;

  c_length = gh_scm2ulong(s_length);
  printf("requested length for vector: %ld\n", gh_scm2ulong(s_length));

  /* create a vector */
  xvec = gh_make_vector(s_length, gh_double2scm(0.0));
  /* set the second element in it */
  gh_vector_set_x(xvec, gh_int2scm(2), gh_double2scm(1.9));

  return xvec;
}

© manpagez.com 2000-2024
Individual documents may contain additional copyright information.