中语言超酷特性 之 --- 交换算式

    

中语言计算技术研究与发展联盟

舒生羽  wzyorg@gmail.com

 

     人们对于程序的计算过程有这样两种见解,一种认为计算过程应该是无状态的或者说无副作用的(no sideeffect),这样可以减少错综复杂的依而让程序更加清晰可靠,避免许多错误。另一种则将计算看作是一个状态的变化,程序设计里面总所周知的自动状态机正是这样一个例子,这其实也正是现在计算的物理现实。

    前者犹如试图让凡夫俗子超出三界外而不在五行中,总是显得有些强人所难。当然,这的确是美妙的抽象,我们应该向这种境界靠近。中语言程序在施加某些简单的规则限制后可以强制程序向这一风格靠近。

     当然工作中我们还得经常面对现实,使用状态机器来进行计算。这样我们就得经常面临的一个计算操作是交换两个符号的值,也就是让此符号的状态变为彼符号的状态,而彼符号的状态变成此符号的状态。这在当前的语言中似乎都不能自然发生,而要借助充当中介的第三个符号来完成。

     假如交换xy则代码类似

                t = x;

                x = y;

                y = t;

     中语言设计者对此很是耿耿于怀,而且特殊的交换操作很多时候可以给程序在很多方面都可以带来便利,比如效率。于是中语言提供了直接的交换操作符‘<->’。下面就是一个在中语言程序里面使用交换算式的例子。

 朴库.标准进出;



道: ()->()=
{
    男人: =
    {
        老婆: <  >-;
        : (名字: <  >-)=
        {
            名字 -> 老婆;
        }

        报告老婆: ()->(<  >-)=
        {
             老婆;
        }

    };


    张三: 男人("东施");
    李四: 男人("西施");
    打印文套("洞拐,洞洞拐, %s的老婆是%s.\n", "张三", 张三.报告老婆());
    打印文套("洞拐,洞洞拐, %s的老婆是%s.\n", "李四", 李四.报告老婆());
    张三 <-> 李四;
    打印文套("交换后\n");
    //张三挣了,李四亏了?
    打印文套("洞拐,洞拐, %s的老婆是%s.\n", "张三", 张三.报告老婆());
    打印文套("洞拐,洞拐, %s的老婆是%s.\n", "李四", 李四.报告老婆());
    //再看一个连续交换
    甲, 乙, 丙, 丁 := 1, 2, 3, 4;
    打印文套("甲 = %d, 乙 = %d, 丙 = %d, 丁 = %d\n", 甲, 乙, 丙, 丁);
    甲 <-> 乙 <-> 丙 <-> 丁;
    打印文套("交换后\n");
    //结果佢俚的值沿着圈移了一格
    打印文套("甲 = %d, 乙 = %d, 丙 = %d, 丁 = %d\n", 甲, 乙, 丙, 丁);
}

程序的运行效果如下:

官网文件参考:http://www.zhongyuyan.org/ZStudy/超酷程序/交换算式.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值