#### p5scm

This repository contains a scheme implementation based on

pa_schemer.ml

which is included as an extension of camlp5. This

provides a scheme-like syntax for OCaml. The

camlp5

documentation for the scheme extension provides the following comparison between`OCaml`

and `scheme`

syntax:

| OCaml | Scheme

| ------------------------------------ | ----------------------------------

| let x = 42;; | (define x 42)

| let f x = 0;; | (define (f x) 0)

| let rec f x y = 0;; | (definerec (f x y) 0)

| let x = 42 and y = 27 in x + y;; | (let ((x 42) (y 27)) (+ x y))

| let x = 42 in let y = 27 in x + y;; | (let* ((x 42) (y 27)) (+ x y))

| module M = struct ... end;; | (module M (struct ...))

| type 'a t = A of 'a * int | B | (type (t 'a) (sum (A 'a int) (B)))

| fun x y -> x | (lambda (x y) x)

| x; y; z | (begin x y z)

| f x y | (f x y)

| [1; 2; 3] | [1 2 3]

| a, b, c | (values a b c)

| match x with 'A'..'Z' -> "x" | (match x ((range 'A' 'Z') "x")))

| {x = y; z = t} | {(x y) (z t)}

`p5scm`

also provides the following:

| OCaml | Scheme

| ------------------------------------ | ----------------------------------

| [|1; 2; 3|] | #(1 2 3)

which is provided via a simple

menhir parser that supports all of

the syntax above.

### Installation

As long as you have a current version of opam,

installation is as simple as:

```
$ opam install p5scm
```

You can then use it to parse and emit `OCaml`

bytecode that can then be used in

your OCaml project:

```
$ p5scm file1.scm
```

You can also start an interpreter for `p5scm`

:

```
$ p5sch-utop
```

which uses utop for code completion

and many of the other benefits that it provides. Currently both the `#require`

and `#use`

directives of `utop`

function in the interpreter/REPL (same syntax as`utop`

however no terminating `;;`

required).

Only `OCaml`

versions >= 4.12.0 are supported by the `opam`

package.

Instructions for adding support for older versions can be found

(here).

### License

md5=252895e6e1d082eb6ad145fc83098d80

sha512=6412ca42b625e2310f7ab3c24e3e8f2930b4fd8a463b29aa78555812e8df7347937e1974264eb597187f65ed5105e0c5182c8ffffff89080664bef195ac35292

with-doc

>= "2.7.0"

>= "v0.14.0"

>= "v0.14.0"

>= "8.00.03"

>= "1.6.6"

>= "20201214"

>= "4.12.0" & < "4.15.0"

>= "2.8"