mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 01:57:54 +00:00
81 lines
3.0 KiB
Org Mode
81 lines
3.0 KiB
Org Mode
|
:PROPERTIES:
|
||
|
:ID: 7dda635c-392c-4439-b5d7-c350fa4ed07f
|
||
|
:END:
|
||
|
#+title: The overview of a programming environment
|
||
|
#+date: "2020-06-09 06:21:37 +08:00"
|
||
|
#+date_modified: "2021-05-04 20:52:15 +08:00"
|
||
|
#+language: en
|
||
|
#+tags: compsci
|
||
|
|
||
|
|
||
|
The study of [[id:af4a2867-dfa6-4241-950d-2fdb9cf3016c][Computational processes]] start with the study of a programming environment.
|
||
|
The programming environment is mostly a given in programming but let's inspect and state some things (and some are obvious) about it.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* The elements of programming
|
||
|
|
||
|
A programming language enables you to make the following:
|
||
|
|
||
|
- Expressions ranging from a primitive value to a complex type.
|
||
|
- A way to combine simple expressions into complex ones.
|
||
|
- A way to abstract procedures into higher-level processes.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Expressions
|
||
|
|
||
|
Expressions may be of a primitive value (e.g., ~265~, ~-1.0~, ~'string~) or *combinations* which are composed of operators and expressions (e.g., ~(+ 2 6)~, ~(* 6 3)~).
|
||
|
An expression can also hold expressions referred to as a subexpression (e.g., ~(+ (* 5 12) (- 54 6) 9)~).
|
||
|
[fn:: In Lisp, it uses the *prefix notation* which places the operator in the leftmost of the expression.
|
||
|
It has the advantage of removing ambiguity for indicating its arguments (e.g., ~5 + 67 + (6 * 4)~ vs ~(+ 5 67 (* 6 4))~).]
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Namespacing and function composition
|
||
|
|
||
|
A programming environment should have a way to refer to computational objects.
|
||
|
These often comes in the form of names with each referring to a value (e.g., ~(define x 10)~).
|
||
|
|
||
|
A programming language should also provide the way to combine simple procedures to compound procedures (e.g., ~(define (square x) (* x x))~) which can be referred to by name (e.g., ~(square 10)~ evaluates to ~100~).
|
||
|
With that said, we can then combine compound procedures to create a procedure of higher level (e.g., ~(define (sum-of-squares x y) (+ (square x) (square y)))~).
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Conditionals
|
||
|
|
||
|
With expressions, environment, and function composition, we can create simple programs.
|
||
|
However, we cannot create functions that may test for the value (e.g., [[wikipedia:Piecewise functions][piecewise functions]]).
|
||
|
For this, a way to conditionally evaluate a value is a must for a programming language.
|
||
|
|
||
|
Here's an example function of getting the absolute value of a number.
|
||
|
|
||
|
#+begin_src scheme :results silent
|
||
|
(define (abs x)
|
||
|
(cond
|
||
|
((< x 0) (- x))
|
||
|
(else x)))
|
||
|
#+end_src
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Evaluation model
|
||
|
|
||
|
Each interpreter implements a different way to evaluate expressions.
|
||
|
|
||
|
One of the simplest evaluation model is the *substitution model* [fn:: It is also used as a introductory tool for learning interpreters even though this is not how interpreters really work.].
|
||
|
The substitution model works by knowing the meaning of each value and substituting the value with its equivalent.
|
||
|
[fn:: The substitution model can also evaluate in *applicative* or *normal* order.]
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* Related resources
|
||
|
|
||
|
- [[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-10.html][/Structure and interpretation of computer programs/, chapter 1]]
|