mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-02-02 01:30:34 +00:00
Add lambda functions
This commit is contained in:
parent
9eb0e7286a
commit
f3e98ec134
35
README.md
35
README.md
@ -67,6 +67,7 @@ Different projects have led to the architecture of PLASMA, most notably Apple Pa
|
|||||||
- [Assignment](#assignment)
|
- [Assignment](#assignment)
|
||||||
- [Empty Assignments](#empty-assignments)
|
- [Empty Assignments](#empty-assignments)
|
||||||
- [Increment and Decrement](#increment-and-decrement)
|
- [Increment and Decrement](#increment-and-decrement)
|
||||||
|
- [Lambda Function](#lambda_function)
|
||||||
- [Control Flow](#control-flow)
|
- [Control Flow](#control-flow)
|
||||||
- [CALL](#call)
|
- [CALL](#call)
|
||||||
- [RETURN](#return)
|
- [RETURN](#return)
|
||||||
@ -464,6 +465,22 @@ keyin = @keyin2plus // address-of keyin2plus function
|
|||||||
key = keyin()
|
key = keyin()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Lambda functions are anonymous functions that can be used to return a value (or multiple values). They can be used as function pointers to routines that need a quick and dirty expression. They are written an '&' (a poor man's lambda symbol) followed by parameters in parentheses, and the resultant expression. There are no local variables allowed.
|
||||||
|
|
||||||
|
```
|
||||||
|
word result
|
||||||
|
|
||||||
|
def eval_op(x, y, op)
|
||||||
|
result = result + op(x, y)
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
def keyin(x, y, key)
|
||||||
|
if key == '+'
|
||||||
|
eval(x, y, &(x, y) x + y)
|
||||||
|
fin
|
||||||
|
end
|
||||||
|
````
|
||||||
Control statements affect the flow of control through the program. There are conditional and looping constructs. The most widely used is probably the `if`/`elsif`/`else`/`fin` construct.
|
Control statements affect the flow of control through the program. There are conditional and looping constructs. The most widely used is probably the `if`/`elsif`/`else`/`fin` construct.
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -1004,7 +1021,6 @@ keypress = ^$C000 // read keyboard
|
|||||||
^$C010 // read keyboard strobe, throw away value
|
^$C010 // read keyboard strobe, throw away value
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Increment and Decrement
|
### Increment and Decrement
|
||||||
|
|
||||||
PLASMA has an increment and decrement statement. This is different than the increment and decrement operations in languages like C and Java. Instead, they cannot be part of an expression and only exist as a statement in postfix:
|
PLASMA has an increment and decrement statement. This is different than the increment and decrement operations in languages like C and Java. Instead, they cannot be part of an expression and only exist as a statement in postfix:
|
||||||
@ -1019,6 +1035,23 @@ i-- // decrement i by 1
|
|||||||
puti(i) // print 4
|
puti(i) // print 4
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Lambda Functions
|
||||||
|
|
||||||
|
A Lambda function is a simple, anonymous function that can be passed to a function or assigned to a variable. It is called as a function pointer. The function can take a number of parameters and return a value based on the parameters and global values. By enclosing the expression of the lambda function in paranthesis, multiple values can be returned.
|
||||||
|
|
||||||
|
```
|
||||||
|
def lambdas#0
|
||||||
|
word lambda1
|
||||||
|
word lambda2
|
||||||
|
word x, y
|
||||||
|
|
||||||
|
lambda1 = &(a, b) a + b
|
||||||
|
lambda2 = &(a, b) (a + b, a - b)
|
||||||
|
x = lambda1(1, 2)#1
|
||||||
|
x, y = lambda2(3, 4)#2
|
||||||
|
end
|
||||||
|
````
|
||||||
|
|
||||||
### Control Flow
|
### Control Flow
|
||||||
|
|
||||||
PLASMA implements most of the control flow that most high-level languages provide. It may do it in a slightly different way, though. One thing you won't find in PLASMA is GOTO - there are other ways around it.
|
PLASMA implements most of the control flow that most high-level languages provide. It may do it in a slightly different way, though. One thing you won't find in PLASMA is GOTO - there are other ways around it.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user