SCHEME: (import (chicken foreign)) ;; Importing from Ada (define hello-in-ada (foreign-safe-lambda void "hello_ada" int)) ;; Callable from the outside, returns an int (define-external (hello_scheme (c-string message)) int ( (print "Hello from Scheme! The message was: \n") (print message) (print "The message length was:" (string-length message)) (string-length message) ) ) (hello-in-ada 1337) ADA: SPECIFICATION FILE (HEADER): with Ada.Text_IO; use Ada.Text_IO; with Interfaces.C; use Interfaces.C; package Scheme_Test is procedure Hello_Ada(Num : Int) with Export => True, Convention => C, External_Name => "hello_ada"; function Hello_Scheme (String : Char_Array) return Int with Import => True, Convention => C, External_Name => "hello_scheme"; end Scheme_Test; BODY THAT IS GETTING EXECUTED: package body Scheme_Test is procedure Hello_Ada(Num : Int) is Len : Int; begin Put_Line ("Hello Scheme, from Ada."); Put_Line ("The number passed is: " & Num'Image); -- Can we call Scheme directly here? Len := Hello_Scheme("How is the weather in your interpreter?"); Put_Line("String length sent to Scheme, as computed by Scheme is: " & Len'Image); end Hello_Ada; end Scheme_Test;