[elixir! #0025] 在 elixir 中模仿 lisp :)

news/2024/7/1 18:17:35

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://www.niftyadmin.cn/n/1217795.html

相关文章

ThreadPool(线程池) in .Net

在多线程的程序中,经常会出现两种情况。一种情况下,应用程序中的线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应;而另外一种情况则是线程平常都处于休眠状态,只是周期性地被唤醒。这…

配置yum源*

为什么80%的码农都做不了架构师?>>> 配置自定义yum源 用linux安装光盘当yum源,本人用的是RHEL6.3 64位版本的,安装光盘中已经带了很多packages,步骤如下:将将iso文件mount到linux某个目录下,把…

shiro 整合oauth2.0 服务端 和 客户端实现(入门教程)(十三)

原文地址,转载请注明出处: https://blog.csdn.net/qq_34021712/article/details/80510774 ©王赛超 随着项目上线,有几家公司来找我们合作,打算在各自的app中集成其他公司的功能,公司准备使用一种网页的安全认证来实现多个应用认证…

老男孩linux实战培训初级班第三次课课前考试题

################################################################ 本文内容摘录于老男孩linux实战运维培训中心考试题 如有转载,请务必保留本文链接及版权信息。 欢迎广到运维兄弟一起交流linux/unix网站运维技术! 网站运维交流群:114580181 45039636…

架设Spring Mvc 遇到的问题

为什么80%的码农都做不了架构师&#xff1f;>>> <!-- 通过mvc:resources设置静态资源&#xff0c;这样servlet就会处理这些静态资源&#xff0c;而不通过控制器 --><!-- 设置不过滤内容&#xff0c;比如:css,jquery,img 等资源文件 --><mvc:resourc…

ZooKeeper快速搭建

2019独角兽企业重金招聘Python工程师标准>>> 下载PDF版本 本文是ZooKeeper的快速搭建&#xff0c;旨在帮助大家以最快的速度完成一个ZK集群的搭建&#xff0c;以便开展其它工作。本方不包含多余说明及任何调优方面的高级配置。如果要进行更深一层次的配置&#xff0…

cas5.3.2单点登录-骨架搭建(一)

原文地址&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_34021712/article/details/80871015 ©王赛超 在多服务统一帐号的应用集中&#xff0c;单点登录是必不可少的。CAS就是成熟的单点登录框架之一。Github地址 https://github.com/apereo/cas…

cas5.3.2单点登录-JDBC认证(密码MD5和密码加盐)(二)

原文地址&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_34021712/article/details/80956047 ©王赛超 上一章搭建了单点登录的基本骨架&#xff0c;但是它的用户名和密码是写死的。显然&#xff0c;这样是不行的&#xff0c;用户名密码一般都存放…