首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

走进 racket(lisp) 的世界

就如「惊天魔盗团」里那个被催眠的法国人,当生活中多次出现和赌博相关的场景,Las Vegas自然而然成为他的下一个旅游目的地。而racket,在上个周末,便成了我的Las Vegas。...如ruby,io,scala,clojure,object c,lua,haskell。 ✓ 爱不释手:学习了全部语法,看作者编写的书,遇到项目时会想想能不能用xxx实现,怎么实现。...racket自带了一个有REPL功能的简单的IDE DrRacket,方便初学者领略语言的魅力。...如今,一门语言如果没有REPL,学习的曲线会高很多。racket在支持REPL的基础上,还提供了一个可以调试的IDE。...对于lisp的优点,比如说一切皆为表达式,一切表达式皆可计算为一个或一个list,语言可以在任何时候(读取,编译,执行)可用等等,可以看阮一峰的博文「为什么Lisp语言如此先进」[5],这里就不赘述。

2.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

clojure基础入门(一)

解压后用命令行进入到clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...加参数后,再次调用需要传入,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...这里有三层嵌套,首先(= age 18)来判断返回是否等于18,作为if判断该返回哪个字符串的依据,再根据if确定的字符串作为函数的返回。...注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的作为函数的返回。...谓词函数 谓词函数是一个判断式,一个返回bool的函数或者仿函数,用来测试条件是否成立。 与或非(and or not): ?

1.5K30

Clojure 运行原理之字节码生成篇

但仔细想想会有如下问题: 在 REPL 里面,可以动态添加、修改函数,如果一个命名空间相当于一个类,那么这个类会被反复加载 由于函数和字符串一样是一等成员,这意味这函数既可以作为参数、也可以作为返回,...仅仅有上面介绍的重定向机制是无法实现动态运行时的,还需要一个灵活的 ClassLoader,可以在 REPL 做如下实验: user> (defn foo [] 1) #'user/foo user>...正如上一篇文章的介绍,这三个方法正是 Compiler 的入口函数,这也就解释了上面 REPL 中的实验: 每次重定义一个函数,都会生成一个新 DynamicClassLoader 实例去加载其实现。...慢启动 明白了 Clojure 是如何实现动态运行时,下面分析 Clojure 程序为什么启动慢。...[Loaded clojure.core$cond__GT__GT_ from file:/Users/liujiacai/codes/clojure/how-clojure-work/target/how-clojure-work

68820

clojure基础入门(一)

解压后用命令行进入到clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...加参数后,再次调用需要传入,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...这里有三层嵌套,首先(= age 18)来判断返回是否等于18,作为if判断该返回哪个字符串的依据,再根据if确定的字符串作为函数的返回。...注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的作为函数的返回。...谓词函数 谓词函数是一个判断式,一个返回bool的函数或者仿函数,用来测试条件是否成立。 与或非(and or not): ?

1.3K40

(cljsrun-at (->JSVM :browser) 语言基础)

