修改类 Mathematica 语法 以变得更好读, 更容易写

2019-10-15 17:58:55 +08:00
 einsxiao

刚才发了一个贴, 但是不知道被我操作到哪里去了. 抱歉再发一次...

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] ]

求大腿意见,

1017 次点击
所在节点    问与答
1 条回复
einsxiao
2019-11-22 00:30:28 +08:00
https://pondnote.com/publication/158c6142365ee796
自问自答, 自己 high
实际感觉还可以.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX