# neb ### an attempt at a language ## ideas - **Lisp-y**: I hope you like parentheses! - **Strongly typed**: types are Good, and could enable future compilation - **We <3 Linux**: strong support for pipelines and shell-ing out - **Immutable variables**: mutability is scary and makes for strange bugs - **Pure functions**: side effects are also scary ## things that (hopefully) work ### housekeeping - TODO `(exit [[status :int]]) => :bool` ### io - `(print [out :string]) => :bool ; print to stdout` - TODO `(print-all [strings :list]) => :bool ; a list of strings` ### math - `(+ [arg :number] [many :number]) => :number` - `(- [arg :number] [many :number]) => :number` - `(* [arg :number] [many :number]) => :number` ### string - TODO `(concat [arg :string] [many :string]) => :string` ### flow control - `(if [cond :bool] [t-branch :any|:expr] [[f-branch :any|:expr]]) => :any` ### type checking TODO - `(string? [arg :any]) => :bool` - `(int? [arg :any]) => :bool` - `(float? [arg :any]) => :bool` - `(number? [arg :any]) => :bool ; returns #true for :int or :float` - `(bool? [arg :any]) => :bool` ### type conversion TODO - `(int->string [arg :int]) => :string` - `(float->string [arg :float]) => :string` - `(number->string [arg :number]) => :string` - `(bool->string [arg :bool]) => :string` - `(->string [arg :literal]) => :string ; works for all literals` ### global variables - `(def [name :string] [value :expr]) => ?` ### shell TODO - `($ [command :string]) => :list ; doesn't support pipes, first item is return code` - `($| [commands :list]) => :bool ; pipes together multiple shell commands` ### functions - `(lambda (args) (expr1) (expr2) ... (exprN)) => :any ### other - pretty much nothing else ## TODO (this section may be incomplete) ### types - [ ] revisit type system when i understand *gestures broadly* ### parsing - [x] build an AST like a real person (sorta?) ### math - [ ] division (float) - [ ] division (int) - [ ] mod (int) - [ ] exponent ### strings - [x] concat - [ ] substring - [ ] lower/uppercase ### flow control - [x] if - [x] if with empty else - [ ] branch - [ ] pipe ### lists - [x] lex - [x] parse - [x] evaluate ### other structure things - [ ] generic struct? - [ ] dict? ### symbols - [x] define - [x] access ### shell - [x] call out - [x] pipe