Advertisement

Static analysis of functional programs with logical variables

  • Gary Lindstrom
Functional Programming And Logic Programming
Part of the Lecture Notes in Computer Science book series (LNCS, volume 348)

Abstract

It has recently been discovered by several researchers that logical variables, even under unconditional unification, can significantly increase the expressive power of functional programming languages. Capabilities added under this extension include (i) support for use before binding of variables, e.g. in constructing functionally attributed parse trees; (ii) computation by constraint intersection, e.g. polymorphic type checking; (iii) “micro object” support for object oriented programming, e.g. for direct message delivery, and (iv) monotonic refinement of complex data structures, e.g. function evaluation by graph reduction.

Keywords

Logic Programming Computer Architecture Logical Variable Normal Order Functional Programming 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. [1]
    Arvind, Vinod Kathail, and Keshav Pingali. Sharing of Computation in Functional Language Implementations. In Proceedings of International Workshop on High-level Computer Architecture, Los Angeles, May 21–25 1984.Google Scholar
  2. [2]
    Arvind, R. S. Nikhil, and K. K. Pingali. I-Structures: Data Structures for Parallel Computing. In Joseph H. Fasel and Robert M. Keller, editors, Graph Reduction: Proceedings of a Workshop, pages 336–369, Springer-Verlag, 1987. Lecture Notes in Computer Science No. 279.Google Scholar
  3. [3]
    Göran Båge and Gary Lindstrom. Combinator Evaluation of Functional Programs with Logical Variables. Technical Report UUCS-87-027, Department of Computer Science, University of Utah, October 1987.Google Scholar
  4. [4]
    Göran Båge and Gary Lindstrom. Committed Choice Functional Programming. In Proc. International Conference on Fifth Generation Computer Systems, Institute for New Generation Computer Technology (ICOT), Tokyo, November 1988.Google Scholar
  5. [5]
    Adrienne Bloss and Paul Hudak. Variations on Strictness Analysis. In Conference on Lisp and Functional Programming, pages 132–142, ACM, Cambridge, Massachusetts, August 1986.Google Scholar
  6. [6]
    G. L. Burn, C. L. Hankin, and S. Abramsky. Theory and practice of strictness analysis for higher order functions. April 1985. Dept. of Computing, Imperial College of Science and Technology.Google Scholar
  7. [7]
    C. Clack and S. L. Peyton Jones. Generating parallelism from strictness analysis. In Prof. Conf. on Func. Prog. Lang. and Comp. Arch., IFIP, Nancy, France, September 1985. Lecture Notes in Computer Science, number 201.Google Scholar
  8. [8]
    C. Clack and S. L. Peyton Jones. Strictness Analysis-A Practical Approach. In Proc. Conf. on Functional Programming Languages and Computer Architectures, pages 35–49, Springer Verlag, 1985. Lecture Notes in Computer Science, number 201.Google Scholar
  9. [9]
    S. H. Danforth. Logical Variables for a Functional Language. Technical Report PP-120–85, Microelectronics and Computer Technology Corp., 1985.Google Scholar
  10. [10]
    Saumya K. Debray and David S. Warren. Automatic Mode Inference for Prolog Programs. In Robert M. Keller, editor, Symposium on Logic Programming, pages 78–88, IEEE Computer Society, Salt Lake City, September 1986.Google Scholar
  11. [11]
    D. DeGroot and G. Lindstrom. Logic Programming: Functions, Relations and Equations. Prentice-Hall, Englewood Cliffs, NJ, 1986. $39.95; reviews in Computing Reviews Aug. 1987, no. 8708-0643; SIGART Newsletter, July 1987, no. 101.Google Scholar
  12. [12]
    Jon Fairbairn and Stuart Wray. TIM: A Simple, Lazy Abstract Machine to Execute Combinators. In Proc. Conf. on Functional Programming Languages and Computer Architectures, pages 34–45, Springer Verlag, 1987. Lecture Notes in Computer Science, number 274.Google Scholar
  13. [13]
    Lal George. Efficient Normal Order Evaluation Through Strictness Information. MS thesis, University of Utah, March 1987.Google Scholar
  14. [14]
    B. Goldberg and P. Hudak. Serial Combinators: Optimal Grains of Parallelism. In Proc. Conf. on Functional Programming Languages and Computer Architectures, pages 382–399, Springer Verlag, Nancy, France, 1985. Lecture Notes in Computer Science, number 201.Google Scholar
  15. [15]
    Cordelia V. Hall and David S. Wise. Compiling Strictness Into Streams. Technical Report 209, Indiana Univ., December 1986.Google Scholar
  16. [16]
    P. Hudak and J. Young. A set-theoretic characterization of function strictness in the lambda calculus. In Proc. Workshop on Implementations of Functional Languages, Chalmers Univ., Aspenas, Sweden, February 1985.Google Scholar
  17. [17]
    J. Hughes. Strictness detection in non-flat domains. 1985. Programming Research Group, Oxford.Google Scholar
  18. [18]
    John Hughes. Super Combinators: a New Implementation Method for Applicative Languages. In Proc. Symp. on Lisp and Func. Pgmming. and Computer Architectures, pages 1–10, ACM, Pittsburgh, Pa., 1982.Google Scholar
  19. [19]
    T. Johnsson. Efficient compilation of lazy evaluation. In Proc. Symp. on Compiler Const., ACM SIGPLAN, Montreal, 1984.Google Scholar
  20. [20]
    T. Johnsson. Lambda Lifting: Transforming Programs to Recursive Equations. In J.-P. Jouannaud, editor, Proc. Symp. on Functional Programming Languages and Computer Architectures, pages 190–203, Springer-Verlag, 1985.Google Scholar
  21. [21]
    R. M. Keller and G. Lindstrom. Applications of Feedback in Functional Programming. In Proc. Conf. on Functional Programming Languages and Computer Architecture, pages 123–130, Portsmouth, NH, October 1981. Appeared in preliminary form as Invited Paper, Symposium on Functional Languages and Computer Architecture, Laboratory on Programming Methodology, Department of Computer Sciences, Chalmers University of Technology, Goteborg, Sweden, June 1981.Google Scholar
  22. [22]
    R. B. Kieburtz. Abstract Interpretations Over Infinite Domains Cannot Terminate Uniformly. February 17, 1986. Unpublished note, Dept. of Computer Science, Oregon Graduate Center.Google Scholar
  23. [23]
    R. B. Kieburtz and M. Napierala. A Studied Laziness — Strictness Analysis With Structured Data Types. 1985. Extended abstract, Oregon Graduate Center.Google Scholar
  24. [24]
    Richard B. Kieburtz. Functions + Logic in Theory and Practice. February 25, 1987. 21 pp. unpublished paper.Google Scholar
  25. [25]
    Richard B. Kieburtz. Semantics of a Functions + Logic Language. September 3, 1986. 17 pp. unpublished paper.Google Scholar
  26. [26]
    T.-M. Kuo and P. Mishra. On Strictness and its Analysis. In Proc. Symp. on Princ. of Pgmming. Lang., ACM, Munich, West Germany, March 1987.Google Scholar
  27. [27]
    G. Lindstrom. Functional Programming and the Logical Variable. In Proc. Symp. on Princ. of Pgmming. Lang., pages 266–280, ACM, New Orleans, January 1985. Also available as INRIA Rapport de Recherche No. 357.Google Scholar
  28. [28]
    G. Lindstrom. Implementing Logical Variables on a Graph Reduction Architecture. In R. M. Keller and J. Fasel, editors, Proc. Santa Fe Workshop on Graph Reduction, pages 382–400, Springer-Verlag, 1987. Lecture Notes in Computer Science 279.Google Scholar
  29. [29]
    G. Lindstrom. Notes on Object Oriented Programming in FGL+LV. March 20, 1985. Unpublished working document.Google Scholar
  30. [30]
    G. Lindstrom. Static Evaluation of Functional Programs. In Proc. Symposium on Compiler Construction, pages 196–206, ACM SIGPLAN, Palo Alto, CA, June 1986.Google Scholar
  31. [31]
    G. Lindstrom, L. George, and D. Yeh. Generating Efficient Code from Strictness Annotations. In TAPSOFT'87: Proc. Second International Joint Conference on Theory and Practice of Software Development, pages 140–154, Pisa, Italy, March 1987. Springer Lecture Notes in Computer Science No. 250.Google Scholar
  32. [32]
    Gary Lindstrom, Lal George, and Dowming Yeh. Compiling Normal Order to Fair and Incremental Persistence. August 1987. Technical summary; 12 pp.Google Scholar
  33. [33]
    R. Milner. A Theory of Type Polymorphism. J. of Comp. and Sys. Sci., 17(3):348–375, 1978.Google Scholar
  34. [34]
    Robin Milner. The Standard ML Core Language (Revised). LFCS Report ECS-LFCS-86-2, Dept. of Computer Science, Univ. of Edinburgh, Scotland, March 1986. Part I of Standard ML, by Robert Harper, David MacQueen and Robin Milner.Google Scholar
  35. [35]
    R. S. Nikhil. Id World Reference Manual (for Lisp Machines). Technical Report Computation Structures Group Memo, MIT Laboratory for Computer Science, April 24, 1987.Google Scholar
  36. [36]
    R. S. Nikhil, K. Pingali, and Arvind. Id Nouveau. Technical Report Computation Structures Group Memo 265, MIT Laboratory for Computer Science, July 1986.Google Scholar
  37. [37]
    Keshav K. Pingali. Demand-Driven Evaluation on Dataflow Machines. PhD thesis, Mass. Inst. of Tech., Cambridge, Mass., May 1986.Google Scholar
  38. [38]
    Keshav K. Pingali. Lazy Evaluation and the Logical Variable. In Proc. Inst. on Declarative Programming, Univ. of Texas, Austin, Texas, August 24–29, 1987.Google Scholar
  39. [39]
    U.S. Reddy. On the Relationship Between Functional and Logic Languages. In D. DeGroot and G. Lindstrom, editors, Logic Programming: Functions, Relations, and Equations, Prentice Hall, 1986.Google Scholar
  40. [40]
    Mary Sheeran. Designing Regular Array Architectures Using Higher Order Functions. In Proc. Conf. on Functional Programming Languages and Computer Architectures, pages 220–237, Springer Verlag, Nancy, France, 1985. Lecture Notes in Computer Science, number 201.Google Scholar
  41. [41]
    Stephen Taylor, Shmuel Safra, and Ehud Shapiro. A Parallel Implementation of Flat Concurrent Prolog. International Journal of Parallel Programming, 15(3):245–275, June 1986.Google Scholar
  42. [42]
    D. A. Turner. A New Implementation Technique for Applicative Languages. Software Practice and Experience, 9:31–49, 1979.Google Scholar
  43. [43]
    K. Ueda. Guarded Horn Clauses: A Parallel Logic Programming Language with the Concept of a Guard. Technical Report TR-208, ICOT, Tokyo, 1986.Google Scholar
  44. [44]
    Phil Wadler. Strictness analysis on non-flat domains (by abstract interpretation over finite domains). November 10, 1985. Unpublished note, Programming Research Group, Oxford Univ.Google Scholar
  45. [45]
    D. H. D. Warren. An Abstract Prolog Instruction Set. SRI Project 4776 Technical Note 309, SRI International, Menlo Park, Calif., October 1983.Google Scholar
  46. [46]
    S. C. Wray. A new strictness detection algorithm. In Proc. Workshop on Implementations of Functional Languages, Chalmers Univ., Aspenas, Sweden, February 1985.Google Scholar
  47. [47]
    Dowming Yeh. Static Evaluation of a Functional Language Through Strictness Analysis. MS thesis, University of Utah, September 1987.Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1989

Authors and Affiliations

  • Gary Lindstrom
    • 1
  1. 1.Department of Computer ScienceUniversity of UtahSalt Lake CityUSA

Personalised recommendations