V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
einsxiao
V2EX  ›  问与答

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

  •  
  •   einsxiao · 2019-10-15 17:58:55 +08:00 · 819 次点击
    这是一个创建于 1626 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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 条回复    2019-11-22 00:30:28 +08:00
    einsxiao
        1
    einsxiao  
    OP
       2019-11-22 00:30:28 +08:00
    https://pondnote.com/publication/158c6142365ee796
    自问自答, 自己 high
    实际感觉还可以.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5897 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:03 · PVG 10:03 · LAX 19:03 · JFK 22:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.