Hello from Spain. I installed Guile 2.0.3 and it works well. I've tried Tortoise tutorial: http://www.gnu.org/software/guile/docs/guile-tut/tutorial.html and it compiled well, Gnuplot window pops up, but (tortoise-move 3) doesn't draw. The source code is: /* Simple backend for a Logo like tortoise drawer. */ #include #include #include #include #include static const int WIDTH = 10; static const int HEIGHT = 10; static FILE* global_output; static double x = 0.0; static double y = 0.0; static double direction = 0.0; static int pendown = 1; static FILE* start_gnuplot (); static void draw_line (FILE* output, double x1, double y1, double x2, double y2); static SCM tortoise_reset (); static SCM tortoise_pendown (); static SCM tortoise_penup (); static SCM tortoise_turn (SCM degrees); static SCM tortoise_move (SCM length); static void* register_functions (void* data); static FILE* start_gnuplot () { FILE* output; int pipes[2]; pid_t pid; pipe (pipes); pid = fork (); if (!pid)http://www.gnu.org/software/guile/docs/guile-tut/tutorial.html { dup2 (pipes[0], STDIN_FILENO); execlp ("gnuplot", NULL); return; /* Not reached. */ } output = fdopen (pipes[1], "w"); fprintf (output, "set multiplot\n"); fprintf (output, "set parametric\n"); fprintf (output, "set xrange [-%d:%d]\n", WIDTH, WIDTH); fprintf (output, "set yrange [-%d:%d]\n", HEIGHT, HEIGHT); fprintf (output, "set size ratio -1\n"); fprintf (output, "unset xtics\n"); fprintf (output, "unset ytics\n"); fflush (output); return output; } int main (int argc, char* argv[]) { global_output = start_gnuplot (); scm_with_guile (®ister_functions, NULL); scm_shell (argc, argv); return EXIT_SUCCESS; } static void draw_line (FILE* output, double x1, double y1, double x2, double y2) { fprintf (output, "plot [0:1] %f + %f * t, %f + %f * t notitle\n", x1, x2 - x1, y1, y2 - y1); fflush (output); } static SCM tortoise_reset () { x = y = 0.0; direction = 0.0; pendown = 1; fprintf (global_output, "clear\n"); fflush (global_output); return SCM_UNSPECIFIED; } static SCM tortoise_pendown () { SCM result = scm_from_bool (pendown); pendown = 1; return result; } static SCM tortoise_penup () { SCM result = scm_from_bool (pendown); pendown = 0; return result; } static SCM tortoise_turn (SCM degrees) { const double value = scm_to_double (degrees); direction += M_PI / 180.0 * value; return scm_from_double (direction * 180.0 / M_PI); } static SCM tortoise_move (SCM length) { const double value = scm_to_double (length); double newX, newY; newX = x + value * cos (direction); newY = y + value * sin (direction); if (pendown) draw_line (global_output, x, y, newX, newY); x = newX; y = newY; return scm_list_2 (scm_from_double (x), scm_from_double (y)); } static void* register_functions (void* data) { scm_c_define_gsubr ("tortoise-reset", 0, 0, 0, &tortoise_reset); scm_c_define_gsubr ("tortoise-penup", 0, 0, 0, &tortoise_penup); scm_c_define_gsubr ("tortoise-pendown", 0, 0, 0, &tortoise_pendown); scm_c_define_gsubr ("tortoise-turn", 1, 0, 0, &tortoise_turn); scm_c_define_gsubr ("tortoise-move", 1, 0, 0, &tortoise_move); return NULL; } What's wrong ?