刚才发了一个贴, 但是不知道被我操作到哪里去了. 抱歉再发一次...
rt. 最近在做的 Pondnote( https://pondnote.com 项目,其中 Pond 语言语法主要参照了 Mathematica. 当然, 有很多自己的改进, 举个例子, 点操作符, l.PushBack 可以把整个表达式发给 List 函数,完成下面操作.
l = {1,2,3}
l.PushBack[4] # l 的新值为 {1,2,3,4}
这一类定义有一个统一范式, 因此可以给任意函数定义点操作, 譬如 Matrix
mat = Matrix[{ {1,2,3},{1,2,3} }] # 初始化
mat.Transpose[]
其中 Matrix 是原生的 C++矩阵结构(这部分没有整理过来,pondnote 中不可用, Linux 版本有实现) #################################
以上是已经完成的, 目前有一个语法结构上设计改动的想法 (主要原因是, 一直以为已经习惯了方括号. 但在不同语言间频繁切换的影响下, 这种方块号的用法, 慢慢变得有些有点不顺眼了. 主要缺点是, 写稍微长一点的程序的时候可读性太差, 并且写法习惯和主流语言差别太大 于是想做一些修正)
保留方括号的同时, 同时使用圆括号作为函数调用
f(x_) := x^2 # 函数可以使用圆括号
f (a b) # 但是圆括号必须紧跟作为函数头的表达式(中间不能有空格制表符等), 否则视为乘号
l = {1,2,3}
l.PushBack(4) # 这样就比原来的写法,看起来自然一点, 方括号总感觉很方..
也就是说, 原来的 f(a+b) 表示乘积的方式不在生效, 中间必须增加空格或者添加*号才能表达乘积的意义.
引入语句块函数体的概念, 从而可以使用下面的形式
# if 语句 举例
if cond: #或者 if ( cond ){
sent1;
sent2 #sent2 和 sent3 不再是相乘关系, 而是和最上层语句一样的是一个语句块
sent3
else: #或者 }else{
sent1
sent2 #或者 }
end
这段翻译成 FullForm, 类似于
If[ cond, Block[ CompoundExpression[ sent1 ], sent2, sent3 ], Block[ sent1, sent2] ]
求大腿意见,
1
einsxiao OP |