diff options
| author | Joel Martin <github@martintribe.org> | 2014-11-03 20:02:09 -0600 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2015-01-09 16:16:43 -0600 |
| commit | c30efef469e22c8ba345a72c058c28362e57b746 (patch) | |
| tree | e2b9a4252c7771dd8f4554c4b248d370b66e0ae3 /r/reader.r | |
| parent | 01feedfe22a381c6b6ca79bdf0db798aa08c4104 (diff) | |
| download | mal-c30efef469e22c8ba345a72c058c28362e57b746.tar.gz mal-c30efef469e22c8ba345a72c058c28362e57b746.zip | |
R: add step6_file and step7_quote
Change symbols to be special class.
Diffstat (limited to 'r/reader.r')
| -rw-r--r-- | r/reader.r | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -27,7 +27,7 @@ tokenize <- function(str) { res <- list() i <- 1 for(v in m[[1]]) { - if (v == "") next + if (v == "" || substr(v,1,1) == ";") next res[[i]] <- v i <- i+1 } @@ -51,7 +51,7 @@ read_atom <- function(rdr) { } else if (token == "false") { FALSE } else { - as.symbol(token) + new.symbol(token) } } @@ -75,7 +75,19 @@ read_seq <- function(rdr, start="(", end=")") { read_form <- function(rdr) { token <- Reader.peek(rdr) - if (token == ")") { + if (token == "'") { + . <- Reader.next(rdr); + new.list(new.symbol("quote"), read_form(rdr)) + } else if (token == "`") { + . <- Reader.next(rdr); + new.list(new.symbol("quasiquote"), read_form(rdr)) + } else if (token == "~") { + . <- Reader.next(rdr); + new.list(new.symbol("unquote"), read_form(rdr)) + } else if (token == "~@") { + . <- Reader.next(rdr); + new.list(new.symbol("splice-unquote"), read_form(rdr)) + } else if (token == ")") { throw("unexpected ')'") } else if (token == "(") { new.listl(read_seq(rdr)) |
