# Cordelia Hall's research while affiliated with University of Glasgow and other places

**What is this page?**

This page lists the scientific contributions of an author, who either does not have a ResearchGate profile, or has not yet added these contributions to their profile.

It was automatically created by ResearchGate to create a record of this author's body of work. We create such pages to advance our goal of creating and maintaining the most comprehensive scientific repository possible. In doing so, we process publicly available (personal) data relating to the author as a member of the scientific community.

If you're a ResearchGate member, you can follow this page to keep up with this author's work.

If you are this author, and you don't want us to display this page anymore, please let us know.

It was automatically created by ResearchGate to create a record of this author's body of work. We create such pages to advance our goal of creating and maintaining the most comprehensive scientific repository possible. In doing so, we process publicly available (personal) data relating to the author as a member of the scientific community.

If you're a ResearchGate member, you can follow this page to keep up with this author's work.

If you are this author, and you don't want us to display this page anymore, please let us know.

## Publications (49)

Extensible sparse functional arrays (ESFA) is a persistent data structure with an implementation that performs every operation in O(1) time and space. There is no requirement for single threading of arrays, and no performance penalty for sharing. The implementation is an example of hardware/software co-design and also of active data structures. Thi...

Active data structures support operations that may affect a large number of elements of an aggregate data structure. They are well suited for extremely fine grain parallel systems, including circuit parallelism. General purpose GPUs were designed to support regular graphics algorithms, but their intermediate level of granularity makes them potentia...

Digital circuit simulation often requires a large amount of computation, resulting in long run times. We consider several techniques for optimising a brute force synchronous circuit simulator: an algorithm using an event queue that avoids recalculating quiescent parts of the circuit, a marking algorithm that is similar to the event queue but that a...

String players spend a significant amount of practice time creating and learning bowings. These may be indicated in the music using up-bow and down-bow symbols, but those traditional notations do not capture the complex bowing patterns that are latent within the music. Regular expressions, a mathematical notation for a simple class of formal langua...

In this paper we argue that Musicons, short samples from pieces of music are a useful way to present private but memorable reminder messages. We investigated accuracy, memorability and response times for short, medium, and long Musicons. User performance on the Musicons was also compared to short spoken reminders. The study consisted of two session...

Playing a string instrument, such as the violin, requires solving many problems in controlling the bow. For example, the player may find that ‘saving bow’ is crucial to getting through a passage, yet not know why. Computer models may be able to help musicians to understand
such problems better and to find solutions. We have developed a simple bowin...

This paper defines a set of type inference rules for resolving overloading introduced by type classes. Programs including type classes are transformed into ones which may be typed by the Hindley-Milner inference rules. In contrast to other work on type classes, the rules presented here relate directly to user programs. An innovative aspect of this...

The topic of this book is discrete mathematics with an emphasis on its connections with computers:
The computer can help you to learn and understand mathematics. As various mathematical objects are defined, software tools will enable you to perform calculations with those objects. Exploring and experimenting with mathematical ideas gives a practica...

Set theory is one of the most fundamental branches of mathematics. Many profound advances in mathematics over the last century have taken place in set theory, and there is a deep connection between set theory and logic. More importantly for computer science, it has turned out that the notation and terminology of elementary set theory is extremely u...

A common type of problem is to prove that an object x has some property P. The mathematical notation for this is P (x), where P stands for predicate (or property). For example, if x is 6 and P (x) is the predicate ‘x is an even number’, then we could express the statement ‘6 is an even number’ with the shorthand mathematical statement P(6).

A function is an abstract model of computation: you give it some input, and it produces a result. The essential aspect is that the result is completely determined by the input: if you repeatedly apply the same function to the same argument, you will always obtain the same result. Examples of functions include:
An inquiry to a telephone directory se...

Logic provides a powerful tool for reasoning correctly about mathematics, algorithms and computers. It is used extensively throughout computer science, and you need to understand its basic concepts in order to study many of the more advanced subjects in computing. Here are just a few examples, spanning the entire range of computing applications, fr...

Recursion is a self referential style of definition commonly used in both mathematics and computer science. It is a fundamental programming tool, particularly important for manipulating data structures.

There are many kinds of relationship that occur in everyday life. Some of these describe how the members of a family are related to each other: parent, child, brother, sister, sibling. We could also have a relation called is in for cities and countries: for example, London is in Great Britain, and Paris is in France. Or we could have a relation tha...

