JScheme is a SchemeLanguage interpreter written in JavaLanguage, and running on the JavaVirtualMachine.
http://jscheme.sourceforge.net/
Formerly Silk, and still referred to as that on older web pages.
Compared to other Scheme interpreters in Java, JScheme has a stronger focus on Java compatibility at the expense of standard Scheme compliance. For example, the Scheme types are exactly the Java types (Booleans, Integers, Strings, etc.). Rationals and complex numbers are not supported; Strings are read-only.
JScheme makes calling Java objects very simple, through the use of "Java Dot Notation". Periods, dollar signs and hash marks in symbols indicate references to the Java class structure, and the interpreter uses reflection to dereference them. For example:
(map .toLowerCase '("FoO" "BAR" "bAz")) => ("foo" "bar" "baz")For each argument to "map", the interpreter looks up and calls the "toLowerCase" method (that takes zero arguments). All the arguments are normal Java Strings, so this works as you would expect. This is considerably more convenient than the usual foreign function call convention, which requires pre-declaration of all foreign functions. (JScheme does allow pre-declaration, to avoid the cost of lookup, but it's not required.)
Also see KawaScheme and OtherLanguagesForTheJavaVm.