[elixir! #0025] 在 elixir 中模仿 lisp :)
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
纯属娱乐:)
相关推荐
dragonzht 2020-06-17
huangyufeng0 2020-04-18
xzkjgw 2020-03-06
tygsfe 2019-06-30
zhongranxu 2019-06-26
郭岚 2019-06-26
firstblood00 2019-06-26
jiangliu 2019-06-26
huangyufeng0 2019-06-26
zgljl0 2019-06-21
firstblood00 2014-07-23
guugle00 2018-11-22
tygsfe 2018-10-18
菜鸟学习PHP 2018-11-21
codersh 2018-08-21
huakai 2018-03-09
LeviHuang 2016-12-20
ITlinuxP 2012-10-16
看我看我 2012-06-21