summaryrefslogtreecommitdiff
path: root/intellect-framework-from-internet/starts/bagel/nascent3.js
diff options
context:
space:
mode:
Diffstat (limited to 'intellect-framework-from-internet/starts/bagel/nascent3.js')
-rw-r--r--intellect-framework-from-internet/starts/bagel/nascent3.js199
1 files changed, 0 insertions, 199 deletions
diff --git a/intellect-framework-from-internet/starts/bagel/nascent3.js b/intellect-framework-from-internet/starts/bagel/nascent3.js
deleted file mode 100644
index 0a6c4a3..0000000
--- a/intellect-framework-from-internet/starts/bagel/nascent3.js
+++ /dev/null
@@ -1,199 +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 b of props)
- if (! a.has(b))
- continue outer
- return true
- }
- return false
- }
- getWith(...props) {
- let ret = []
- outer: for (let a of this.ram) {
- for (let b of props)
- if (! a.has(b))
- continue outer
- ret.push(a)
- }
- if (ret.length > 0) return ret
- return null
- }
-}
-class StringData extends String {
- constructor(str, from) {
- super(str)
- this.props = new Set(from && from.props)
- this.add('string')
- this.del('array')
- }
- add(val) {
- this.props.add(val)
- }
- has(val) {
- return this.props.has(val)
- }
- del(val) {
- this.props.delete(val)
- }
-}
-class ArrayData extends Array {
- constructor(arr, from) {
- super(...arr)
- this.props = new Set(from && from.props)
- this.add('array')
- this.del('string')
- }
- add(val) {
- this.props.add(val)
- }
- has(val) {
- return this.props.has(val)
- }
- del(val) {
- this.props.delete(val)
- }
-}
-class FunctionData {
- constructor(name, func, relevence, makes) {
- this.name = name
- this.props = new Set()
- this.props.add('function')
- this.props.add(name)
- this.call = func
- this.relevence = relevence
- this.makes = makes
- }
- add(val) {
- this.props.add(val)
- }
- has(val) {
- return this.props.has(val)
- }
- del(val) {
- this.props.delete(val)
- }
-}
-
-line2words = new FunctionData(
- 'line2words',
- (line) => { // call
- let res = new ArrayData(line.split(' '), line)
- res.add('words')
- return res
- },
- (ram) => { // relevence
- return ram.getWith('text', 'string')
- },
- ['array','words'] // makes
-)
-
-respondhello = new FunctionData(
- 'respondhello',
- (words) => { // call
- console.log(words[0] + ", user!")
- let res = new StringData("said " + words[0])
- res.add('output')
- res.add('text')
- return res
- },
- (ram) => { // relevence
- let res = ram.getWith('words', 'input')
- if (res) res = res.filter(x => { x = x[0].toLowerCase(); return x == 'hello' || x == 'hi'})
- return res
- },
- ['output', '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.add('text')
- res.add('input')
- return res
- },
- () => { // relevence
- return lines.length > 0
- },
- ['string','text','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.add('input')
- line.add('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)
-})