diff --git a/README.md b/README.md index 1bd3477..16e201e 100644 --- a/README.md +++ b/README.md @@ -122,5 +122,6 @@ Some possible syntax for a more expressive stack-based DSL 10 to 100 =: y # content of the stack at this point saved into y -x - 10B * y # if interpreting x and y as list of samples, you could do - and + operations as well +x # put x on the stack +- y # substract y from the content of the stack. Requires interpreting x and y as list of samples ``` diff --git a/f2.go b/f2.go new file mode 100644 index 0000000..a1e7b54 --- /dev/null +++ b/f2.go @@ -0,0 +1,60 @@ +package main + +import ( + "bufio" + "fmt" + // "math" + "os" + // "strconv" + "strings" +) + +// Actually, I should look up how do do a) enums in go, b) union types +type Lognormal struct { + low float64 + high float64 +} + +type Dist struct { + Type string + Lognormal Lognormal + Samples []float64 +} + +func parseLine(line string) (string, Dist, error) { + + words := strings.Split(strings.TrimSpace(line), " ") + + switch { + case len(words) == 2 && words[0] == "*": + fmt.Printf("Hello world") + } +} + +func joinDists(old_dist Dist, new_dist Dist, op string) (Dist, err) { + return old_dist, nil +} + +func main() { + reader := bufio.NewReader(os.Stdin) + old_dist := Dist{Type: "Lognormal", Lognormal: Lognormal{low: 1, high: 1}, Samples: nil} // Could also just be a scalar + fmt.Printf("Hello world") + +EventForLoop: + for { + input, _ := reader.ReadString('\n') + if strings.TrimSpace(input) == "" { + continue EventForLoop + } + + op, new_dist, err := parseLine(input) + if err != nil { + + } + joint_dist, err := joinDists(old_dist, new_dist, op) + if err != nil { + + } + old_dist = joint_dist + } +}