9、逻辑程序的前向切片:基于合取部分推导与参数过滤的方法

逻辑程序的前向切片:基于合取部分推导与参数过滤的方法

1. 引言

程序切片是一种重要的方法,在解决许多软件工程任务,如程序理解、维护、特化、调试和复用等方面有着广泛应用。最初,程序切片由Weiser作为一种调试技术引入到命令式编程中。然而,在逻辑编程领域,应用切片技术的研究相对较少。

程序切片旨在识别那些可能影响某个感兴趣点计算值的程序语句。它可以分为前向切片和后向切片,并且根据是否提供具体的程序输入,又可分为静态切片和动态切片。

最近,Vidal提出了一种针对惰性函数式逻辑程序的前向切片新方法,该方法利用切片和部分求值之间的相似性,通过对现有部分求值方案的轻微修改来计算前向切片。但该方法要求底层的部分求值算法是单变体和单生成的,这限制了计算切片的精度。

本文在此基础上进行了多方面的扩展。首先,将其应用到逻辑编程环境中;其次,采用了基于特征树的合取部分推导(CPD)算法,该算法是多变体和多生成的,使得计算的切片比之前的方法更精确;此外,由于基本的部分推导算法未作修改,因此可以很容易地在现有的部分推导系统上实现;最后,使用冗余参数过滤转换来去除谓词中不必要的参数。

2. 背景知识
2.1 部分求值

部分求值是一种提高程序整体性能的技术,它通过预计算仅依赖于静态输入的程序部分来实现。在逻辑编程中,程序的完整输入是一个目标 $G$,求值过程对应于为 $P \cup {G}$ 构建一个完整的SLDNF树。对于部分求值,静态输入是一个比运行时典型目标 $G$ 更通用(即实例化程度更低)的目标 $G’$。由于 $G’$ 未完全实例化,$P \cup {G’}$ 的SLDNF树通常是无限的,普通求值无法终止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值