【问题标题】:"Thread-first" macro and "thread-last" macro from Clojure implemented on Scheme?来自 Clojure 的“线程优先”宏和“线程最后”宏在 Scheme 上实现?
【发布时间】:2019-09-10 04:49:07
【问题描述】:

我正在尝试在 Scheme 中实现宏 ->->>,我的最终结果是:

  ;;
  ;; See https://clojuredocs.org/clojure.core/-%3E
  ;; for more info.
  ;;
  (define-syntax ->
    (syntax-rules ()
      ((_ a) a)
      ((_ a (b c ...)) (b a c ...))
      ((_ a b) (b a))      
      ((_ a b c) (-> (-> a b) c))
      ((_ a b ... c) (-> (-> a b ...) c))))

  ;;
  ;; See https://clojuredocs.org/clojure.core/-%3E%3E
  ;; for more info.
  ;;
  (define-syntax ->>
    (syntax-rules ()
      ((_ a) a)
      ((_ a (b c ...)) (b c ... a))
      ((_ a b) (b a))      
      ((_ a b c) (->> (->> a b) c))
      ((_ a b ... c) (->> (->> a b ...) c))))

我已经成功地进行了一些测试,但我不确定它是否 100% 正确以及是否 100% 优化。

正确吗?有没有办法优化这个?是我做的太多还是还是这样?

【问题讨论】:

    标签: clojure scheme r5rs


    【解决方案1】:

    答案取决于问题:您使用的是哪种 Scheme 方言?因为在 Racket 中我们已经有了threading macros,所以没有必要实现它们 :) 。特别是,支持~>~>> 等。请查看文档。

    【讨论】:

    • Oscar Lopez,它是 R5RS,SISC 实现。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2020-05-29
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多