In this chapter, we explore the construction of sets using induction. To understand why induction is useful, consider the problem of defining a set. The simplest method is to define a set by naming each of its elements, one by one. This is called enumeration. It works only for finite sets and is impractical for large sets. Another approach is to us...

Introduction to Haskell * Propositional Logic * Predicate Logic * Set Theory * Recursion * Inductively Defined Sets * Induction * Relations * Functions * Digital Circuit Design * Appendix A: Software Tools for Discrete Mathematics * Appendix B: Resources on the Web * Appendix C: Solutions to Selected Exercises * Bibliography * Index.

It is frequently necessary to reason logically about statements of the form everything has the property p or something has the property p. One of the oldest and most famous pieces of logical reasoning, which was known to the ancient Greeks, is an example:
All men are mortal. Socrates is a man. Therefore Socrates is mortal.

The techniques of discrete mathematics which you have been studying in this book are used throughout computer science. So far we have seen many small examples of the application of mathematics to computing, and we have also used programming to help with the mathematics.

We investigate the claim that functional languages offer low-cost parallelism in the context of symbolic programs on modest parallel architectures. In our investigation we present the first comparative study of the construction of large applications in a parallel functional language, in our case in Glasgow Parallel Haskell (GPH). The applications c...

. String players know that bowing properly is the hardest skill they have to learn. In other work [4], we develop an algorithm that calculates bowings for BowTech, a project that supports string performers. This algorithm takes a significant amount of time to execute (in our second test case, over an hour for the implementation, written in Ada). We...

In performance-critical parts of functional programs substantial performance improvements can be achieved by using unboxed, instead of boxed, data types. Unfortunately, polymorphic functions and data types cannot directly manipulate unboxed values, precisely because they do not conform to the standard boxed representation. Instead, specialised, mon...

This is the final report on the GRASP project, carried out under SERC grants GR/F34671 and GR/F98444, at Glasgow University 1 2 . The project supported two Principal Investigators (Simon Peyton Jones and Phil Wadler), and three Research Assistants (Kevin Hammond, Cordelia Hall and Will Partain). Four research students have worked in close associati...

This paper defines a set of type inference rules for resolving overloading introduced by type classes. Programs including type classes are transformed into ones which may be typed by the HindleyMilner inference rules. In contrast to other work on type classes, the rules presented here relate directly to user programs. An innovative aspect of this w...

Hindley-Milner type inference and partial evaluation are all that is needed to optimize lists, yielding considerable improvements in space and time consumption for some interesting programs. This framework is applicable to many abstract data types and their optimized representations, such as lists and parallel implementations of bags, or arrays and...

Evaluators, also called "interpreters", play a variety of roles in the study of programming languages. Given this, it's surprising that we don't have a better framework for developing evaluators and specifying their relationship to each other. This paper shows that type classes in HASKELL provide an excellent framework for exploring relationships b...

This paper defines a dynamic semantics for the functional programming language Haskell. The semantics defines the meaning of expressions, modules and programs, including all nonoptional I/O requests. All constructs in the Haskell language are considered. We use the same natural semantics style as the definition of Standard ML. For brevity, we assum...

We’ve spent much of our time over the last two years implementing a new compiler for the functional language Haskell [HPW91]. In this effort, we’ve been joined by Andy Gill, who has implemented a strictness analyser, Andre Santos, who has contributed a ‘simplifier’, and Patrick Sansom, who wrote garbage collectors for our runtime system.

For many years, abstract interpretation has been thought of as the best way to formalize the analysis of semantic properties of functions, such as strictness. Recent publications suggest this may be changing. A number of new papers [1, 5] use sophisticated type systems to learn more about properties of functions. The goal of this work is to encapsu...

This paper considers the problems of debugging large programs written in a pure functional style by experienced functional programmers. Several levels of debugging support are defined: specification, algorithmic, semantic, architectural and machine. We focus on the provision of tools for supporting algorithmic and semantic debugging. A significant...

Expression evaluation in lazy applicative languages is usually implemented by an expensive mechanism requiring time and space which may be wasted if the expression eventually needs the values anyway. Strictness analysis, which has been successfully applied to flat domains and higher order functions, is used here to annotate programs in a first orde...

