Nisp之道

栏目: Json · 发布时间: 8年前

内容简介:Nisp之道

Nisp

什么是Nisp ?

Nisp 是一种思想,一切皆函数 () 。基本语法规则为 (? ) ,其中的 ? 是定义在 Sandbox(沙盒) 里的方法,可通过 ( help ) 列举所有沙盒方法。

目的

设计 Nisp 的目的在于灵活地定义不同的方法规则来满足不同的需求,而方法去解析用户输入的参数时,依然使用 (? ) 的解析形式。

思想

Nisp 采用分治思想,将一个大的问题分解成有相似解决方案的小问题,分而治之。例如 (+ (+ 1 1) 1) 表达式, (? ) 中的 ?+ ,将会使用沙盒定义的 + 方法,做加法操作,被分解成 (+ 1 1) => 2(+ 2 1) => 3 。用户只需输入 exp 表达式,使用到 sandbox 里的方法,经过 nisp ,将最终输出用户所需的值。

Sandbox(沙盒)

用户不同的使用场景下,会有不同的方法。沙盒中定义了一些原子性的方法,用户可以用原子性的方法,去组合出所需的分子结果。例如 Portm 中通过 ( help ) 查看到的原子方法有,将依次给出方法的使用事例:

["$", "*", "+", "-", "/", ":", "apply", "def", "do", "file", "fn", "get", "glob", "help", "id", "jsonp", "log", "map", "merge", "num", "page", "parse", "pick", "query", "reduce", "set", "str", "stringify", "template", "throw", "|"]

$

基本语法: ($ arg1)

将原始输入值转成规范的基本数据类型(Number/Boolean/String),调用其它方法时,同时也会在外包一层 $ ,转成基本数据类型。

(:
    value (:
       number 1234
       string ($
            str1
       )
       boolean ($
            true
       )
    )
)

=> 

{
    value: {
        number: 1234,
        string: 'str1',
        boolean: true
    }
}

+-*/

基本语法: (+ arg1 arg2 ...)(- arg1 arg2)(* arg1 arg2 ...)(/ arg1 arg2)

(/ 1 0) 时,会返回null

(:
    value (:
        add (+
             1 1
        )
        sub (-
            2 1
        )
        multipy (*
            2 2
        )
        divide (/
            10 5
        )
    )   
)


=>

{
    value: {
        add: 2,
        sub: 1,
        multipy: 4,
        divide: 2
    }
}

:

基本语法: (: key value)

生成JSON,

(:
    value(:
        a 1
        b 2
    )
)

=> 

{
    a: 1,
    b: 2
}

|

生成数组

(:
    value(|
        a b c d
    )
)

=> 

{
    value: [
        'a',
        'b',
        'c',
        'd'
    ]
}

str

基本用法: (str arg) ,将 arg 的值转成字符串。

(:
    value(str
        (|
            true 12345
        )
    )
)

=>
{
    value: 'true,12345'
}

num

基础用法: (num arg) ,将 arg 转成数字类型, true1false2

(:
    value(:
        a (num 123)
        b (num '2121')
        c (num 'weofjewio')
        d (num true)
        f (num false)
    )    
)

=>

{
    value: {
        a: 123,
        b: 2121,
        c: null,
        d: 1,
        f: 0
    }
}

get

用来获取指定 key

基本用法 (get data arg2)(arg1) 为传入的原始值, arg2 填入 key 。最终得到 key 对应的 value

例:获取JSON中的 data2 中的 data2-1 值。

(:
    value(get (:
            version '1.0'
            status '200'
            value (:
                key1 value1
            )
            data (|
                (:
                    data1 data1            
                )
                (:
                    data2 (:
                      data2-1 data2-1  
                      data2-2 data2-2
                    )
                )
            )        
        ) data[1].data2.data2-1
    )
)

=>

{
    value: 'data2-1'
}

set

基本用法: (set data) ,添加数据 data

(:
    value(set
        abc 
    )  
)

=>

{
    value: 'abc'
}

jsonp

作用:用来完成Ajax的 jsonp 跨域请求 基本用法: (jsonp callbackName data)callbackName 为回调函数名, data 为json数据。

(:
    value(jsonp
      callback (:
            status 200
      )
    )
)

=>

{
    value: 'callback({"status":200})'
}

apply

def

do

file

fn

glob

help

id

jsonp

log

map

merge

page

parse

pick

query

reduce

stringify

template

throw


以上所述就是小编给大家介绍的《Nisp之道》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Concurrency on the JVM

Programming Concurrency on the JVM

Venkat Subramaniam / The Pragmatic Bookshelf / 2011-6-1 / USD 35.00

Concurrency on the Java platform has evolved, from the synchronization model of JDK to software transactional memory (STM) and actor-based concurrency. This book is the first to show you all these con......一起来看看 《Programming Concurrency on the JVM》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具