summaryrefslogtreecommitdiff
path: root/Examples/mzscheme
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2019-02-09 14:43:27 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2019-02-09 14:44:33 +0000
commit30d0c16ac0935fdc343c1e646ff6cae3bf03bcd8 (patch)
tree10975e63a965bda04a745eb4ee0136e8ebf6d594 /Examples/mzscheme
parentde23343739a79331883cfd2bede0afc0504657c0 (diff)
downloadswig-30d0c16ac0935fdc343c1e646ff6cae3bf03bcd8.tar.gz
Standardise Mzscheme simple example
Changes so that it works the same as other language modules
Diffstat (limited to 'Examples/mzscheme')
-rw-r--r--Examples/mzscheme/simple/README1
-rw-r--r--Examples/mzscheme/simple/example.c30
-rw-r--r--Examples/mzscheme/simple/example.i13
-rw-r--r--Examples/mzscheme/simple/runme.scm39
4 files changed, 37 insertions, 46 deletions
diff --git a/Examples/mzscheme/simple/README b/Examples/mzscheme/simple/README
deleted file mode 100644
index 07e8da069..000000000
--- a/Examples/mzscheme/simple/README
+++ /dev/null
@@ -1 +0,0 @@
-Simple example from users manual.
diff --git a/Examples/mzscheme/simple/example.c b/Examples/mzscheme/simple/example.c
index f2b074781..1c2af789c 100644
--- a/Examples/mzscheme/simple/example.c
+++ b/Examples/mzscheme/simple/example.c
@@ -1,24 +1,18 @@
-/* Simple example from documentation */
/* File : example.c */
-#include <time.h>
+/* A global variable */
+double Foo = 3.0;
-double My_variable = 3.0;
-
-/* Compute factorial of n */
-int fact(int n) {
- if (n <= 1) return 1;
- else return n*fact(n-1);
-}
-
-/* Compute n mod m */
-int my_mod(int n, int m) {
- return (n % m);
+/* Compute the greatest common divisor of positive integers */
+int gcd(int x, int y) {
+ int g;
+ g = y;
+ while (x > 0) {
+ g = x;
+ x = y % x;
+ y = g;
+ }
+ return g;
}
-char *get_time() {
- long ltime;
- time(&ltime);
- return ctime(&ltime);
-}
diff --git a/Examples/mzscheme/simple/example.i b/Examples/mzscheme/simple/example.i
index 5b3e95580..24093b9bf 100644
--- a/Examples/mzscheme/simple/example.i
+++ b/Examples/mzscheme/simple/example.i
@@ -1,16 +1,7 @@
/* File : example.i */
%module example
-%{
-/* Put headers and other declarations here */
-%}
-
-%include typemaps.i
-
-%rename(mod) my_mod;
%inline %{
-extern double My_variable;
-extern int fact(int);
-extern int my_mod(int n, int m);
-extern char *get_time();
+extern int gcd(int x, int y);
+extern double Foo;
%}
diff --git a/Examples/mzscheme/simple/runme.scm b/Examples/mzscheme/simple/runme.scm
index 181635078..88d32d6fc 100644
--- a/Examples/mzscheme/simple/runme.scm
+++ b/Examples/mzscheme/simple/runme.scm
@@ -2,23 +2,30 @@
(load-extension "example.so")
-(display (get-time))
+; Call our gcd() function
-(printf "My-variable = ~a~n" (My-variable))
+(define x 42)
+(define y 105)
+(define g (gcd x y))
+(display "The gcd of ")
+(display x)
+(display " and ")
+(display y)
+(display " is ")
+(display g)
+(newline)
-(let loop ((i 0))
- (when (< i 14) (begin (display i)
- (display " factorial is ")
- (display (fact i))
- (newline)
- (loop (+ i 1)))))
+; Manipulate the Foo global variable
-(let loop ((i 1))
- (when (< i 250)
- (begin
- (let loopi ((j 1))
- (when (< j 250) (begin (My-variable (+ (My-variable) (mod i j)))
- (loopi (+ j 1)))))
- (loop (+ i 1)))))
+; Output its current value
+(display "Foo = ")
+(display (Foo))
+(newline)
-(printf "My-variable = ~a~n" (My-variable))
+; Change its value
+(Foo 3.1415926)
+
+; See if the change took effect
+(display "Foo = ")
+(display (Foo))
+(newline)