Abstract
In these lectures we will introduce an interactive system that supports writing simple functional programs. Using this system, students learning functional programming:
-
develop their programs incrementally,
-
receive feedback about whether or not they are on the right track,
-
can ask for a hint when they are stuck,
-
see how a complete program is stepwise constructed,
-
get suggestions about how to refactor their program.
The system itself is implemented as a functional program, and uses fundamental concepts such as rewriting, parsing, strategies, program transformations and higher-order combinators such as the fold. We will introduce these concepts, and show how they are used in the implementation of the interactive functional programming tutor.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Similar content being viewed by others
References
Anderson, J.R., Conrad, F.G., Corbett, A.T.: Skill acquisition and the LISP tutor. Cognitive Science 13, 467–505 (1986)
Back, R.-J.: A calculus of refinements for program derivations. In: Reports on Computer Science and Mathematics 54. Åbo Akademi (1987)
Berger, U., Eberl, M., Schwichtenberg, H.: Normalization by Evaluation. In: Möller, B., Tucker, J.V. (eds.) Prospects for Hardware Foundations. LNCS, vol. 1546, pp. 117–137. Springer, Heidelberg (1998)
Bergstra, J.A., Klop, J.W.: Algebra of communicating processes with abstraction. Theoretical Computer Science 37, 77–121 (1985)
Bird, R.S.: An introduction to the theory of lists. In: Broy, M. (ed.) Logic of Programming and Calculi of Discrete Design. NATO ASI Series, vol. F36, pp. 5–42. Springer (1987)
Brown, J.S., Burton, R.R.: Diagnostic models for procedural bugs in basic mathematical skills. Cognitive Science 2, 155–192 (1978)
Bundy, A.: The Computer Modelling of Mathematical Reasoning. Academic Press (1983)
Dijkstra, E.W.: Guarded commands, nondeterminacy and formal derivation of programs. Commun. ACM 18, 453–457 (1975)
Felleisen, M., Findler, R.B., Flatt, M., Krishnamurthi, S.: How to design programs: an introduction to programming and computing. MIT Press, Cambridge (2002)
Filinski, A., Rohde, H.K.: A Denotational Account of Untyped Normalization by Evaluation. In: Walukiewicz, I. (ed.) FOSSACS 2004. LNCS, vol. 2987, pp. 167–181. Springer, Heidelberg (2004)
Fincher, S., Petre, M. (eds.): Computer Science Education Research. RoutledgeFalmer (2004)
Fokker, J.: Functional Parsers. In: Jeuring, J., Meijer, E. (eds.) AFP 1995. LNCS, vol. 925, pp. 1–23. Springer, Heidelberg (1995)
Fokkink, W.: Introduction to Process Algebra. Springer (2000) ISBN 354066579X
Gerdes, A., Heeren, B., Jeuring, J., Stuurman, S.: Feedback services for exercise assistants. In: Remenyi, D. (ed.) ECEL 2007: Proceedings of the 7th European Conference on e-Learning, pp. 402–410. Academic Publishing Limited (2008); Also available as Technical report Utrecht University UU-CS-2008-018
Gerdes, A., Jeuring, J., Heeren, B.: Using strategies for assessment of programming exercises. In: Lewandowski, G., Wolfman, S.A., Cortina, T.J., Walker, E.L. (eds.) SIGCSE, pp. 441–445. ACM (2010)
Gerdes, A., Jeuring, J., Heeren, B.: Teachers and students in charge — using annotated model solutions in a functional programming tutor. Technical report, Utrecht University, Department of Computer Science (to appear, 2012)
Guzdial, M.: Programming environments for novices. In: Fincher, S., Petre, M. (eds.) Computer Science Education Research. RoutledgeFalmer (2004)
Hattie, J., Timperley, H.: The power of feedback. Review of Educational Research 77(1), 81–112 (2007)
Heeren, B., Jeuring, J.: Recognizing strategies. In: Middeldorp, A. (ed.) WRS 2008: Reduction Strategies in Rewriting and Programming, 8th International Workshop (2008)
Heeren, B., Jeuring, J.: Canonical Forms in Interactive Exercise Assistants. In: Carette, J., Dixon, L., Coen, C.S., Watt, S.M. (eds.) Calculemus/MKM 2009. LNCS (LNAI), vol. 5625, pp. 325–340. Springer, Heidelberg (2009)
Heeren, B., Jeuring, J.: Adapting Mathematical Domain Reasoners. In: Autexier, S., Calmet, J., Delahaye, D., Ion, P.D.F., Rideau, L., Rioboo, R., Sexton, A.P. (eds.) AISC/Calculemus/MKM 2010. LNCS (LNAI), vol. 6167, pp. 315–330. Springer, Heidelberg (2010)
Heeren, B., Jeuring, J.: Interleaving Strategies. In: Davenport, J.H., Farmer, W.M., Urban, J., Rabe, F. (eds.) Calculemus/MKM 2011. LNCS (LNAI), vol. 6824, pp. 196–211. Springer, Heidelberg (2011)
Heeren, B., Leijen, D., van IJzendoorn, A.: Helium, for learning Haskell. In: Haskell 2003: Proceedings of the 2003 ACM SIGPLAN Workshop on Haskell, pp. 62–71. ACM (2003)
Heeren, B., Jeuring, J., van Leeuwen, A., Gerdes, A.: Specifying Strategies for Exercises. In: Autexier, S., Campbell, J., Rubio, J., Sorge, V., Suzuki, M., Wiedijk, F. (eds.) AISC/Calculemus/MKM 2008. LNCS (LNAI), vol. 5144, pp. 430–445. Springer, Heidelberg (2008)
Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12, 576–580 (1969)
Hoare, C.A.R.: Communicating sequential processes. Prentice-Hall, Inc. (1985) ISBN 0-13-153271-5
Hong, J.: Guided programming and automated error analysis in an intelligent Prolog tutor. International Journal on Human-Computer Studies 61(4), 505–534 (2004)
Huet, G.: Functional Pearl: The Zipper. Journal of Functional Programming 7(5), 549–554 (1997)
Hutton, G.: Higher-order Functions for Parsing. Journal of Functional Programming 2(3), 323–343 (1992)
Meertens, L.: Algorithmics — towards programming as a mathematical activity. In: Proceedings of the CWI Symposium on Mathematics and Computer Science. CWI Monographs, vol. 1, pp. 289–334. North–Holland (1986)
van Merriënboer, J.J.G., Paas, F.G.W.C.: Automation and schema acquisition in learning elementary computer programming: Implications for the design of practice. Computers in Human Behavior 6, 273–289 (1990)
Miller, P., Pane, J., Meter, G., Vorthmann, S.: Evolution of Novice Programming Environments: The Structure Editors of Carnegie Mellon University. Interactive Learning Environments 4(2), 140–158 (1994)
Morgan, C.: Programming from specifications. Prentice-Hall, Inc. (1990)
Jones, S.P., et al.: Haskell 98, Language and Libraries. The Revised Report. Cambridge University Press (2003); A special issue of the Journal of Functional Programming, http://www.haskell.org/
Soloway, E.: From problems to programs via plans: the content and structure of knowledge for introductory LISP programming. Journal of Educational Computing Research 1(2), 157–172 (1985)
Doaitse Swierstra, S., Duponcheel, L.: Deterministic, Error-correcting Combinator Parsers. In: Launchbury, J., Meijer, E., Sheard, T. (eds.) AFP 1996. LNCS, vol. 1129, pp. 184–207. Springer, Heidelberg (1996)
Doaitse Swierstra, S.: Combinator Parsing: A Short Tutorial. In: Bove, A., Barbosa, L.S., Pardo, A., Pinto, J.S. (eds.) Language Engineering and Rigorous Software Development. LNCS, vol. 5520, pp. 252–300. Springer, Heidelberg (2009)
VanLehn, K.: The behavior of tutoring systems. International Journal on Artificial Intelligence in Education 16(3), 227–265 (2006)
Vanlehn, K., Lynch, C., Schulze, K., Shapiro, J.A., Shelby, R., Taylor, L., Treacy, D., Weinstein, A., Wintersgill, M.: The andes physics tutoring system: Lessons learned. International Journal on Artificial Intelligence in Education 15, 147–204 (2005)
Xu, S., Chee, Y.S.: Transformation-based diagnosis of student programs for programming tutoring systems. IEEE Transactions on Software Engineering 29(4), 360–384 (2003)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2012 Springer-Verlag Berlin Heidelberg
About this chapter
Cite this chapter
Jeuring, J., Gerdes, A., Heeren, B. (2012). A Programming Tutor for Haskell. In: Zsók, V., Horváth, Z., Plasmeijer, R. (eds) Central European Functional Programming School. CEFP 2011. Lecture Notes in Computer Science, vol 7241. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-32096-5_1
Download citation
DOI: https://doi.org/10.1007/978-3-642-32096-5_1
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-32095-8
Online ISBN: 978-3-642-32096-5
eBook Packages: Computer ScienceComputer Science (R0)