Skip to content
Lisp-like DSL for Rust language
Branch: master
Clone or download
JunSuzukiJapan Merge pull request #3 from DavidDeSimone/readme-fix
Adding rust tag to markup code blocks for syntax highlighting on github
Latest commit fbf3e2c Sep 19, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vscode
examples add fizzbuzz.rs Dec 19, 2016
src
tests
.gitignore
.travis.yml
Cargo.toml
LICENSE add LICENSE file Dec 18, 2016
README.md

README.md

macro-lisp

Lisp-like DSL for Rust language. Build Status MIT License

Installation

include the following in your Cargo.toml file:

[dependencies]
macro_lisp="0.1.0"

And then import the library using:

#[macro_use]
extern crate macro_lisp;

Examples

factorial

#[macro_use]
extern crate macro_lisp;

lisp!(defun factorial ((n i32)) i32
  (if (<= n 1)
    1
    (* n (factorial (- n 1)))));

lisp!(defun main () ()
    (defconstant num (factorial 10))
    (println "10! = {}" num));

wc

#[macro_use]
extern crate macro_lisp;

lisp!(use std::env);
lisp!(use std::process::exit);

lisp!(defun is_whitespace ((b u8)) bool
    (match b
        (0x20 | 0x09 | 0x85 | 0x0a | 0x0b | 0x0c | 0x0d => (true))
        (_ => (false) ))
);

lisp!(defun main () ()
    (defconstant (args Vec<String>) env::args().collect())
    (if (< (len args) 2)
        (progn
            (println "usage: wc file")
            (exit 0)))

    (defvar char_count 0)
    (defvar word_count 0)
    (defvar line_count 0)
    (defvar in_word false)

    (defconstant path &args[1])
    (with-input-from-file (file path)
        (doiter (byte file.bytes())
            (incf char_count)

            (defconstant b byte.unwrap())
            (if (== b 0x0a)
                (incf line_count))

            (if in_word
                (if (is_whitespace b)
                    (setf in_word false))
                (if (! (is_whitespace b))
                    (progn
                        (setf in_word true)
                        (incf word_count))))))

    (println "{:>10} {:>10} {:>10} {}" line_count word_count char_count path)
);

License

MIT

You can’t perform that action at this time.