docs: function getValue(ast) {
      //console.log(ast);
      if(ast) {
        if(handy.getType(ast)=='array') {
          var t = ast[0];
          if(t=='str') {
            return(bigote.render(ast[1], symbols_));
          } else if(t=='lst') {
            var r=[];
            for(var i=0;i<ast[1].length;i++) {
              r.push(getValue(ast[1][i]));
            }
            return r;
          } else if(t=='obj') {
            return ast[1];
          } else if(t=='num') {
            return ast[1];
          } else if(t=='#') {
            var obj=getValue(ast[1]);
            return obj.length;
          } else if(t=='@') {
            // iteration
            // [ '@', op (->/=>), list, expr ]
            var lst=getValue(ast[2]);
            var result=[];
            for(var li=0;lst!=null && li<lst.length;li++) {
              symbols_['$']=lst[li];
              result.push(getValue(ast[3]));
            }
            return result;
          }
        } else {
          // its an identifier
          return(symbols_[ast]);
        }
      }
      return '';
    }