Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. function eval(x, env){
  2. env = env || global_env;
  3. if (typeof x == 'string')
  4. return env.find(x.valueOf())[x.valueOf()];
  5. else if (typeof x == 'number')
  6. return x;
  7. else if (x[0] == 'quote')
  8. return x[1];
  9. else if (x[0] == 'if'){
  10. var test = x[1], conseq = x[2], alt = x[3];
  11. if (eval(test, env))
  12. return eval(conseq, env);
  13. else
  14. return eval(alt, env);
  15. }
  16. else if (x[0] == 'set!')
  17. env.find(x[1])[x[1]] = eval(x[2], env);
  18. else if (x[0] == 'define')
  19. env[x[1]] = eval(x[2], env);
  20. else if (x[0] == 'lambda'){
  21. var vars = x[1], exp = x[2];
  22. return function(){
  23. return eval(exp, Env({parms: vars, args: arguments, outer: env}));
  24. };
  25. }
  26. else if (x[0] == 'begin'){
  27. var val;
  28. for (var i = 0; i < x.length; i += 1)
  29. val = eval(x[i], env);
  30. return val;
  31. }
  32. else{
  33. var exps = [];
  34. for (i = 0; i < x.length; i += 1)
  35. exps[i] = eval(x[i], env);
  36. var proc = exps.shift();
  37. return proc.apply(env, exps);
  38. }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement