Skip to content

Commit

Permalink
Message: removed "is" (#36)
Browse files Browse the repository at this point in the history
- "is" was only used in first section.
- "is" leads to awkward syntax like `(is int (...))` where the semantics of "is" and "int" are not clear.
- Removal and introduction of `is:int`, `is:square`, `is:prime`
  simplifies syntax (`is int | unary 1 0` vs. `is:int | unary 1 0`).
- The semantics of `is:int` is clear: it gets a number and outputs a bool
  and therefore leads to a statement with boolean value (should be true at top level of message).
- This is in line with the later statements, where e.g. comparisons take place.
  • Loading branch information
joha2 authored Apr 20, 2022
1 parent 6a81d22 commit f1bfda9
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 18 deletions.
13 changes: 6 additions & 7 deletions msg/COS_Intro.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,31 @@ var cos = require("./cosmic");
cos.language(2);

cos.add("intro unary");
cos.add("intro is");
cos.add("intro int");
cos.add("intro is:int");
for (var i=0; i<16; i++) {
var ones = "";
for (var j=0; j<i; j++) {
ones += " 1";
}
cos.add("is int | unary" + ones + " 0");
cos.add("is:int | unary" + ones + " 0");
}

cos.add("intro square");
cos.add("intro is:square");
for (var i=0; i<6; i++) {
var ones = "";
for (var j=0; j<i*i; j++) {
ones += " 1";
}
cos.add("is square | unary" + ones + " 0");
cos.add("is:square | unary" + ones + " 0");
}

cos.add("intro prime");
cos.add("intro is:prime");
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31];
for (var i=0; i<primes.length; i++) {
var prime = primes[i];
var ones = "";
for (var j=0; j<prime; j++) {
ones += " 1";
}
cos.add("is prime | unary" + ones + " 0");
cos.add("is:prime | unary" + ones + " 0");
}
7 changes: 3 additions & 4 deletions msg/COS_Message.scm
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@

# this line is referred to later - change/move carefully
(equal (list-ref $primer 0) | vector intro unary);
(equal (list-ref $primer 1) | vector intro is);
(equal (list-ref $primer 2) | vector intro int);
(equal (list-ref $primer 3) | vector is int | vector unary 0);
(equal (list-ref $primer 4) | vector is int | vector unary 1 0);
(equal (list-ref $primer 1) | vector intro is:int);
(equal (list-ref $primer 2) | vector is:int | vector unary 0);
(equal (list-ref $primer 3) | vector is:int | vector unary 1 0);
(assign idx (list:find $primer | vector intro primer) |
equal (list-ref $primer | + $idx 1) |
quote @@ | equal (list-ref $primer 0) | vector intro unary);
Expand Down
14 changes: 7 additions & 7 deletions src/cosmicos/Evaluate.hx
Original file line number Diff line number Diff line change
Expand Up @@ -390,24 +390,24 @@ class Evaluate {
mem.add(vocab.get("i"), new Complex(0, 1));

// Transition vocabulary
vocab.set("is-int", iid());
evaluateLine("@ is-int | ? x 1"); // should make this more precise
vocab.set("is:int", iid());
evaluateLine("@ is:int | ? x 1"); // should make this more precise
vocab.set("unary-v", iid());
evaluateLine("@ unary-v | ? v | ? x | if (= $x 0) $v (unary-v | + $v 1)");
evaluateLine("@ unary | unary-v 0");
// inefficient
vocab.set("has-divisor-within", iid());
evaluateLine("@ has-divisor-within | ? top | ? x | if (< $top 2) 0 | if (= $x | * $top | div $x $top) 1 | has-divisor-within (- $top 1) $x");
vocab.set("is-prime", iid());
evaluateLine("@ is-prime | ? x | if (< $x 2) 0 | not | has-divisor-within (- $x 1) $x");
vocab.set("is:prime", iid());
evaluateLine("@ is:prime | ? x | if (< $x 2) 0 | not | has-divisor-within (- $x 1) $x");
// very very inefficient!
vocab.set("has-square-divisor-within", iid());
evaluateLine("@ has-square-divisor-within | ? top | ? x | if (< $top 0) 0 | if (= $x | * $top $top) 1 | has-square-divisor-within (- $top 1) $x");
vocab.set("is-square", iid());
evaluateLine("@ is-square | ? x | has-square-divisor-within $x $x");
vocab.set("is:square", iid());
evaluateLine("@ is:square | ? x | has-square-divisor-within $x $x");
evaluateLine("@ undefined 999999"); // this should be a special value, not 999999 :-)
evaluateLine("@ even | ? x | = 0 | - $x | * 2 | div $x 2");
evaluateLine("@ is | ? x | if (= $x int) $is-int | if (= $x square) $is-square | if (= $x prime) $is-prime $undefined");
// evaluateLine("@ is | ? x | if (= $x int) $is:int | if (= $x square) $is:square | if (= $x prime) $is:prime $undefined");

// meta-lambda-function
id_lambda0 = vocab.get("??");
Expand Down

0 comments on commit f1bfda9

Please sign in to comment.