The $\aleph$-Calculus: A declarative model of reversible programming
介绍了一种新的可逆计算模型--$\aleph$ -演算。它是声明性的,可逆的图灵完备的,并且具有局部项重写语义。与先前证明的可逆项重写系统不同,它不需要积累历史数据。$\aleph$演算中的术语与程序定义相结合,封装了所有程序状态。还写了一个翻译。
2022-06-13 cs.PL
A declarative extension of parsing expression grammars for recognizing most programming languages
解析表达式语法是描述语法的流行基础。不幸的是,程序设计语言的一些语法仍然难以用纯PEG识别。一些臭名昭著的例子出现了:C/C ++中typedef定义的名称,Python中基于缩进的代码布局,以及许多脚本语言中的HERE文档。为了识别这样的PEG-硬语法,我们已经解决了PEG的声明性扩展。“声明性”扩展意味着没有传统上用于实现扩展解析行为的编程语义动作。Nez是我们扩展的PEG语言,包括符号表和条件解析。本文证明了使用Nez扩展可以实现许多实用的程序设计语言,如C,C\#,Ruby和Python,其中涉及PEG-硬语法。
2015-11-26 cs.PL
Extending Object-Oriented Languages by Declarative Specifications of Complex Objects using Answer-Set Programming
许多应用程序需要复杂结构的数据对象。如果所考虑的对象受到不同的应用程序特定的约束,则开发用于创建此类对象的新算法解决方案或调整现有算法解决方案可能是一项重要且昂贵的任务。但是,通常以声明方式描述所需的对象相对容易。在本文中,我们建议使用答案集编程(ASP)--一个完善的声明式编程范式从该地区的人工智能--实例化对象的标准面向对象的程序设计语言。特别是,我们扩展了Java的声明性规范,所需的对象可以使用可用的ASP求解器技术自动生成。
2011-12-06 cs.AI cs.PL
Language Support for Declarative Future Commitments
顺序编程和工作流编程是描述计算处理的两种有用但完全不同的方法。在这两者中,顺序编程是我们教给所有程序员的,并得到程序设计语言的支持,无论是过程式的、面向对象的还是函数式的。我们将工作流作为问题分解的次要样式,用于特殊情况,如分布式或网络处理。这两种风格提供了互补的优势,但事实上,它们采用了完全不同的延续所有权模型,这妨碍了我们以一种允许在单一程序设计语言中教授和使用它们的方式将它们集成的能力。本文介绍了一种程序设计语言构造,声明性的未来承诺,允许更好地集成两者。
2011-08-23 cs.PL
Declarative Programming for Microcontrollers -- Datalog on Arduino
在本文中,我们描述了一种基于Arduino平台的微控制器编程方法,使用Datatron作为系统行为的清晰简洁的描述语言。廉价且易于编程的微控制器的应用领域,如机器人、家庭自动化和物联网设备,具有主流吸引力,通常被用作自然科学和技术教学的动力。用于微控制器的程序设计语言的选择受到严重限制,特别是关于基于规则的声明性语言。我们使用的方法,是基于Dedalus语言增强的操作,允许副作用,并考虑到微控制器的有限资源。我们的编译器和运行时环境允许在基于Arduino的系统上运行Datasheet程序。
2019-08-30 cs.PL
An ER-based Framework for Declarative Web Programming
我们描述了一个框架,以支持旨在操纵存储在关系数据库中的数据的基于Web的系统的实现。由于关系数据库的概念模型通常被指定为实体关系(ER)模型,因此我们建议使用ER模型来在声明性程序设计语言Curry中生成完整的实现。此实现包含创建和操作数据模型实体的操作,支持身份验证、授权、会话处理以及对用户进程的各个操作的组合。此外,该实现确保了数据库w.r.t. ER模型中指定的数据依赖关系,即,由用户发起的更新不会导致数据库的不一致状态。为了生成一个高层次的声明性实现,可以很容易地适应个别客户的要求,该框架利用以前的作品声明性数据库编程和Web用户界面建设咖喱。
2012-09-17 cs.PL
Integration of Declarative and Constraint Programming
将一组现有的约束求解器组合成一个集成的协作求解器系统是解决混合约束问题的一个有用和经济的原则。在本文中,我们表明,这种方法也可以用来整合不同的语言范式到一个统一的框架。此外,我们研究的语法,语义和操作的影响,这一想法的合并声明和约束编程。
2006-01-14 cs.AI cs.PL
Programming in Alma-0, or Imperative and Declarative Programming Reconciled
在(Apt et al,TOPLAS 1998)中,我们介绍了支持声明式编程的命令式程序设计语言Alma-0。在本文中,我们说明了混合编程风格的Alma-0的各种例子,补充(Apt等,TOPLAS 1998年)。所提出的Alma-0程序说明了该语言的多功能性,并表明“不知道”的非确定性可以自然地与赋值相结合。
2000-04-05 cs.AI cs.LO cs.PL
Forty hours of declarative programming: Teaching Prolog at the Junior College Utrecht
本文记录了我们的经验,使用声明性语言,让中学生初尝计算机科学。该课程旨在教学生一些关于Prolog编程的知识,但也让他们接触到重要的计算机科学概念,如统一或搜索策略。使用Haskell的Snap框架结合我们自己的NanoProlog库,我们开发了一个Web应用程序来教授这门课程。
2013-01-22 cs.CY cs.PL
Declarativeness: the work done by something else
声明性意味着我们在更高的抽象层次上进行计算机编程。这个模糊的定义将声明性与忽略细节的行为等同起来,但它是抽象的一个特例。未指定的部分是一些计算工作。自动化计算和卸载心理处理本质上是同一个概念,这是计算和数学思维的基础。这表明声明性不仅仅是一种特定的风格,而是编程的核心思想。在这里,我们证明了这一论点,并检查其后果教学的系统研究编码的例子,从入门编程课程。选择的语言是Clojure,因为它被证明是新手可以访问的。
2017-11-25 cs.PL
Agent Programming with Declarative Goals
Agent研究中的一个长期而持久的问题是缩小Agent逻辑和Agent编程框架之间的差距。这一问题的主要原因是建立代理逻辑和代理编程框架之间的联系,确定和解释的事实,代理编程框架没有纳入一个“声明性目标”的概念。相反,这些框架主要侧重于计划或“要做的目标”,而不是要实现的最终目标,后者也被称为“要实现的目标”。在本文中,一个新的程序设计语言称为目标介绍了这种声明性的目标。一个“承诺策略”的概念-由于代理逻辑,它解释了信念和目标之间的关系的主要理论见解之一-是用来构建一个计算语义的目标。最后,一个证明理论证明的GOAL代理的性质。因此,我们提供了一个完整的理论代理编程的意义上,我们的理论提供了一个编程框架和编程逻辑,这样的代理。应用该编程逻辑编制了一个实例程序,并证明了该程序的正确性.
2002-07-03 cs.AI cs.PL
Lowering the learning curve for declarative programming: a Python API for the IDP system
KU Leuven(鲁汶大学)
由于相关的学习曲线,程序员可能会犹豫是否使用声明性系统。在本文中,我们提出了一个API,集成的IDP知识库系统到Python程序设计语言。IDP是一个最先进的逻辑系统,它使用SAT,SMT,逻辑编程和答案集编程技术。Python是目前使用最广泛的编程语言之一。我们的API的第一个目标是允许Python程序员使用IDP的声明能力,而不需要学习任何新的语法或语义。第二个目标是允许IDP以最小的更改添加到现有代码库/从现有代码库中删除。
2015-11-03 cs.AI cs.PL
Declarative Programming with Intensional Sets in Java Using JSetL
内涵集合是由属性给出的集合,而不是通过枚举它们的元素。在以前的工作中,我们提出了一个一阶逻辑语言的决策过程,它提供了限制内涵集(RIS),即,内涵集合的一个子类,保证表示有限但无界的集合。在本文中,我们将展示如何利用RIS作为一个方便的编程工具,也在传统的设置,即命令式的O-O语言Java。我们这样做,考虑一个Java库,称为JSetL,集成的概念,逻辑变量,(集)统一和约束,是典型的约束逻辑程序设计语言到Java语言。我们展示了JSetL如何自然地扩展以适应RIS和RIS约束,以及如何利用这种扩展,一方面,支持更具声明性的编程风格,另一方面,有效地提高库提供的约束语言的表达能力。
2020-07-30 cs.PL
Declarative Diagnosis of Floundering
许多逻辑程序设计语言都有延迟原语,允许协同编程。这引入了一类错误症状--当计算想要成功或有限失败时,计算可能会陷入困境。对于并发逻辑程序,这通常称为死锁。类似地,约束逻辑程序可能无法调用某些约束求解器,因为变量没有被充分地实例化或约束。迄今为止,诊断此类故障的注意力相对较少。由于延迟原语影响程序的过程性而不是声明性视图,因此可以预期调试必须考虑交错执行的通常复杂的细节。然而,最近的工作语义提出了另一种方法。在本文中,我们将展示如何声明式调试范式可以用来诊断意外的挣扎,绝缘的复杂性执行的用户。关键词:逻辑程序设计,协同程序设计,延迟,调试,挣扎,死锁,约束
2007-11-01 cs.PL cs.SE
Veracity: Declarative Multicore Programming with Commutativity
人们一直在努力提供编程抽象,以减轻利用多核硬件的负担。许多编程抽象(例如,并发对象、事务存储器等)简化问题,但仍然涉及复杂的工程。我们认为,一些困难的多核编程可以改善通过声明式编程风格,程序员直接表示独立的顺序程序的片段。在我们提出的范例中,程序员以熟悉的顺序方式编写程序,并增加了明确表达代码片段顺序交换条件的能力。将这样的交换性条件放入源代码中为编译器提供了一个新的切入点,以利用交换性和并行性之间的已知联系。我们给出了一个语义程序员的顺序的角度来看,在正确的条件下,发现编译器转换的并行执行是等价的顺序语义。可串行化/可线性化不适合这种情况,因此我们引入了作用域可串行化,并展示了如何使用锁合成技术来实现它。接下来,我们描述了一种技术,通过一个新的减少从我们的交换块的逻辑规范,符号交换推理可以执行自动验证和合成的交换条件。我们用一种名为Veracity的新语言实现了我们的工作,该语言在多核OCaml中实现。我们证明了交换性条件可以在各种新的基准程序中自动生成,确认了并发加速可以随着计算的增加而被看到的期望,并将我们的工作应用于小型内存文件系统和众筹区块链智能合约的适应。
2022-04-29 cs.PL
Linear-Logic Based Analysis of Constraint Handling Rules with Disjunction
约束处理规则(英语:Constraint Handling Rules,缩写为CLR)是一种声明性的提交选择程序设计语言,与线性逻辑有很强的关系。它的泛化带析取的递归(CHRv)是一种多范式声明性程序设计语言,允许嵌入horn程序。我们分析的资产和限制的经典声明语义的ESTA,然后我们激励和开发一个线性逻辑声明语义ESTA和CHRv。我们将展示如何应用线性逻辑语义来决定程序属性,并证明操作等价的CHRv程序跨越边界的语言范式。
2010-09-15 cs.PL
Effectful Programming in Declarative Languages with an Emphasis on Non-Determinism: Applications and Formal Reasoning
本文研究了有效的声明式编程,强调非确定性作为一种效果。一方面,我们对使用非确定性作为底层实现思想来开发应用程序感兴趣。我们讨论两个应用程序使用功能逻辑程序设计语言咖喱。这些实现的关键思想是利用Curry所采用的非确定性和非严格性的相互作用。第一个应用程序调查排序算法参数化的比较功能。通过对这些排序函数应用一个非确定性谓词,我们得到一个置换枚举函数。我们将Curry中的实现与Haskell中的实现进行比较,后者使用一元接口来建模非确定性。我们在这项工作中讨论的另一个应用程序是概率编程库。我们不是将分布建模为事件和概率对的列表,而是使用Curry内置的非确定性来建模分布。在这两种情况下,我们观察到非确定性和非严格性的组合比使用列表来建模非确定性的实现更有优势。另一方面,我们提出了一个想法,有效的声明式程序设计语言的形式推理。为了从简单的效果开始,我们首先专注于对功能子集进行建模。也就是说,利息的效果是总体性的和非总体性的。然后,我们观察到,这两种效果的一般方案模型可以概括为捕捉广泛的影响。显然,下一步是将这一思想应用于模型非确定性。更准确地说,我们实现了Curry的非确定性模型:具有调用时间选择的非严格非确定性。因此,我们最后讨论了为什么目前的表示模型调用的名称,而不是库里的调用的需要语义,并给出了一个展望的想法来解决这个问题。
2020-06-02 cs.PL
Imperative vs. Declarative Programming Paradigms for Open-Universe Scene Generation
本文提出一种命令式编程范式,让LLM生成逐步程序以迭代放置对象,生成复杂三维场景布局,并通过无需LLM的错误修正机制提高鲁棒性,实验表明人类偏好度远超声明式系统。
2025-10-17 cs.GR cs.PL
BuDDI: A Declarative Bloom Language for CALM Programming
协调协议帮助分布式系统的程序员分析事务对系统状态的影响,但它们并不便宜。协调协议可能涉及多轮通信,这可能会损害系统的响应能力。在分布式计算中存在用于管理协调-性能权衡的许多努力。最近的一个工作线的特点是类的工作量,协调是不必要的一致性:即,逻辑单调的程序。在本文中,我们提出了一个典型的计算生物学工作负载的逻辑单调性的案例研究。我们利用布卢姆语言编写高效的分布式程序,并比较其性能等效程序写在UPC++,一种流行的语言编写分布式程序。此外,我们利用Bloom的分析工具来确定协调点,并利用我们自己使用Bloom的经验为没有强大的分布式计算背景的用户推荐一些更高级别的抽象。
2021-09-20 cs.DC cs.PL
Diva: A Declarative and Reactive Language for In-Situ Visualization
在大规模科学模拟中,使用自适应工作流管理进行现场可视化和分析已经成为一个日益增长的趋势。然而,协调自适应工作流与传统的过程程序设计语言可能是困难的,因为系统流是由不可预测的科学现象,这往往出现在一个未知的顺序,并可以逃避事件处理。这使得自适应工作流的实现繁琐且容易出错。最近,反应式和声明式编程范式已经被认为是其他领域中类似问题的合适解决方案。然而,有一个缺乏的研究,以适应这些方法在原位可视化和分析。在本文中,我们提出了一种语言设计和运行时系统开发自适应系统,通过声明式和反应式编程范式。我们说明了如何使用我们的方法实现自适应工作流编程系统,并证明它与燃烧模拟的用例。
2020-09-06 cs.HC cs.PL
Composing Programs in a Rewriting Logic for Declarative Programming
基于构造器的条件重写逻辑是一个集成一阶泛函和逻辑程序设计的通用框架,它为非确定性泛函-逻辑程序提供了一种代数语义。在这种形式主义的背景下,我们引入了一个简单的概念,程序模块作为一个开放的程序,可以扩展与几种机制结合起来。这些机制是基于一组减少的操作。然而,这些操作的高表达性使我们能够以简单的方式为程序模块化建模典型的构造,如隐藏,导出/导入,泛型/实例化和继承。我们还通过引入一个直接结果运算符来处理该建议的语义方面,并在逻辑编程的路线上研究基于该运算符的程序模块的几种替代语义:运算符本身,它的最小不动点(模块的最小模型),其前缀定点的集合(模块的术语模型)和一些其他变体,以便找到一个组合的和完全抽象的语义wrt的操作集和一个自然的可观察性概念。
2002-03-04 cs.LO cs.PL
Improving Testability and Reuse by Transitioning to Functional Programming
声明式风格(如函数式编程(FP))正在迅速地在其命令式兄弟(包括过程式和面向对象编程)中占据一席之地。这种转变是微妙的,因为它发生在多范式程序设计语言(如JavaScript)的上下文中。FP更适合测试驱动开发(TDD)等现代流程,以及大规模并行、基于云计算等架构。本文描述了从命令式到FP的转变的技术细节,以及对软件质量管理的影响,特别是重用和可测试性。
2016-06-21 cs.PL cs.SE
PDL: A Declarative Prompt Programming Language
IBM Research(IBM研究院);UC Davis(加利福尼亚大学戴维斯分校)
针对现有提示框架难学或削弱开发者提示控制权的问题,本文提出基于 YAML 的声明式语言 PDL,以简化多平台 LLM、工具调用及 RAG、智能体等应用的提示编程。
2024-10-24 cs.AI cs.PL
Application Embedding: A Language Approach to Declarative Web Programming
从Web的早期开始,Web应用程序开发人员就渴望以声明方式开发他们的大部分应用程序。然而,应用程序的一个方面,即它的业务逻辑,总是保持必要性。在这项工作中,我们提出了应用程序嵌入,一种新的方法,应用程序开发,允许应用程序的各个方面,包括其业务逻辑,以声明方式编程。我们在两个步骤中开发这种方法。首先,我们在Web应用程序和特定领域语言(DSL)之间绘制一个映射。其次,我们注意到,在实现DSL的两种方法中,即内部或外部,大多数传统的Web应用程序对应于外部DSL,而对应于DSL嵌入(实现内部DSL)的技术大多未被探索。通过将DSL嵌入技术投射到Web应用中,我们得到了一种新的技术--应用嵌入。应用程序嵌入提供了代码资产的分离,鼓励重用命令式代码,同时保持所有特定于应用程序的资产,包括那些指定其业务逻辑的声明性资产。作为验证,我们使用所提出的资产分离实现了一个简单但不平凡的Web应用程序。此实现包括一个名为FishTank的应用程序不可知的命令式主机应用程序,旨在适用于各种Web应用程序,以及旨在加载到该主机上的特定应用程序的不同方面的声明性定义。与传统方法相比,我们的代码资产分离方法有助于更好地分离工作。通过这种分离,主机应用程序开发人员可以主要关注web应用程序的功能外方面,即提高性能、可伸缩性和可用性,而嵌入式应用程序的开发人员可以关注其应用程序的功能方面,而无需担心功能外的问题。…
2017-01-27 cs.PL
Pre-proceedings of the DECLARE 2019 Conference
本卷是2019年9月9日至13日在科特布斯-森夫滕贝格科技大学(德国)举行的DESLEE 2019会议的预录。声明式编程是建模和解决复杂问题的高级范例。这种方法在过去几十年中引起了越来越多的关注,例如,在数据和知识工程、数据库、人工智能、自然语言处理、建模和处理组合问题以及用于建立网络系统的领域中。会议DESIDE 2019旨在跨学科交流来自不同社区的研究人员和学生的想法和经验,这些社区对基础,实现技术,新颖的应用以及高级声明式编程和相关领域的组合感兴趣。活动的技术方案包括特邀演讲、评审论文介绍和系统演示。DEFEE 2019包括子活动INAP,WFLP和WLP:INAP -第22届声明式编程和知识管理应用国际会议WFLP -第27届函数和(约束)逻辑编程国际研讨会WLP -第33届(约束)逻辑编程研讨会
2019-11-21 cs.PL
ProDebug: An Automated Debugging System for Prolog
Carnegie Mellon University(卡内基梅隆大学)
提出结合大语言模型、频谱和变异技术的Prolog自动调试系统ProDebug,用于识别学生作业中的错误并生成修复方案。
2026-05-26 cs.PL cs.SE
P6: A Declarative Language for Integrating Machine Learning in Visual Analytics
University of California at Davis(加州大学戴维斯分校)
我们提出了P6,一个声明性语言,用于建立高性能的可视化分析系统,通过其支持指定和集成机器学习和交互式可视化方法。随着基于机器学习和人工智能的数据分析方法不断发展,可视化分析解决方案可以利用这些方法更好地利用大型复杂数据。然而,将机器学习方法与交互式视觉分析相结合是具有挑战性的。现有的用于可视化的声明性编程库和工具包缺乏对耦合机器学习方法的支持。通过为可视化分析提供声明性语言,P6可以使更多的开发人员能够创建可视化分析应用程序,这些应用程序将机器学习和可视化方法结合起来,用于数据分析和问题解决。通过各种示例应用程序,我们展示了P6的功能,并展示了使用声明式规范构建可视化分析系统的好处。我们还确定并讨论了声明式视觉分析的研究机会和挑战。
2020-09-03 cs.HC cs.LG cs.PL
A Declarative Language for Building And Orchestrating LLM-Powered Agent Workflows
PayPal
本文提出一种声明式语言,用于构建和协调基于大语言模型的智能体工作流,通过统一DSL减少开发时间和部署速度,提升非工程师的使用效率。
2025-12-22 cs.AI cs.PL cs.SE
Towards a Unified Framework for Declarative Structured Communications
我们提出了一个统一的框架结构化通信的声明性分析。通过依赖于(定时)并发约束程序设计语言,我们表明,除了通常的操作技术,从过程演算,结构化通信的分析可以优雅地利用基于逻辑的推理技术。我们介绍了本田,Vasconcelos和久保提出的结构化通信的语言的声明性解释。我们的方法的显着特点是:在会话模型中包括部分信息(约束)的可能性;使用显式时间推理会话持续时间和到期时间;与逻辑的紧密对应关系,正式涉及会话执行和线性时间时序逻辑公式。
2010-02-04 cs.LO cs.PL
Learning Context-Free Grammars for Grammar-Constrained Decoding via Declarative Agentic Programming with Guarantees
Amazon Web Services(亚马逊云科技);Purdue University(普渡大学)
本研究提出名为Autogrammar的声明式智能体,可从文档和执行数据自动学习上下文无关文法,用于语法约束解码,在三种DSLs上的实验显示其生成的文法性能优于现有基线,能显著提升端到端LM的真实任务表现。
2026-08-07 cs.AI cs.CL cs.PL
Strategic programming on graph rewriting systems
我们描述了一种策略语言来控制图重写规则的应用,并展示了如何使用这种语言来编写高级声明式程序在几个应用领域。这种语言是基于图的编程工具的一部分,内置于端口图转换和可视化环境PORGY中。
2010-12-27 cs.PL
Object-Oriented Modeling of Programming Paradigms
对于正确的应用程序,使用编程范式(如函数或逻辑编程)可以极大地提高软件开发的生产力。但是这些强大的范例都与外来的程序设计语言联系在一起,而软件开发的管理要求对单一语言进行标准化。这种困境可以通过以一种新的方式使用面向对象编程来解决。传统的分析方法是采用面向对象的建模方法。在新的方法中,分析确定了应用程序的理想范例;开发从范例的面向对象建模开始。在本文中,我们说明了新的方法,给出面向对象的建模和约束编程的例子。这些例子表明,不再需要在专用于它的语言中体现编程范式。
2006-11-09 cs.PL cs.SE
Proceedings 35th International Conference on Logic Programming (Technical Communications)
自1982年在马赛举行第一次会议以来,ICLP一直是展示逻辑编程研究的首要国际活动。在逻辑编程的所有领域寻求贡献,包括但不限于:基础:语义学,形式主义,非单调推理,知识表示。语言:并发,对象,协调,移动性,高阶,类型,模式,断言,模块,元编程,基于逻辑的领域特定语言,编程技术。声明式编程:声明式程序开发,分析,类型和模式推理,部分求值,抽象解释,转换,验证,验证,编译,分析,测试,执行可视化实现:虚拟机,编译,存储管理,并行/分布式执行,约束处理规则,制表,外部接口,用户界面。相关范例和协同作用:归纳和协同归纳逻辑程序设计、约束逻辑程序设计、答案集程序设计、与SAT、SMT和CSP求解器的交互、类型推断和定理证明的逻辑程序设计技术、论证、概率逻辑程序设计、与面向对象和函数式程序设计的关系。应用领域:数据库、大数据、数据集成和联合、软件工程、自然语言处理、Web和语义网、代理、人工智能、计算生命科学、教育、网络安全和机器人技术。
2019-09-17 cs.AI cs.LO cs.PL
A Language for the Declarative Composition of Concurrent Protocols
最近对现实世界并发和分布式系统中的错误的研究发现,虽然单个协议的实现往往是健壮的,但多个协议的组成及其与内部计算的相互作用是大多数错误的罪魁祸首。多方会话类型和编排编程是基于通信流的全局描述开发按构造正确的并发和分布式软件的方法论。然而,协议的组成要么是有限的,要么是未经检查的。受这两种方法的启发,在这项工作中,我们提出了一个新的语言模型的协议,称为程序编排(PC)的安全组成。PC中的协议是过程,由执行过程参数化。过程使用全局描述以声明方式定义通信,程序是通过调用和组合这些过程来编写的。然后,根据流程模型的实现被机械地合成,保证正确性和无死锁。我们研究了PC机在同步和异步通信的设置,并说明其表现力与一些有代表性的例子。
2016-10-24 cs.PL
Extending Coinductive Logic Programming with Co-Facts
我们引入了一个广义的逻辑编程范式,程序,由事实和规则与通常的语法,可以丰富的共同事实,语法上类似的事实,但有一个特殊的意义。在共归纳逻辑程序设计中,解释是完全Herbrand基的子集,包括无限项。然而,程序的意图(声明性语义)是一个固定点,它不一定是最小的,也不一定是最大的,而是由共同事实决定的。通过这种方式,可以在非良基结构上表达谓词,例如无限列表和图,对于这些结构,共归纳解释不够精确。此外,这种范式很好地包含了标准(归纳)和共归纳逻辑编程,因为两者都可以通过特定的共事实选择来表达,因此归纳谓词和共归纳谓词可以共存于同一个程序中。通过实例对该范式进行了说明,并给出了声明语义和操作语义,证明了操作语义的正确性。最后,我们描述了一个原型元解释器。
2017-09-14 cs.LO cs.PL
Extending Answer Set Programming with Rational Numbers
University of Calabria(卡拉布里亚大学)
针对 ASP 无法原生处理非整数算术且浮点算术损害可复现性与声明语义的问题,本文提出将非整数近似为有理数,为扩展的 ASP-Core-2 定义语义并实现。
2023-12-07 cs.AI cs.LO cs.PL
Comparative Studies of 10 Programming Languages within 10 Diverse Criteria - a Team 10 COMP6411-S10 Term Report
这是一个关于程序设计语言的调查:C++,JavaScript,ANOJ,C#,Haskell,Java,PHP,Scala,Scheme和JavaScript。我们的调查工作涉及这十种程序设计语言的比较研究,以下标准:安全编程实践,Web应用程序开发,Web服务组合,基于OOP的抽象,反射,面向方面,函数式编程,声明式编程,批处理脚本和UI原型。我们在上述标准的背景下研究这些语言,以及它们为每个语言提供的支持水平。
2010-08-20 cs.PL
Flexible coinductive logic programming
谓词的递归定义通常被解释为归纳的或共归纳的。最近,一种更强大的方法被提出,称为灵活共归纳,以表达各种中间解释,在某些情况下,获得正确的含义是必要的。我们提供了一个详细的正式帐户的扩展逻辑编程支持灵活的共归纳。从语法上讲,程序被附加子句丰富,附加子句具有特殊的含义,用于调整谓词的解释。通常,声明语义可以表示为一个固定点,然而,它不一定是最小的,也不一定是最大的,而是由附加子句确定的。相应地,操作语义是标准SLD分辨率和coSLD分辨率的组合。我们证明了操作语义是健全的和完整的声明性语义限制到有限的余模型。本文件正在考虑被TPLP接受。
2020-08-05 cs.LO cs.PL
Applying Prolog to Develop Distributed Systems
分布式系统的开发是一项艰巨的任务。声明式编程技术在有效支持程序员应对这一挑战方面具有很大的潜力。虽然基于数据的语言已经被积极地探索用于编程分布式系统,但Prolog在这个应用领域迄今为止受到的关注相对较少。在本文中,我们提出了一个基于Prolog的编程系统,称为DAHL,分布式系统的声明式开发。DAHL用事件驱动的控制机制和内置的网络过程扩展了Prolog。我们的实验评估使用分布式哈希表数据结构,协议实现拜占庭容错,和分布式软件模型检查器-所有DAHL实现-表明该方法的可行性。
2010-07-22 cs.DC cs.PL
Functional or imperative? On pleasant semantics for differentiable programming languages
在机器学习(ML)中,研究人员和工程师似乎存在分歧。系统实现者更希望模型是声明性的,具有详细的类型信息和语义限制,允许模型被优化,重新排列和并行化。然而,实践者对动态的、具有可变状态的命令式语言表现出压倒性的偏好,并且许多工程努力都花费在弥合由此产生的语义鸿沟上。是否存在根本性的冲突?本文探讨了为什么使用命令式和函数式风格,以及未来的语言设计如何在这两个世界中获得最佳效果。
2022-06-22 cs.PL
A Productivity Checker for Logic Programming
递归推导的自动分析是逻辑程序设计中的一个难题。终结性和非终结性都是图灵完备语言中的不可判定问题。然而,一些声明性语言提供了一个实际的解决方案,通过明确区分程序是要被归纳还是共归纳地理解。对于要被归纳理解的程序,必须保证终止,而对于要被共归纳理解的程序,必须确保生产性非终止(或“生产力”)。在实践中,这种分类有助于更好地理解和实现一些非终止计算。逻辑编程是最早做出这种区分的声明性语言之一:在20世纪80年代,Lloyd和van Emden的"无限计算"捕获了推导的大步骤操作语义,产生无限项作为答案。在现代术语中,无穷大计算描述了逻辑编程中计算的“全局生产力”。大多数以共归纳为特征的程序设计语言也提供了一种观察性的或小步的生产力概念,作为全球生产力的计算对应物。这种生产力是通过检查无限计算的有限初始片段总是可以被观察到产生其无限答案项的有限部分来确保的。本文引入了逻辑程序的观测生产率概念,作为全局生产率的算法近似,给出了半判定观测生产率的有效方法,并给出了一个实现的逻辑程序的自动观测生产率检验器。
2016-08-19 cs.PL
$μ$Puppet: A Declarative Subset of the Puppet Configuration Language
Puppet是一个流行的声明性框架,用于指定和管理复杂的系统配置。Puppet框架包括一种特定于领域的语言,具有一些受面向对象编程启发的高级功能,包括用户定义的资源类型,具有继承形式的“类”和依赖管理。像大多数现实世界的语言一样,该语言以一种特殊的方式发展,导致设计具有许多功能,其中一些功能很复杂,难以理解,并且难以正确使用。我们提出了一个操作语义$μ$木偶,木偶语言的一个代表性子集,涵盖了木偶的独特功能,同时排除功能,无论是弃用或正在进行的工作。形式化的语义揭示了语言的困难部分,识别未来改进的机会,并为未来的分析或调试技术提供了基础,如静态类型检查或出处跟踪。我们的语义直接导致Haskell中的参考实现。我们还讨论了一些木偶的特质,特别是它的处理类和范围,并提出了一个初始语料库的测试用例支持我们的正式语义。
2017-05-26 cs.PL
A Linear Logic Programming Language for Concurrent Programming over Graph Structures
我们已经设计了一种新的逻辑程序设计语言称为LM(线性融合)编程基于图形的算法在声明式的方式。我们的语言是基于线性逻辑,一个表达逻辑系统,逻辑事实可以消费。因为LM集成了经典逻辑和线性逻辑,所以LM比其他逻辑程序设计语言更有表现力。LM程序自然是并发的,因为事实是由图数据结构的节点划分的。计算在节点级别执行,而通信发生在连接的节点之间。在本文中,我们提出了我们的语言的语法和操作语义,并说明其使用通过一些例子。
2014-05-14 cs.PL
A Specification for Typed Template Haskell
多阶段编程是一种经过验证的技术,可以通过控制代码生成来提供可预测的性能特征。我们提出了一个核心语义类型化模板Haskell,扩展的Haskell,支持多阶段的编程,以及与多态性和合格的类型进行交互。我们的语义与一个声明性的源语言与合格的类型的核心语言的基础上的多态λ演算增强多阶段的结构。
2021-12-07 cs.PL
More declarative tabling in Prolog using multi-prompt delimited control
几个Prolog实现包括一个制表设施,一个替代的解决策略,使用memoisation,以避免冗余的重复计算。直到最近,制表还需要底层Prolog引擎中的低级支持,或者广泛的程序transmittance(de Guzman等人,2008年)。另一种方法是增加Prolog与低级别的支持连续捕获控制操作符,特别是定界的延续,这已经在函数编程领域进行了研究,并发现能够支持各种各样的计算效果,否则声明性语言。本技术报告描述了基于Schrijvers等人(2013)最近引入的Prolog分隔控制运算符的SWI Prolog中的制表实现。与之前使用分隔控件的SWI Prolog制表实现(Desouter等人,2015),这种方法基于Johnson(1995)的函数记忆解析器组合子,更接近Prolog的声明性核心,需要更少的代码,并且能够从表格谓词系统中增量地交付解决方案(而不是在将任何解决方案交付给程序的其余部分之前找到所有解决方案)。一组基准测试表明,少量精心针对性的优化产生的性能在Desouter等人的优化版本的约2倍之内。的系统目前包含在SWI Prolog中。
2017-08-24 cs.DS cs.PL
ALEA IACTA EST: A Declarative Domain-Specific Language for Manually Performable Random Experiments
提出一种名为 Alea 的声明式领域特定语言,用于规范可人工执行的随机实验,支持静态分析概率分布和模拟执行,面向非专业程序员,设计实现仍在进行中。
2025-08-06 cs.PL math.PR
Relational Task Generation Language: A Declarative Specification Framework for Relational Deep Learning
Czech Technical University in Prague(布拉格捷克理工大学)
本文提出开源声明式语言RTGL,用于简化RDL任务构建,可重构基准任务、设计新任务,经实验证实其鲁棒性、可用性及与现有RDL框架的无缝集成性。
2026-09-02 cs.DB cs.LG cs.PL
A multi-paradigm language for reactive synthesis
California Institute of Technology(加州理工学院);Jet Propulsion Lab, Caltech(加州理工学院喷气推进实验室)
本文提出一种整合命令式与声明式元素的反应合成问题描述语言,通过游戏求解器输入结构化编程语言,支持序列约束表达,结合LTL片段和过去LTL实现高效合成。
2016-02-03 cs.LO cs.PL cs.SY
A Context-Oriented Extension of F#
面向上下文的程序设计语言为我们提供了原始的结构,以适应程序的行为取决于其操作环境,即上下文的演变。在以前的工作中,我们提出了ML_CoDa,一个面向上下文的语言,有两个组件:一个声明性的成分编程的上下文和一个功能的计算。本文描述了ML_CoDa作为F#扩展的实现。
2015-12-24 cs.PL
Programming Paradigms, Turing Completeness and Computational Thinking
编程范式的概念,以及相关的程序设计语言和方法,是计算机科学教学法的一个既定原则,载于国际课程。然而,这一概念与库恩的经典概念化的科学范式作为一个占主导地位的世界观,它取代了它的前辈通过优越的解释力。此外,编程范式如何被描述和区分也不是很清楚。事实上,仔细观察,明显不同的编程范式是非常紧密联系的。相反,它们应该被视为图灵完全计算与计算思维补充的统一计算机科学范式的不同传统。
2020-02-14 cs.PL
Comparing Selected Criteria of Programming Languages Java, PHP, C++, Perl, Haskell, AspectJ, Ruby, COBOL, Bash Scripts and Scheme Revision 1.0 - a Team CPLgroup COMP6411-S10 Term Report
比较程序设计语言是软件工程师讨论的一个常见话题。很少有语言变得足够流行,以至于只有少数人使用它们,或者在研究或教育中找到自己的位置;但是专业程序员在他们的职业生涯中可以轻松使用几十种不同的语言。为了跟上不断变化的编程范式、硬件发展等,每年都会设计、指定和实现多种程序设计语言。在本文中,我们对以下十种程序设计语言进行了比较研究:Haskell、Java、Perl、C++、Auscel J、COBOL、Ruby、PHP、Bash编程语言和Scheme。安全编程实践、Web应用程序开发、Web服务设计和组合、基于面向对象的抽象、反射、面向方面、函数式编程、声明式编程、批处理脚本和用户界面原型设计。
2010-08-20 cs.PL
Relational Expressions for Data Transformation and Computation
针对数据转换与计算编程模型分离的问题,研究提出将完全关系引入关系数据库,结合约束编程成果,以统一的关系模型实现二者的统一范式、代码复用与高效执行。
2023-09-20 cs.DB cs.PL
Towards a Decoupled Context-Oriented Programming Language for the Internet of Things
易于编程的行为是物联网中大规模可重构部署的一个主要问题。这类设备通常需要将其行为的一部分具体化,例如传感,数据聚合或代码卸载。大多数现有的面向上下文的程序设计语言都将整个行为集成在同一个类或封闭层中。我们建议从决策过程中抽象和分离上下文跟踪,并使用基于事件的处理程序来互连它们。我们保持了一个非常简单的声明式和非分层的编程模型。我们通过定义Golo的扩展来说明,Golo是一种基于JVM的动态语言。
2015-07-30 cs.PL
Declarative Combinatorics: Isomorphisms, Hylomorphisms and Hereditarily Finite Data Types in Haskell
本文是对基本数据类型(自然数、集合、多集合、有限函数、排列、二元判定图、图、超图、括号语言、并元有理数、素数、DNA序列等)之间的{ \em同构}的函数式程序设计框架的探索。通过{\em ranking/unranking}和{ \em pairing/unpairing}运算导出的{ \em hylomorphisms}将它们推广到遗传有限论域.嵌入式高阶{ \em组合子语言}自动提供任意到任意编码。除了实验数学的应用外,还展示了通过在数据类型之间转移操作而获得的“自由算法”的几个例子。其他应用包括组合对象的流迭代器、自定界代码、简洁的数据表示和随机实例的生成。该文件涵盖了59个数据类型,并通过使用嵌入式组合子语言,提供了3540个不同的双射变换。这篇论文的独立源代码是由一个识字的Haskell程序生成的,可以在\url{http://logic.csci.unt.edu/tarau/research/2008/fISO.zip}上找到。{ \bf Keywords}:Haskell数据表示、数据类型同构、声明组合学、计算数学、阿克曼编码、哥德尔数、算术化、排序/非排序、遗传有限集、函数和置换、二进制决策图编码、二元有理数、DNA编码
2009-01-19 cs.DS cs.PL