Lisp
在 lisp 里我们可以这样写
(* 25 4 12)
1200
(+ 21 35 12 7)
75
(+ (* 3 5) (- 10 6))
19
Elixir
在 elixir 中我们可以利用宏来达到类似的效果
defmodule Lisp do
def exp(operator) do
{:ok, term} = Code.string_to_quoted "fn x, acc -> acc #{operator} x end"
term
end
defmacro comb(operator, operands) do
quote do
Enum.reduce unquote(operands), unquote(exp(operator))
end
end
end
来看看效果
iex(1)> c "lisp.ex"
[Lisp]
iex(2)> import Lisp
Lisp
iex(3)> comb(:*, [25,4,12])
1200
iex(4)> comb(:+, [21,35,12,7])
75
iex(5)> comb(:+, [comb(:*, [3,5]), comb(:-, [10,6])])
19
纯属娱乐:)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。