Home
 
字符串作为要素
 
文章立足点依然是 Peter Norvig 大神 的 Lispy, 但第二篇文章还没看
norvig.com/lispy.html
norvig.com/lispy2.html
 
这两天想过把变量名用字符串生成的问题, 有点收获和困惑
如果变量名用字符串生成, 那么后续的代码怎样访问这个字符串, 是个问题
一般访问变量至少需要知道变量名才行的, 换 JSON 和 Array 也类似
今天突然想起 MongoDB 里如果 Query, 并不是马上得到变量名才完成
不过单纯的运算, 把数据存到 DB 然后 Query 不会有多大的意义
而且存储数据到地址, 再从地址取回数据, 这都是广泛使用的
那么变量存储存储地址不确定, 本身就失去了意义
不过我假想某个问题会触及到这点, 也许会有清晰一些的想法, 存疑..
 
Lispy 中解析成数组的 tree 之后, 就是每个 Array 确定一个函数了
但我想, 还是可以有变化的, 比如下面的过程:
字符串的内容是:
"(f1 p1 (f2 p2 p3))"
解析的结果得到一个字符串的嵌套数组:
['f1', 'p1', ['f2', 'p2', 'p3']]
比如字符串:
"(map sum (list 1 2))"
"(string hello world !)"
解析结果带有数字:
['map', 'sum', ['list', 1, 2]]
['string', 'hello', 'world', '!']
我的思路, 不换算数字, 另外允许字符串中存在空格和括号
那么字符串就要添加上记号来转移结构控制相关的符号:
"(string hello\ \(good\ morning\))"
解析的结果就是
['string', 'hello (good morning)']
具体解析的过程, 也许控制符号才需要被转义,
加入几个特殊符号来协助: ┗ ┛ ░  ◖ ◗ ▓ ∂
引号并不参与到内容的解析:
S.0
"(string hello\ \(\\good\ morning\))"
S.1
"(string hello\ \(∂good\ morning\))"
S.2
"(string hello░┗∂good░morning┛)"
S.3
"◖string▓hello░┗∂good░morning┛◗"
S.4
"◖string▓hello (\good morning)◗"
S.5
['string', 'hello (\good morning)']
这一点和后边并不相关, 只是为允许必要的括号
Cirru 中用图形允许字符串中的特出符号, 用文本也是可行的
而且, 为了能达到 Bash 那样字符串和变量混杂的效果, 要尝试
 
总之, 能得到那样的一个数组, 省略符号简写是这样:
f1 p1 (f2 p2 p3 p4)
自然, 按 Lispy 的写法, 其中有两个函数 f1f2
我试想, 不妨用 Curry 函数, 那么可以表示为逐个接收参数:
b1 = f2 ⇦  p2 ⇦  p3 ⇦  p4
f1 ⇦  p1 ⇦  b1
f1 接受第一个函数返回一个接收下一个参数
虽然我打算未来尝试限定参数的类型, 但对数组作为源码要比较特殊
打算把数组后边的部分作为参数整体传递, 还是看例子:
S.0
f1 p1 p2 f2 p3
S.2
r1 = f1 ⇦  (p1 p2 f2 p3)
r1 = f1 ⇦  p1
;; 这时 f1 可以选择只接受头部的 p1 作为参数
S.3
r2 = r1 ⇦  p2
;; 这时的 r2 比方说, 返回接收全部参数的参数
S.4
r3 = f2 ⇦  p3
r4 = r2 ⇦  r3
这样当遇到类似 Bash 命令的, 就可以先将后边执行:
set x number 3
⇒  set x 3
⇒  3
 
然后在 Curry 的过程中是否能添加作用域的改变呢
f1 p1 p2 p3
r1 = f1 ⇦  p1
;; 向作用域绑定变量
r2 = r1 ⇦  p2
;; 向作用域绑定变量
r3 = r2 ⇦  p3
 
comments powered by Disqus