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
转成数字类型, true
为 1
, false
为 2
(:
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
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。