fork download
  1. (defmacro funcallq-or-lambda (f-or-lambda &rest args)
  2. (if (and (listp f-or-lambda))
  3. `(funcall ,f-or-lambda ,@args)
  4. `(funcall ',f-or-lambda ,@args)))
  5.  
  6. (defmacro -> (val f &rest fs)
  7. (if (null fs)
  8. (if (listp f)
  9. (if (not (eq (car f) 'lambda))
  10. `(funcallq-or-lambda ,(car f) ,val ,@(cdr f))
  11. `(funcall ,f ,val))
  12. `(funcall ',f ,val))
  13. `(-> (-> ,val ,f) ,@fs)))
  14.  
  15. (defmacro as-> (val sym f &rest fs)
  16. (if (null fs)
  17. (if (listp f)
  18. (if (not (eq (car f) 'lambda))
  19. `(funcall ',(car f) ,@(substitute val sym (cdr f)))
  20. `(funcall ,f ,val))
  21. `(funcall ',f ,val))
  22. `(as-> (as-> ,val ,sym ,f) ,sym ,@fs)))
  23.  
  24. (defmacro <_ (&rest args)
  25. (with-gensyms (new-args)
  26. (let ((new-args (nreverse args)))
  27. `(as-> ,(car new-args) _ ,@(cdr new-args)))))
  28. ; your code goes here
  29. (print
  30. (<_ (lambda (x) (* 2 x)) (- 3 _) sin pi))
Success #stdin #stdout 0.02s 10600KB
stdin
Standard input is empty
stdout
6.0L0