All Projects → hulang1024 → scheme.js

hulang1024 / scheme.js

Licence: BSD-3-Clause license
Scheme语言解释器的JavaScript语言实现

Programming Languages

javascript
184084 projects - #8 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to scheme.js

Own-Programming-Language-Tutorial
Репозиторий курса "Как создать свой язык программирования"
Stars: ✭ 95 (+66.67%)
Mutual labels:  interpreter, programing-language
Vaquero
A scripting language for cowboy coders
Stars: ✭ 18 (-68.42%)
Mutual labels:  interpreter
tau
Tau is an open source interpreted programming language designed to be minimal, fast and efficient.
Stars: ✭ 26 (-54.39%)
Mutual labels:  interpreter
fast-formula-parser
Parse and evaluate MS Excel formula in javascript.
Stars: ✭ 341 (+498.25%)
Mutual labels:  interpreter
brs
An interpreter for the BrightScript language that runs on non-Roku platforms.
Stars: ✭ 96 (+68.42%)
Mutual labels:  interpreter
CSLisp
C# Scheme / Lisp implementation for embedding in .NET projects
Stars: ✭ 27 (-52.63%)
Mutual labels:  interpreter
huginn
Programming language with no quirks, so simple every child can master it.
Stars: ✭ 41 (-28.07%)
Mutual labels:  interpreter
lambda-dti
Interpreter of the ITGL with dynamic type inference
Stars: ✭ 18 (-68.42%)
Mutual labels:  interpreter
BQN
No description or website provided.
Stars: ✭ 16 (-71.93%)
Mutual labels:  interpreter
jingle
🔔 Jingle is a dynamically-typed, multi-paradigm programming language designed for humans and machines.
Stars: ✭ 34 (-40.35%)
Mutual labels:  interpreter
nelson
Nelson numerical interpreter
Stars: ✭ 42 (-26.32%)
Mutual labels:  interpreter
Animach
Scheme语言实现和运行时环境 / A Scheme runtime & implementation
Stars: ✭ 45 (-21.05%)
Mutual labels:  interpreter
malluscript
A simple,gentle,humble scripting language for mallus, based on malayalam memes.
Stars: ✭ 112 (+96.49%)
Mutual labels:  interpreter
j2
j2 is a minimalist concatenative programming language that makes up for its simplicity by its ability to natively bind with C libraries' ABI *and types*, *without glue*
Stars: ✭ 37 (-35.09%)
Mutual labels:  interpreter
jispy
A JavaScript interpreter in Python, built for embedding JavaScript.
Stars: ✭ 43 (-24.56%)
Mutual labels:  interpreter
PospoliteView
Pospolite View aims to be a simple HTML viewer engine fully made in Free Pascal.
Stars: ✭ 29 (-49.12%)
Mutual labels:  interpreter
nbb
Scripting in Clojure on Node.js using SCI.
Stars: ✭ 461 (+708.77%)
Mutual labels:  interpreter
rlox
Lox Interpreter/REPL written in Rust
Stars: ✭ 31 (-45.61%)
Mutual labels:  interpreter
perfume
A Programming language perfume. And text editor Pmacs writen by Perfume.
Stars: ✭ 20 (-64.91%)
Mutual labels:  programing-language
MonkeyLang.jl
"Writing an Interpreter in GO" and "Writing a Compiler in GO" in Julia.
Stars: ✭ 30 (-47.37%)
Mutual labels:  interpreter

scheme.js

Scheme编程语言的JavaScript实现。
IDE: https://hulang1024.github.io/scheme.js/ide/

欢迎访问我的另一个C的实现:https://github.com/hulang1024/scheme。scheme.js将低优先级或停止维护。

特性

目前的支持:

  • 变量引用: <variable>

  • 局部变量: let

  • 常量引用: quote,'

  • 过程调用: (operator operand ...)

  • 过程: lambda

    • 支持固定数量参数, 任意数量参数和n个或更多不定数量参数
    • 抄录了JavaScript语言中的隐含参数argumentscallee
  • 静态(词法)作用域

  • 闭包

  • 动态类型

  • 第一级函数

  • 传值调用

  • 定义: define

  • 赋值: set!

  • 顺序结构: begin

  • 条件表达式: if,cond,case,when,unless,and,or

  • 递归

  • 尾递归

  • 迭代结构: let,do,while,for

  • 标准过程

    • 相等谓词
      eqv?,eq?,equal?
    • 数值运算和数值输入/输出
      number?,=,<,<,>,<=,>=,+,*,-,/, zero?,positive?,negative?,odd?,even?,abs,remainder,
      number->string,string->number
      1. 整数: integer?
      2. 实数: real?
    • 其它数据类型
      1. 布尔
        boolean?,not
      2. 序对和表
        pair?,cons,car,cdr,set-car!,set-cdr!,
        caar,cadr ... cdddar,cddddr (carcdr的组合,定义到第四层),
        null?,list?,list,length,append,reverse,list-tail,list-ref,memq,memv
      3. 符号
        symbol?,symbol->string,string->symbol,symbol->string-ci
      4. 字符
        char?,char=?,char-upper-case?,char-lower-case?,char-upcase,char-downcase
      5. 字符串
        string?,make-string,string,string-length,string-ref,string-set!,
        string=?,string-ci=?,substring,string-append,string->list,list->string,
        string-copy,string-fill!
    • 控制特征
      procedure?,apply,map,for-each,void,void?
    • 求值
      eval,interaction-environment,expand
    • 输入/输出
      read,write,newline,display,error
  • 注释
    单行注释:;line comment

扩展与库

  • 盒子-指针表示:draw-box-pointer
    过程draw-box-pointer可以画出序对的盒子指针表示方式,帮你理解序对的更形象的方式。
    (draw-box-pointer (cons 1 2))
    (draw-box-pointer (cons
                        (cons 1 2)
                        (cons 3 4)))
    (draw-box-pointer (cons (cons 1
                                  (cons 2 3))
                            4))
    (cons 1 2) (cons (cons 1 2) (cons 3 4)) (cons (cons 1(cons 2 3)) 4)
  • ajax-load
    (ajax-load "tests/xyz.scm" (lambda () (alert 'onload)))
  • 基础语言JavaScript的能力

嵌入到HTML的方法

  1. 将Scheme代码放在script标签中,该标签具有两个属性: type="text/scm"ignore
    type属性是必须的,其值"text/scm"是我们自定义的,它表示内容是Scheme而非JavaScript代码;
    ignore属性是可选的,如果存在该属性,则其标签中的Scheme代码不会被自动执行。
    下面是例子:

    <script type="text/scm">
    (alert "hello scheme")
    </script>
    <script type="text/scm">
    (define gn 3)
    </script>
    <script type="text/scm" ignore>
    (set! gn (+ gn 1)
    </script>
    <script type="text/scm">
    (set! gn (+ gn 1)
    </script>
    <script type="text/scm">
    (alert gn)
    
    (define (factorial n)
      (if (< n 2)
          n
          (* n (callee (- n 1)))))
    (define n (prompt "input n"))
    (alert (string-append "!" n (string #\=)
      (number->string (factorial (string->number n)))))
    </script>
  2. 在所有scheme代码之后,引入broswer-loader.js和scm.js:

    <script src="../src/browser-loader.js"></script>
    <script src="../src/scm.js"></script>
  3. 上面的例子程序运行会弹出 hello scheme 和 4 。

F.A.Q

  • 这个是什么?
    是为了学习编程语言而编写的,一般Scheme程序员都能实现的,Scheme语言的可用的解释器,
    虽然提供了很多语言能力,但是实现起来(基础特性)很简单,现在只是个玩具,但是从中可以学到很多。
    另外,ide是该scheme解释器的小IDE,用它可以编写和运行scheme代码。

  • 它怎么工作的?
    请阅读源代码。

  • 为什么用JS编程?
    因为用JS写更简洁,只需关注解释器的高层逻辑。如果用C写,意味着要更严肃些并且考虑更多,以后会考虑用C。

  • 还没有实现Scheme的高级特性?
    第一级继续call/cc、宏、模式匹配,FFI lib等,这些我还不知道怎么实现,欢迎pull request :)。

更多

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].