#!./wisp-multiline.sh
; !#

; Mathematical magic: Always get one.
; 
; Via http://www.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseQuestionsnode18.html
; (actually for learning fortran)
; 
; this is the wisp scheme version which I want to compare with the fortran version.

use-modules 
  ice-9 format
  ice-9 futures
  ice-9 threads

define : magic-threaded mutex futures integer
  ; this can cause unordered output. It’s fun anyway : 
  set! futures : append futures : list : future : with-mutex mutex : format #t "~30r\n" integer
  if : not : = integer 1
    if : even? integer
      magic-threaded mutex futures : / integer 2
      magic-threaded mutex futures : truncate : + 1 : / integer 3 
    for-each touch futures

define : magic integer
  magic-threaded
    make-mutex
    list
    . integer

define : magic-simple integer
  format #t "~30r\n" integer
  if : not : = integer 1
    if : even? integer
      magic-simple : / integer 2
      magic-simple : truncate : + 1 : / integer 3 

display ";;; multithreaded magic ;;;\n"
magic 456189456156456196152615
display ";;; simple magic ;;;\n"
magic-simple 456189456156456196152615