summaryrefslogtreecommitdiff
path: root/intellect-framework-from-internet/starts/bagel/nascent4.js
diff options
context:
space:
mode:
Diffstat (limited to 'intellect-framework-from-internet/starts/bagel/nascent4.js')
-rw-r--r--intellect-framework-from-internet/starts/bagel/nascent4.js242
1 files changed, 0 insertions, 242 deletions
diff --git a/intellect-framework-from-internet/starts/bagel/nascent4.js b/intellect-framework-from-internet/starts/bagel/nascent4.js
deleted file mode 100644
index 093df79..0000000
--- a/intellect-framework-from-internet/starts/bagel/nascent4.js
+++ /dev/null
@@ -1,242 +0,0 @@
-class ActiveMemory {
- constructor() {
- this.ram = []
- this.cloned = false
- }
- clone() {
- let ret = new ActiveMemory();
- ret.ram = this.ram
- ret.cloned = true
- return ret
- }
- add(...items) {
- if (this.cloned) { this.ram = this.ram.slice(); this.cloned = false; }
- for (let item of items)
- this.ram.push(item)
- }
- del(...items) {
- if (this.cloned) { this.ram = this.ram.slice(); this.cloned = false; }
- for (let item of items) {
- let index = this.ram.indexOf(item)
- this.ram.splice(index, 1)
- }
- }
- contains(...items) {
- for (let item of items)
- if (this.ram.indexOf(item) === -1) return false
- return true
- }
- containsWith(...props) {
- let ret = []
- outer: for (let a of this.ram) {
- for (let i = 0; i < props.length; i += 2)
- if (! a.props.has(props[i], props[i+1]))
- continue outer
- return true
- }
- return false
- }
- getWith(...props) {
- let ret = []
- outer: for (let a of this.ram) {
- //console.log(a.props.props)
- for (let i = 0; i < props.length; i += 2) {
- //console.log(props[i] + ': ' + props[i+1] + '?')
- if (! a.props.has(props[i], props[i+1]))
- continue outer
- }
- ret.push(a)
- }
- if (ret.length > 0) return ret
- return null
- }
-}
-class Property {
- constructor(type, dest) {
- this.type = type
- this.dest = dest
- }
-}
-class Properties {
- constructor(type, from) {
- this.props = from ? from.props.slice() : []
- //if (from) {console.log('INHERIT: '); for (let prop of this.props) { console.log(prop) }}
- this.add('is', type)
- }
- toString() {
- let str = ''
- for (let prop of this.props) {
- str += prop.type + ':' + prop.dest + ' '
- }
- return str
- }
- add(type, dest) {
- this.props.push(new Property(type, dest))
- }
- has(type, dest) {
- for (let p of this.props)
- if (p.type == type && p.dest == dest)
- return true
- return false
- }
- del(type, dest) {
- for (let i = 0; i < this.props.length; ++ i) {
- let p = this.props[i]
- if (p.type == type && p.dest == dest) {
- this.props.splice(i, 1)
- return true
- }
- }
- return false
- }
-}
-class AbstractData {
- constructor(from) {
- this.props = new Properties('abstract', from && from.props)
- }
-}
-class StringData extends String {
- constructor(str, from) {
- super(str)
- this.props = new Properties('string', from && from.props)
- this.props.del('is', 'array')
- }
-}
-class ArrayData extends Array {
- constructor(arr, from) {
- super(...arr)
- this.props = new Properties('array', from && from.props)
- this.props.del('is', 'string')
- }
-}
-class FunctionData {
- constructor(name, func, relevence, makes) {
- this.name = name
- this.props = new Properties('function')
- this.props.add('name', name)
- this.call = func
- this.relevence = relevence
- this.makes = makes
- }
-}
-
-// variables:
-// - create a place to store a value
-// createvar = new FunctionData(
-// 'createvar',
-// /*call*/(name) => {
-// let ret = new StringData(name)
-// ret.add
-// let name = obj_and_name[1]
-// },
-// /*relevence*/,
-// /*makes*/
-// )
-// - place a value in such a place
-// - retrieve a value from such a place
-// data-structures:
-// - make a class definition (collection of variables)
-// - initialize an object
-// - set/retrieve properties (variables)
-// flow:
-// - trigger a different step than the next, conditionally
-// procedures:
-// - collect a set of behaviors together
-// - trigger a collected set of behaviors and continue
-// expressions:
-// - evaluate arithmetic on variables and constants
-
-line2words = new FunctionData(
- 'line2words',
- (line) => { // call
- let res = new ArrayData(line.split(' '), line)
- res.props.add('is','words')
- return res
- },
- (ram) => { // relevence
- return ram.getWith('is','text', 'is','string')
- },
- ['is','array','is','words'] // makes
-)
-
-respondhello = new FunctionData(
- 'respondhello',
- (words) => { // call
- console.log(words[0] + ", user!")
- let res = new StringData("said " + words[0])
- res.props.add('is','output')
- res.props.add('is','text')
- return res
- },
- (ram) => { // relevence
- let res = ram.getWith('is','words', 'is','input')
- if (res) res = res.filter(x => { x = x[0].toLowerCase(); return x == 'hello' || x == 'hi'})
- return res
- },
- ['is','output', 'is','text'] // makes
-)
-
-// nodejs is missing a succinct read-line-from-stdin function. make our own.
-userinput = (() => {
- const readline = require('readline')
- const lines = []
- readline.createInterface({ input: process.stdin }).on('line', (line) => {
- lines.push(line)
- })
-
- return new FunctionData(
- 'userinput',
- () => { // call
- let res = new StringData(lines.shift())
- res.props.add('is','text')
- res.props.add('is','input')
- return res
- },
- () => { // relevence
- return lines.length > 0
- },
- ['is','string','is','text','is','input'] // makes
- )
-})()
-
-
-all_parts = [ line2words, respondhello ]
-
-ram = new ActiveMemory()
-optstried = new Set()
-steps = []
-
-var readline = require('readline')
-readline.createInterface({
- input: process.stdin
-}).on('line', (line) => {
- line = new StringData(line)
- line.props.add('is','input')
- line.props.add('is','text')
- ram.add(line)
-
- let cont
- do {
- cont = false
- for (let part of all_parts) {
- //console.log('for-loop-of-parts ' + part.name)
- let rel = part.relevence(ram)
- if (rel) {
- for (let a of rel) {
- //console.log('for-loop-of-rel ' + part.name + ' ' + a)
- if (optstried.has(part.name + ' ' + a)) continue;
- //console.log('call-part ' + part.name + ' ' + a)
- res = part.call(a)
- ram.add(res)
- //console.log('part-called')
- step = [a, part.name, res]
- steps.push(step)
- console.log('made ' + step)
- cont = true
- optstried.add(part.name + ' ' + a)
-
- }
- }
- }
- } while (cont)
-})