1

Haskellラムダ構文のようなものを作ろうとしていて、マクロを使ってこれが私が持っているものです:

(defmacro / [& all]
  (let [args (take-while #(not (= %1 "=>")) all)
        argCount (count args)
        expr (last (split-at (+ argCount 1) all))]
    `(fn ~(vec args) (~@expr))))

(reduce (/ x y "=>" + x y) [1 2 3])

これは十分に機能しますが、最後にやりたいことは、を必要とせず"=>"に使用できるようにすることです=>

=>参照しているコンテキストで解析できる有効なシンボルを作成する方法のヒントはありますか?

4

1 に答える 1

1

name記号と文字列を比較します。

(defmacro / [& all]
  (let [args (take-while #(not (= (name %1) "=>")) all)
        argCount (count args)
        expr (last (split-at (+ argCount 1) all))]
    `(fn ~(vec args) (~@expr))))
于 2013-05-04T18:43:20.473 に答える