4,431 research outputs found
Structural Induction Principles for Functional Programmers
User defined recursive types are a fundamental feature of modern functional
programming languages like Haskell, Clean, and the ML family of languages.
Properties of programs defined by recursion on the structure of recursive types
are generally proved by structural induction on the type. It is well known in
the theorem proving community how to generate structural induction principles
from data type declarations. These methods deserve to be better know in the
functional programming community. Existing functional programming textbooks
gloss over this material. And yet, if functional programmers do not know how to
write down the structural induction principle for a new type - how are they
supposed to reason about it? In this paper we describe an algorithm to generate
structural induction principles from data type declarations. We also discuss
how these methods are taught in the functional programming course at the
University of Wyoming. A Haskell implementation of the algorithm is included in
an appendix.Comment: In Proceedings TFPIE 2013, arXiv:1312.221
Learn Physics by Programming in Haskell
We describe a method for deepening a student's understanding of basic physics
by asking the student to express physical ideas in a functional programming
language. The method is implemented in a second-year course in computational
physics at Lebanon Valley College. We argue that the structure of Newtonian
mechanics is clarified by its expression in a language (Haskell) that supports
higher-order functions, types, and type classes. In electromagnetic theory, the
type signatures of functions that calculate electric and magnetic fields
clearly express the functional dependency on the charge and current
distributions that produce the fields. Many of the ideas in basic physics are
well-captured by a type or a function.Comment: In Proceedings TFPIE 2014, arXiv:1412.473
An algebraic basis for specifying and enforcing access control in security systems
Security services in a multi-user environment are often based on access control mechanisms. Static aspects of an access control policy can be formalised using abstract algebraic models. We integrate these static aspects into a dynamic framework considering requesting access to resources as a process aiming at the prevention of access control violations when a program is executed. We use another algebraic technique, monads, as a meta-language to integrate access control operations into a functional
programming language. The integration of monads and concepts from a denotational model for process algebras provides a framework for programming of access control in security systems
Forty hours of declarative programming: Teaching Prolog at the Junior College Utrecht
This paper documents our experience using declarative languages to give
secondary school students a first taste of Computer Science. The course aims to
teach students a bit about programming in Prolog, but also exposes them to
important Computer Science concepts, such as unification or searching
strategies. Using Haskell's Snap Framework in combination with our own
NanoProlog library, we have developed a web application to teach this course.Comment: In Proceedings TFPIE 2012, arXiv:1301.465
Learn Quantum Mechanics with Haskell
To learn quantum mechanics, one must become adept in the use of various
mathematical structures that make up the theory; one must also become familiar
with some basic laboratory experiments that the theory is designed to explain.
The laboratory ideas are naturally expressed in one language, and the
theoretical ideas in another. We present a method for learning quantum
mechanics that begins with a laboratory language for the description and
simulation of simple but essential laboratory experiments, so that students can
gain some intuition about the phenomena that a theory of quantum mechanics
needs to explain. Then, in parallel with the introduction of the mathematical
framework on which quantum mechanics is based, we introduce a calculational
language for describing important mathematical objects and operations, allowing
students to do calculations in quantum mechanics, including calculations that
cannot be done by hand. Finally, we ask students to use the calculational
language to implement a simplified version of the laboratory language, bringing
together the theoretical and laboratory ideas.Comment: In Proceedings TFPIE 2015/6, arXiv:1611.0865
Dynamically typed languages
Dynamically typed languages such as Python and Ruby have experienced a rapid grown in popularity in recent times. However, there is much confusion as to what makes these languages interesting relative to statically typed languages, and little knowledge of their rich history. In this chapter I explore the general topic of dynamically typed languages, how they differ from statically typed languages, their history, and their defining features
Characterizing traits of coordination
How can one recognize coordination languages and technologies? As this report
shows, the common approach that contrasts coordination with computation is
intellectually unsound: depending on the selected understanding of the word
"computation", it either captures too many or too few programming languages.
Instead, we argue for objective criteria that can be used to evaluate how well
programming technologies offer coordination services. Of the various criteria
commonly used in this community, we are able to isolate three that are strongly
characterizing: black-box componentization, which we had identified previously,
but also interface extensibility and customizability of run-time optimization
goals. These criteria are well matched by Intel's Concurrent Collections and
AstraKahn, and also by OpenCL, POSIX and VMWare ESX.Comment: 11 pages, 3 table
em Where do I begin? A problem solving approach to teaching functional programming
This paper introduces a problem solving method for teaching functional programming, based on Polya's `How To Solve It', an introductory investigation of mathematical method. We first present the language independent version, and then show in particular how it applies to the development of programs in Haskell. The method is illustrated by a sequence of examples and a larger case study
- ā¦