# package p5scm

## Install

## Dune Dependency

## Authors

## Maintainers

## Sources

`md5=eb4ee666fd862f7c8057cca4a73daf44`

`sha512=d28ee892b8fc3241c42f531f9d372b1b007abbef128c3f3862fa5ad943a3eae1d655b34daac19940e1f9fad1ecfca1419a89c7507b6cbd40d9c0490c6aa6761e`

## README.md.html

## A Scheme Implementation using Pa_schemer from Camlp5

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).