SchemeLink

link=Install["C:\\Program Files\\PLT\\schemelink.exe"]

SchemeLink provide a Mathematica function Eval, which will evaluate it's argument in MzScheme.

The argument should be a valid Scheme expression, given in Mathematica. There is two way to do this.

Eval[{car,{cons,1,2}}]

Eval[SchemeExpression["(+ 1 2)"]]

Eval[{SchemeSymbol["+"],1,2}]

The first way is just like you type a normal S-exp in Scheme, but using brace instead of parenthesis, and comma instead of whitespace.

In Mathematica, a symbol can contain any letters, letter-like forms, or digits, but cannot start with a digit. But in Scheme, a symbol can be composed from any characters. To address this problem, you can use SchemeSymbol["+"] to refer to the Scheme symbol +, just as in the example.

Besides symbol, there are SchemeImproperList, SchemeVector, SchemeBox, SchemeChar, SchemeBytes, SchemeTag, SchemeReference, SchemeHashTable, SchemeHashTableEq, SchemeRegExp, SchemePRegExp, and SchemeKeyword to represend literal objects.

Eval[{quote,{SchemeTag[0,{1,2}],SchemeReference[0]}}]

Eval[{SchemeSymbol["print-graph"],True}]

Eval[{quote,{SchemeTag[0,{1,2}],SchemeReference[0]}}]

Even if you enter a infinite loop in Scheme, you can use the "Abort Evalution" function of Mathematica to send an asynchronous break signal to MzScheme.

Eval[{let,loop,{},{loop}}]

The second way is to use M-exp instead of S-exp:

Eval[cdr[cons[1,2]]]

One more example about Scheme thread:

Eval[{define,x,1}]

Eval[{thread,{lambda,{},{sleep,10},{SchemeSymbol["set!"],x,0}}}]

Eval[x]

After 10 seconds:

Eval[x]

Uninstall[link]