Applicative programming languages have several properties that appear to make debugging difficult. First, the absence of assignment statements complicates the notion of changing a program while debugging. Second, the absence of imperative input and output makes it harder to obtain information about what the program is doing. Third, the presence of...

Lisp and its successors provide the programmer with a powerful single tool [2] in which he can write, modify, debug and execute programs. Side effects play a crucial role in these programming environments. We propose an alternative approach to debugging that doesn't rely on side effects. Then we describe an implementation of our approach in a purel...

## Citations

... Tuples are written enclosed in parentheses and lists enclosed in square brackets. Thus (1,'a',3) is a three-tuple and [1,2,3] is a list of three elements. The latter is just syntactic sugar for 1:2:3:[], where : is the (right associative) list construction operator (pronounced 'cons') and [] is the empty list. ...

... This is obtained employing persistent software entity running on the GPU device, launched through a CUDA kernel invocation, which remains alive until all the jobs scheduled into a work-queue are exhausted. This approach led to interesting results in diverse areas of application such as active data structures [11], prefix-sum operation [12] and even 3D graphic rendering with ray-tracing [13] , but to the best of our knowledge it has never been applied to genetic algorithms. The novelty of this paper is to study how a GA can be successfully ported to a persistent thread style model and measuring its performance compared to "traditional" GAs on GP-GPU that are implemented with multiple CUDA kernel invocations or more or less implicit CPU-GPU synchronization points. ...

... { If traces could be selectively generated, only for functions which the user considers of interest, then the other parts of the program could execute at full speed. This seems an important avenue for future investigation, as suggested by Hall et al. 1990. There are a number of possible directions of future research based on the work reported here. ...

... Step 1) defined in the previous section is addressed by function and is defined as: given a collection of documents [ ] and a 2 The notation used for the formulas follows the Haskell functional programming language notation [18]. question , find the document (context) that is prone to contain the answer to question : ...

... Researchers consider a wide variety of characteristics and genre features of musical works of this direction (Craenen, 2014;Maslowski, 2022). Fragmentation can be used to interpret what, at first glance, is a collection of different genres, styles, incompatible from the ideological point of view, but, owing to the tools of postmodernism and mastery of performance, they are perceived as a new unity (Al Kasimi et al., 2007;Hall & O'Donnell, 2009). The focus of researchers of postmodern trends is on the peculiarities of performing skills, the search for a new view of innovation in the humanities education (Berndt, 2011;Chen & Zheng, 2021), the need to change the methods of teaching performers (Lipka, 2013;Murphy et al., 2020). ...

... For instance, a study focusing on Play-Based learning method to enhance the mastery ability of vocabulary among preschool children in Malaysia revealed that Play-Based strategy significantly enhanced the mastery of vocabulary and interest in learning the Malay language among pupils (Nasir, Yousof & Arumugam, 2103). This result is line with Hall & O'Donnell (2011) who presented that young children learn best through play, game, game stories, art, and puppetry which can aid social interaction. Also, Sharp, Escante & Anderson (2012) investigated literacy instruction in kindergarten using the power of dramatic play found positive outcome in children within the experimental group than the control group. ...

... Finne & Burn 1993] use \evaluation transformers" to evaluate lists more strictly (in the same spirit as the work described here), but for sequential implementations they nd few performance bene ts, and occasional large costs. In contrast, Hall 1993] uses strictness information over list types to guide a new transformation which uses a more e cient list representation where possible. The transformation gives substantial performance bene ts where it is applicable. ...

... Teaching functional programming and mathematics together is not a new idea, on the contrary, several authors since many years ago have used diverse languages to implement their purposes, notably [11,17]. To strengthening the link between mathematics and computer science both in university level studies as in secondary schools has been also a concern of computing teachers [1,15]. ...

... There are existing papers on the acceleration of digital circuit simulation using GPUs [22], [13], [23], [24], [25], [26] and multicores [1], [27]. In our work we use the Intel Xeon Phi [28] to run digital logic simulation. ...

... For example, \x -> 2*x is a function that when applied to a number yields that number multiplied by two, and the expression (\x -> x*x) 3 evaluates to 9. Tuples are written enclosed in parentheses and lists enclosed in square brackets. Thus (1,'a',3) is a three-tuple and [1,2,3] is a list of three elements. The latter is just syntactic sugar for 1:2: ...