恰逢有幸主理新项目的前端架构,于是引入Ramda.js来疗藉心中压抑已久的渴望,谁知一发不可收拾,于是抛弃所有利益的考虑,遵循内心,好好追逐cljs一番:D  cljs就是ClojureScript的缩写,就是让Clojure...由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以在JVM和JSVM间共享,并且cljs也未能完全实现clj中的所有语言特性,更何况由于JSVM是单线程因此根本就不需要clj中STM等特性呢....cljs文件用于存放ClojureScript代码 .clj文件用于存放Clojure代码或供JVM编译器编译的ClojureScript的Macro代码 .cljc文件用于存放供CljureScript.../apropos str-or-regex) ; 示例 (cljs.repl/apropos "sa") (cljs.repl/apropos #"sa.a") ; 查看命名空间下的公开的Var (cljs.repl...name1 val1 ; 键值和数组组合解构 (let [{[a _ b] :name} {:name [1 2 3]}] (println a b)) ;-> 1 3 总结  是不是已经被Clojure

2.9K70

Clojure与LispClojure与Lisp

Clojure 是完全的,真正意义上的神圣的lisp语言的一个方言. lisp语言因为其无以伦比强大能力和几乎无穷的表达力而获得了盛誉,Clojure自然也不例外....4 变量的动态类型 在Lisp语言中,所有变量实际上都是指针,所指向的有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。...5 垃圾回收机制 6 程序由表达式(expression)组成 Lisp程序是一些表达式区块的集合,每个表达式都返回一个。...Clojure简介 运行于Java虚拟机的List方言Clojure....(2)专注:前缀运算符不需要去考虑优先级,也没有什么菱形继承的问题,动态类型系统(有利有弊),REPL提供的探索式编程方法(告别修改/编译/运行的死循环,所见即所得)。

1.8K30

Python中迭代器和生成器的区别及生成器的原理

迭代器对象可以使用next()函数来逐个访问可迭代对象中的元素,直到没有更多的元素可访问为止。 迭代器具有以下特点: 迭代器对象必须实现__iter__()和__next__()方法。...__iter__()方法返回迭代器对象本身。 __next__()方法返回可迭代对象中的下一个元素,如果没有更多的元素可访问,则引发StopIteration异常。...生成器函数使用yield语句生成一个,并暂停函数的执行,将生成的返回给调用者。当再次调用生成器函数时,它将从上次暂停的地方继续执行,并生成下一个。...这种暂停和继续执行的机制使得生成器可以逐个生成元素,而不需要一次性生成所有的。 生成器的原理可以简单地描述为以下几个步骤: 定义生成器函数,并在函数体内使用yield语句生成。...再次调用生成器对象的next()方法时,生成器函数会从上次暂停的地方继续执行,并生成下一个。 重复步骤4和步骤5,直到生成器函数执行完毕或者没有更多的可生成。

33930

Python教程(26)——Python迭代器和生成器详解

接下来,for循环会调用迭代器对象的 __next__() 方法来获取下一个元素。如果迭代器对象没有下一个元素,会抛出 StopIteration 异常。...我们可以使用 next() 函数来逐个获取生成器的。每次调用 next() 时,生成器函数会从上次暂停的位置继续执行,并返回 yield 语句的。...__iter__() 方法返回迭代器本身,而for循环内部会自动调用 __next__() 方法用于获取下一个。...每次调用 __next__() 方法时,生成器会从上一次暂停的位置继续执行,直到遇到下一个 yield 语句,然后将 yield 后面的返回给调用者。...逐个生成 生成器在调用 __next__() 方法时逐个生成,并且每次在生成一个后会暂停执行。这种延迟生成的机制使得生成器能够处理大量数据或无限序列,而不需要一次性加载或计算所有

18211

Clojure集合管道函数练习

我就想啊,论函数式编程,舍Clojure其谁?而且我在Clojure很少能写出loop... recur这样偏底层的循环代码。话不多说,撸起袖子开工。...Clojure 解法 转换数据格式 原题中给的是json的格式,不适合在Clojure中处理,所以我们手工转换成需要的形式,如下: 清单1-1 数据定义 (def rooms [{:room-id...自动测试 输入lein repl,然后(use 'midje.repl),最后输入(autotest)。这样一旦文件修改保存,测试就会自动触发。 Emacs 用来写代码的。...assoc doesn't respect HASHTABLE_THRESHOLD)时,PersistentArrayMap就变成了PersistentHashMap,那也就意味着,(first )取出来的可能是随机的...Cognitect公司的alexmiller回答我说:(first )会把它的参数强制转换(coerce)成了一个序列,然后取第一个

1.1K20

Python基础语法-函数-迭代

迭代器是一种特殊的可迭代对象,它可以逐个地访问它所包含的元素,而不是将所有元素一次性返回。这样可以大大节省内存和计算资源,特别是当处理大型数据集时。...迭代器通常由两个方法组成:__iter__和__next__。__iter__方法返回迭代器对象本身,而__next__方法返回迭代器的下一个。...my_iterator,然后使用next函数逐个访问它的元素。...迭代器的优点使用迭代器的一个主要优点是节省内存。因为迭代器可以逐个生成它所包含的元素,而不是将所有元素一次性返回,所以可以减少内存的使用。这对于处理大型数据集或无限数据流非常有用。...另一个优点是迭代器可以用于自定义数据类型和算法的实现。例如,可以使用迭代器实现自定义的图形数据结构,以便在处理图形算法时逐个访问图形的元素。

22730

探索Python中的迭代器(Iterator)和可迭代对象(Iterable)

当没有下一个元素时,我们引发StopIteration异常来结束迭代迭代器和可迭代对象的关系在前面的示例代码中,我们可以观察到迭代器和可迭代对象之间的关系。...示例一:自定义可迭代对象假设我们要处理一个非常大的数据集合,但是由于内存限制,我们无法一次性将所有数据加载到内存中。这时,我们可以使用自定义的可迭代对象来逐个读取数据,从而避免内存溢出的问题。...这样,我们就可以通过迭代的方式逐个读取数据行,而不需要将整个数据集合一次性加载到内存中。示例二:实现斐波那契数列的迭代器斐波那契数列是一个经典的数学问题,可以使用迭代器来生成斐波那契数列的下一个元素。...在__next__()方法中,我们使用两个变量current和next来记录当前和下一个斐波那契数。每次调用__next__()方法时,我们返回当前的斐波那契数,并更新current和next的。...可迭代对象允许我们使用for循环来遍历数据集合,而迭代器则进一步扩展了遍历的方式,允许我们按需逐个返回数据元素。

23930

如何理解python中的yield,看完还是不懂?我手把手教你

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。...yield结束(一定要多读几遍理解哦): 第三次循环是,从第二次遇见的yield结束地方开始执行,一直到下一个yield结束(没有yield,自动执行结束) 通过上述规律我们不难发现,yield相当于...return 返回一个,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行!...__next__()) StopIteration ***Repl Closed*** 所以,就印证了我们的结论~!现在来看一些简单的生成器函数的例子,是不是就一下懂了。...Closed*** 为什么 我的return 的 没有在最后一次打印出来呢?

53020
领券