
  function(ast_eval ast context)
    if(ARGN)
      set(args ${ARGN})
      list_pop_front( args)
      ans(ast_language)
      map_tryget(${ast_language}  evaluators)
      ans(ast_evaluators)
      function_import_table(${ast_evaluators} ast_evaluator_table)

    endif()
    if(NOT ast_evaluators)
      message(FATAL_ERROR "no ast_evaluators given")
    endif()
  
    #message("evaluator prefix ${ast_evaluators}... ${ARGN}")
    map_get(${ast}  types)
    ans(types)
    is_map("${ast_evaluators}" )
    ans(ismap)
    while(true)
      list_pop_front( types)    
      ans(type) 
      map_tryget(${ast_evaluators}  "${type}")
      ans(eval_command)
     # message("eval command ist ${eval_command}")
      # avaible vars
      # ast context ast_language ast_evaluators
      # available commands ast_evaluator_table
      if(COMMAND "${eval_command}")
        ast_evaluator_table(${type})
        ans(res)
        return_ref(res)
      endif()
      #if(COMMAND "${eval_command}")
       # eval("${eval_command}(\"${ast}\" \"${scope}\")")
        #ans(res)
        #return_ans()
      #endif()
    endwhile()
  endfunction()