在代码中引入这样的表达方式如何?

10-09-27 uda1341
rationese是我正在开发的编程语言,弄一小段示例代码,展示如何在过程式代码中,使用逻辑编程的搜索方式,看看这种表达方式是否需要,有哪些用处。

示例1:

var a[10];

a

  • =0

    *是通配符,所以代码的意思是,对数组进行初始化

    示例2:

    var a[10];

    int x;

    (x>=3) and (x<=8);

    a.x=0;

    代码的意思是,对3到8下标的数组元素进行初始化

    示例3:

    var a[10]=[1,2,5,4,3,4,6,4,4,0];

    a[x]=4;

    y=f(x);

    print(y);

    这段代码是过程式的,但是它带有逻辑式编程的搜索功能。

    a[x]=4的结果是,x得到4个值,4,6,8,9。

    所以y也可能有多个值

    最后print(y)会输出y的所有取值。

  •          

    1
    banq
    2010-10-08 09:47
    消灭数组是现代语言的一个方向,见这篇文章:

    下一个伟大的JVM语言是什么?

    uda1341
    2010-10-11 16:12
    目前我们所说的事务大多是对于处理数据库而言的,其实,事务的概念如果能扩展到代码的级别,可以为我们带来非常大的方便。

    原因是,如果我们把程序在运行的某个时刻的状态看做一个事实空间,这个事实空间是随着代码的运行在不断的变化的,在每个时刻,我们都可以用一组事实和规则去描述当前的事实空间。

    但有些时候,代码出错了,在某行语句的运行还未完成的时候就出错了,这时候,你可能无法用预先定义好的谓词来完整的描述这个事实空间。这种状态,我称为“逻辑完整性”遭到了破坏。

    例如把一个图片从某个位置挪到新的位置,在挪之前,你可以描述道:图片在某个位置。在挪动之后,你也可以说,图片在某个位置。但是在挪到一半的时候,你怎么说?在你的描述体系里,这种状态根本就不存在。而“图片”的抽象,也就被破坏了。

    这时候要写出错处理代码是困难的,因为你没法按照事先的逻辑描述去把状态恢复,而只能通过小心的查看底层的处理方式,才能知道哪些状态遭到了破坏,应该做什么样的处理才能够恢复这种逻辑完整性,而且这些处理也是超越逻辑的怪异方式,你事先设计好的抽象方法就没法描述它们,这就造成了所谓的抽象泄露。在上面的例子中,底层代码的意外错误导致对“图片”的抽象被破坏了,露出了内存操作这种你根本就不应该关心,也是根本就不了解的问题。

    这时候,事务就是非常必要的,事务处理的目的,就是为了时刻保持这种逻辑完整性,在逻辑处于中间的不完整状态时,如果操作失败,程序能够自动回退到事务开始之前的状态,以便代码进行出错处理。

    这就需要语言从底层就支持代码级别的事务。

    Oberon
    2010-10-12 11:07
    2010年10月08日 09:47 "banq"的内容
    消灭数组是现代语言的一个方向 ...

    消滅的可能性不大,進化成另一種形式而已。

    uda1341
    2010-10-12 11:30
    不论底层用什么方式实现,但数字方式的下标引用从形式上会一直存在下去。

    进化的方向是加入其它能力:

    a[1].next 等于a[2]

    insert(a[1],m) 在某个元素之前插入新元素

    a.first a.last

    等等。

    猜你喜欢
    2Go 1 2 下一页