Nisp之道

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

内容简介: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之道》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

概率编程实战

概率编程实战

[美]艾维·费弗 (Avi Pfeffer) / 姚军 / 人民邮电出版社 / 2017-4 / 89

概率推理是不确定性条件下做出决策的重要方法,在许多领域都已经得到了广泛的应用。概率编程充分结合了概率推理模型和现代计算机编程语言,使这一方法的实施更加简便,现已在许多领域(包括炙手可热的机器学习)中崭露头角,各种概率编程系统也如雨后春笋般出现。本书的作者Avi Pfeffer正是主流概率编程系统Figaro的首席开发者,他以详尽的实例、清晰易懂的解说引领读者进入这一过去令人望而生畏的领域。通读本书......一起来看看 《概率编程实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具