首页 > 最新文献

Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages最新文献

英文 中文
Biorthogonality for a Lazy language Lazy语言的双正交性
Daniel Fridlender, Alejandro Gadea, Miguel Pagano, Leonardo Rodríguez
In this paper we extend the technique of biorthogonality for proving the correctness of a compiler for a lazy language, which, as far as we know, has only been preliminary explored by Rodríguez [19]. One of the technical difficulties arising in this context is the sharing of the heap between the realizer and the test. We significantly extend the language considered by Rodríguez by adding integer numbers and products, which may be used as a test case for tackling other data-types. Our language does not yet support recursive definitions.
在本文中,我们扩展了双正交技术来证明一种惰性语言的编译器的正确性,据我们所知,这只在Rodríguez[19]中进行了初步探索。在这种情况下出现的技术困难之一是实现程序和测试程序之间的堆共享。我们通过添加整数和乘积极大地扩展了Rodríguez所考虑的语言,这可以用作处理其他数据类型的测试用例。我们的语言还不支持递归定义。
{"title":"Biorthogonality for a Lazy language","authors":"Daniel Fridlender, Alejandro Gadea, Miguel Pagano, Leonardo Rodríguez","doi":"10.1145/3205368.3205374","DOIUrl":"https://doi.org/10.1145/3205368.3205374","url":null,"abstract":"In this paper we extend the technique of biorthogonality for proving the correctness of a compiler for a lazy language, which, as far as we know, has only been preliminary explored by Rodríguez [19]. One of the technical difficulties arising in this context is the sharing of the heap between the realizer and the test. We significantly extend the language considered by Rodríguez by adding integer numbers and products, which may be used as a test case for tackling other data-types. Our language does not yet support recursive definitions.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"57 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116028566","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
Handlers for Non-Monadic Computations 非一元计算的处理程序
Ruben P. Pieters, T. Schrijvers, Exequiel Rivas
Algebraic effects and handlers are a convenient method for structuring monadic effects with primitive effectful operations and separating the syntax from the interpretation of these operations. However, the scope of conventional handlers are somewhat limited as not all side effects are monadic in nature. This paper generalizes the notion of algebraic effects and handlers from monads to generalized monoids, which notably covers applicative functors and arrows. For this purpose we switch the category theoretical basis from free algebras to free monoids. In addition, we show how lax monoidal functors enable the reuse of handlers and programs across different computation classes, for example handling applicative computations with monadic handlers.
代数效果和处理程序是一种方便的方法,用于构造具有基本有效操作的一元效果,并将语法与这些操作的解释分离开来。然而,传统处理程序的范围有些有限,因为并非所有副作用都是一元性质的。本文将代数效应和处理程序的概念从单群推广到广义单群,主要包括应用函子和箭头。为此,我们将范畴理论基础从自由代数转换为自由模群。此外,我们还展示了松散单函数如何支持跨不同计算类重用处理程序和程序,例如使用单函数处理程序处理应用程序计算。
{"title":"Handlers for Non-Monadic Computations","authors":"Ruben P. Pieters, T. Schrijvers, Exequiel Rivas","doi":"10.1145/3205368.3205372","DOIUrl":"https://doi.org/10.1145/3205368.3205372","url":null,"abstract":"Algebraic effects and handlers are a convenient method for structuring monadic effects with primitive effectful operations and separating the syntax from the interpretation of these operations. However, the scope of conventional handlers are somewhat limited as not all side effects are monadic in nature. This paper generalizes the notion of algebraic effects and handlers from monads to generalized monoids, which notably covers applicative functors and arrows. For this purpose we switch the category theoretical basis from free algebras to free monoids. In addition, we show how lax monoidal functors enable the reuse of handlers and programs across different computation classes, for example handling applicative computations with monadic handlers.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"61 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124044503","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 3
A Distributed Dynamic Architecture for Task Oriented Programming 面向任务编程的分布式动态架构
Arjan Oortgiese, John H. G. van Groningen, P. Achten, M. J. Plasmeijer
Task Oriented Programming (TOP) is a special flavor of functional programming for real-world application domains in which people and automated systems collaborate to achieve a common goal. The original iTasks framework, which implements TOP, uses a single server multi-client architecture. This is not suited for truly distributed application domains, such as deployed by the Dutch coast guard. In this paper we show how to turn this architecture into a distributed, dynamic, architecture. This is done in an elegant way, by building on the core concepts of TOP and iTasks.
面向任务的编程(TOP)是一种特殊风格的函数式编程,适用于现实世界的应用领域,在这些领域中,人和自动化系统协作以实现共同的目标。实现TOP的原始iTasks框架使用单服务器多客户端架构。这并不适合真正的分布式应用程序域,例如由荷兰海岸警卫队部署的应用程序域。在本文中,我们将展示如何将此体系结构转换为分布式的动态体系结构。通过构建TOP和任务的核心概念,以一种优雅的方式实现了这一点。
{"title":"A Distributed Dynamic Architecture for Task Oriented Programming","authors":"Arjan Oortgiese, John H. G. van Groningen, P. Achten, M. J. Plasmeijer","doi":"10.1145/3205368.3205375","DOIUrl":"https://doi.org/10.1145/3205368.3205375","url":null,"abstract":"Task Oriented Programming (TOP) is a special flavor of functional programming for real-world application domains in which people and automated systems collaborate to achieve a common goal. The original iTasks framework, which implements TOP, uses a single server multi-client architecture. This is not suited for truly distributed application domains, such as deployed by the Dutch coast guard. In this paper we show how to turn this architecture into a distributed, dynamic, architecture. This is done in an elegant way, by building on the core concepts of TOP and iTasks.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"16 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124065487","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 6
Pattern Candidate Discovery and Parallelization Techniques 模式候选发现和并行化技术
M. Tóth, István Bozó, T. Kozsik
Parallel computations in a program can be expressed conveniently, at a high level of abstraction, using parallel patterns such as task farm, pipeline or divide-and-conquer. In order to transform a sequential program into a pattern-based parallel one, the software developer may want to apply refactoring transformations on it. This tutorial explains a methodology to perform tool supported parallelization of programs by presenting how to use a specific static source code analysis and transformation system for Erlang. A key element of the approach is pattern candidate discovery, a static analysis technique to identify code fragments that can be refactored into a parallel pattern.
程序中的并行计算可以使用并行模式(如任务场、管道或分治)在高抽象层次上方便地表示。为了将顺序程序转换为基于模式的并行程序,软件开发人员可能希望对其应用重构转换。本教程通过介绍如何使用Erlang的特定静态源代码分析和转换系统,解释了一种执行工具支持的程序并行化的方法。该方法的一个关键元素是模式候选发现,这是一种静态分析技术,用于识别可以重构为并行模式的代码片段。
{"title":"Pattern Candidate Discovery and Parallelization Techniques","authors":"M. Tóth, István Bozó, T. Kozsik","doi":"10.1145/3205368.3205369","DOIUrl":"https://doi.org/10.1145/3205368.3205369","url":null,"abstract":"Parallel computations in a program can be expressed conveniently, at a high level of abstraction, using parallel patterns such as task farm, pipeline or divide-and-conquer. In order to transform a sequential program into a pattern-based parallel one, the software developer may want to apply refactoring transformations on it. This tutorial explains a methodology to perform tool supported parallelization of programs by presenting how to use a specific static source code analysis and transformation system for Erlang. A key element of the approach is pattern candidate discovery, a static analysis technique to identify code fragments that can be refactored into a parallel pattern.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"135 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124225927","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
Towards Compiling SAC for the Xeon Phi Knights Corner and Knights Landing Architectures: Strategies and Experiments 面向Xeon Phi骑士角和骑士登陆架构的SAC编译:策略和实验
C. Grelck, N. Sarris
Xeon Phi is the common brand name of Intel's Many Integrated Core (MIC) architecture. The first commercially available generation Knights Corner and the second generation Knights Landing form a middle ground between modestly parallel desktop and standard server processor architectures and the massively parallel GPGPU architectures. In this paper we explore various compilation strategies for the purely functional data-parallel array language SAC (Single Assignment C) to support both MIC architectures in the presence of entirely resource- and target-agnostic source code. Our particular interest lies in doing so with limited, or entirely without, user knowledge about the target architecture. We report on a series of experiments involving two classical benchmarks, Matrix Multiplication and Gaussian Blur, that demonstrate the level of performance that can be expected from compilation of abstract, purely functional source code to the Xeon Phi family of architectures.
Xeon Phi是英特尔多集成核心(MIC)架构的通用品牌名称。第一代商业可用的Knights Corner和第二代Knights Landing形成了中等并行桌面和标准服务器处理器架构与大规模并行GPGPU架构之间的中间地带。在本文中,我们探讨了纯功能数据并行数组语言SAC (Single Assignment C)的各种编译策略,以支持完全与资源和目标无关的源代码存在的MIC架构。我们特别感兴趣的是在用户对目标体系结构了解有限或完全没有了解的情况下这样做。我们报告了一系列涉及两个经典基准的实验,矩阵乘法和高斯模糊,这些实验证明了从编译抽象的、纯功能的源代码到Xeon Phi系列架构的性能水平。
{"title":"Towards Compiling SAC for the Xeon Phi Knights Corner and Knights Landing Architectures: Strategies and Experiments","authors":"C. Grelck, N. Sarris","doi":"10.1145/3205368.3205377","DOIUrl":"https://doi.org/10.1145/3205368.3205377","url":null,"abstract":"Xeon Phi is the common brand name of Intel's Many Integrated Core (MIC) architecture. The first commercially available generation Knights Corner and the second generation Knights Landing form a middle ground between modestly parallel desktop and standard server processor architectures and the massively parallel GPGPU architectures. In this paper we explore various compilation strategies for the purely functional data-parallel array language SAC (Single Assignment C) to support both MIC architectures in the presence of entirely resource- and target-agnostic source code. Our particular interest lies in doing so with limited, or entirely without, user knowledge about the target architecture. We report on a series of experiments involving two classical benchmarks, Matrix Multiplication and Gaussian Blur, that demonstrate the level of performance that can be expected from compilation of abstract, purely functional source code to the Xeon Phi family of architectures.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"47 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126523602","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
Recursive Array Comprehensions in a Call-by-Value Language 按值调用语言中的递归数组推导
Artjoms Šinkarovs, S. Scholz, Robert J. Stewart, Hans-Nikolai Vießmann
Recursive value definitions in the context of functional programming languages that are based on a call-by-value semantics are known to be challenging. A lot of prior work exists in the context of languages such as Scheme and OCaml. In this paper, we look at the problem of recursive array definitions within a call-by-value setting. We propose a solution that enables recursive array definitions as long as there are no cyclic dependences between array elements. The paper provides a formal semantics definition, sketches possible compiler implementations and relates to a prototypical implementation of an interpreter in OCaml. Furthermore, we briefly discuss how this approach could be extended to other data structures and how it could serve as a basis to further extend mutually recursive value definitions in a call-by-value setting in general.
众所周知,基于按值调用语义的函数式编程语言上下文中的递归值定义是具有挑战性的。许多先前的工作都是在Scheme和OCaml等语言的背景下进行的。在本文中,我们研究按值调用设置中的递归数组定义问题。我们提出了一个解决方案,只要数组元素之间没有循环依赖,就可以实现递归数组定义。本文提供了一个形式化的语义定义,概述了可能的编译器实现,并涉及一个OCaml解释器的原型实现。此外,我们还简要讨论了如何将这种方法扩展到其他数据结构,以及如何将其作为基础,进一步扩展按值调用设置中的相互递归值定义。
{"title":"Recursive Array Comprehensions in a Call-by-Value Language","authors":"Artjoms Šinkarovs, S. Scholz, Robert J. Stewart, Hans-Nikolai Vießmann","doi":"10.1145/3205368.3205373","DOIUrl":"https://doi.org/10.1145/3205368.3205373","url":null,"abstract":"Recursive value definitions in the context of functional programming languages that are based on a call-by-value semantics are known to be challenging. A lot of prior work exists in the context of languages such as Scheme and OCaml. In this paper, we look at the problem of recursive array definitions within a call-by-value setting. We propose a solution that enables recursive array definitions as long as there are no cyclic dependences between array elements. The paper provides a formal semantics definition, sketches possible compiler implementations and relates to a prototypical implementation of an interpreter in OCaml. Furthermore, we briefly discuss how this approach could be extended to other data structures and how it could serve as a basis to further extend mutually recursive value definitions in a call-by-value setting in general.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"295 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134139388","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
The Sky is the Limit: Analysing Resource Consumption Over Time Using Skylines 天空是极限:使用天际线分析随时间的资源消耗
M. Klinik, J. M. Jansen, M. J. Plasmeijer
In this paper we present a static analysis for costs of higher-order workflows, where costs are maps from resource types to simple functions over time. We present a type and effect system together with an algorithm that yields safe approximations for the cost functions of programs.
在本文中,我们对高阶工作流的成本进行了静态分析,其中成本是从资源类型到简单功能随时间的映射。我们提出了一种类型和效果系统以及一种算法,该算法可以产生程序成本函数的安全近似值。
{"title":"The Sky is the Limit: Analysing Resource Consumption Over Time Using Skylines","authors":"M. Klinik, J. M. Jansen, M. J. Plasmeijer","doi":"10.1145/3205368.3205376","DOIUrl":"https://doi.org/10.1145/3205368.3205376","url":null,"abstract":"In this paper we present a static analysis for costs of higher-order workflows, where costs are maps from resource types to simple functions over time. We present a type and effect system together with an algorithm that yields safe approximations for the cost functions of programs.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"17 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115134820","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 5
Extrapolate: generalizing counterexamples of functional test properties 外推:概括功能测试特性的反例
Rudy Matela, C. Runciman
This paper presents a new tool called Extrapolate that automatically generalizes counterexamples found by property-based testing in Haskell. Example applications show that generalized counterexamples can inform the programmer more fully and more immediately what characterises failures. Extrapolate is able to produce more general results than similar tools. Although it is intrinsically unsound, as reported generalizations are based on testing, it works well for examples drawn from previous published work in this area.
本文提出了一个名为extrapololate的新工具,它可以自动泛化Haskell中基于属性的测试所发现的反例。实例应用表明,广义反例可以更全面、更直接地告诉程序员故障的特征。与类似的工具相比,外推能够产生更普遍的结果。虽然它本质上是不健全的,因为报道的概括是基于测试的,但它对于从该领域以前发表的工作中提取的例子很有效。
{"title":"Extrapolate: generalizing counterexamples of functional test properties","authors":"Rudy Matela, C. Runciman","doi":"10.1145/3205368.3205371","DOIUrl":"https://doi.org/10.1145/3205368.3205371","url":null,"abstract":"This paper presents a new tool called Extrapolate that automatically generalizes counterexamples found by property-based testing in Haskell. Example applications show that generalized counterexamples can inform the programmer more fully and more immediately what characterises failures. Extrapolate is able to produce more general results than similar tools. Although it is intrinsically unsound, as reported generalizations are based on testing, it works well for examples drawn from previous published work in this area.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"15 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128146189","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 5
Type Error Customization in GHC: Controlling expression-level type errors by type-level programming GHC中的类型错误定制:通过类型级编程控制表达式级类型错误
A. Serrano, Jurriaan Hage
Embedded domain specific languages (DSLs) are a common pattern in the functional programming world, providing very high-level abstractions to programmer. Unfortunately, this abstraction is broken when type errors occur, leaking details of the DSL implementation. In this paper we present a set of techniques for customizing type error diagnosis in order to avoid this leaking. These techniques have been implemented in the GHC Haskell compiler. Our customizations are declared in the type signatures of functions provided by the DSL, leading to type error message that are context-dependent: the same kind of error can be reported in a different way depending on the particular expression in which it occurs. We make use of the ability to manipulate constraints using type-level programming which is already present in GHC, and which enables reuse and abstraction of common type error patterns.
嵌入式领域特定语言(dsl)是函数式编程世界中的一种常见模式,为程序员提供了非常高级的抽象。不幸的是,当发生类型错误时,这种抽象就会被破坏,从而泄露DSL实现的细节。在本文中,我们提出了一套自定义类型错误诊断的技术,以避免这种泄漏。这些技术已经在GHC Haskell编译器中实现了。我们的自定义是在DSL提供的函数的类型签名中声明的,这会导致与上下文相关的类型错误消息:相同类型的错误可以根据其发生的特定表达式以不同的方式报告。我们利用了GHC中已经存在的类型级编程来操纵约束的能力,它支持对常见类型错误模式的重用和抽象。
{"title":"Type Error Customization in GHC: Controlling expression-level type errors by type-level programming","authors":"A. Serrano, Jurriaan Hage","doi":"10.1145/3205368.3205370","DOIUrl":"https://doi.org/10.1145/3205368.3205370","url":null,"abstract":"Embedded domain specific languages (DSLs) are a common pattern in the functional programming world, providing very high-level abstractions to programmer. Unfortunately, this abstraction is broken when type errors occur, leaking details of the DSL implementation. In this paper we present a set of techniques for customizing type error diagnosis in order to avoid this leaking. These techniques have been implemented in the GHC Haskell compiler. Our customizations are declared in the type signatures of functions provided by the DSL, leading to type error message that are context-dependent: the same kind of error can be reported in a different way depending on the particular expression in which it occurs. We make use of the ability to manipulate constraints using type-level programming which is already present in GHC, and which enables reuse and abstraction of common type error patterns.","PeriodicalId":180839,"journal":{"name":"Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages","volume":"11 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-08-30","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129867020","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 8
期刊
Proceedings of the 29th Symposium on the Implementation and Application of Functional Programming Languages
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1