clojure-基本语法-流程控制(二)

[b][color=red]二、异常处理[/color][/b]
Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的java代码还是可能抛出那种需要检查的异常的。try,catch,finally 以及throw 提供了和java里面类似的功能:
try、catch、throw、finally:

user=> (try (throw (Exception. "error")) (finally (println "final")))
final
Exception error user/eval310 (NO_SOURCE_FILE:1)



user=> (try (/ 3 0) (catch Exception e (println e)))
#<ArithmeticException java.lang.ArithmeticException: Divide by zero>
nil


assert:
它测试一个表达式, 如果这个表达式的值为false的话,它会抛出异常。

user=> (assert true)
nil
user=> (assert false)
AssertionError Assert failed: false user/eval317 (NO_SOURCE_FILE:1)
user=> (assert nil)
AssertionError Assert failed: nil user/eval319 (NO_SOURCE_FILE:1)
user=> (assert 0)
nil
user=> (assert [1 2 3])
nil
user=> (assert "foo")
nil


[b][color=red]三、基于函数的流程控制[/color][/b]
repeatedly:
repeatedly字面意思为重复函数。一般的用法如下:

user=> (repeatedly 5 #(rand-int 11))
(6 8 2 6 6)

重复产生5次随机数。rand-int 11表示0至11的随机数。
这里顺便提一下repeat函数:repeat函数接受一/两个常量参数,用法如下:

user=> (repeat 5 (int (rand-int 100)))
(30 30 30 30 30)

当repeat、repeatedly函数只接受一个参数时(即没有重复次数的参数),需要配合take来中止,否则会产生内存溢出的错误。如下:

user=> (repeatedly #(rand-int 11))
OutOfMemoryError Java heap space java.util.Arrays.copyOf (Arrays.java:2882)
user=> (take 5 (repeatedly #(rand-int 11)))
(10 7 0 2 8)


iterate:
迭代函数形式如下:
(iterate f v)
相当于:
while(true) { v = f(v) }
所以一般要配合(take n sequence)来中止:

user=> (take 10 (iterate inc 5)) ; (5 6 7 8 9 10 11 12 13 14)
user=> (take 10 (iterate #(+ % 5) 5)) ; (5 10 15 20 25 30 35 40 45 50)
user=> (take 10 (iterate #(* % 2) 2)) ; (2 4 8 16 32 64 128 256 512 1024)


[b][color=red]四、基于序列的流程控制[/color][/b]
dotimes:
dotimes 会执行给定的表达式一定次数, 一个本地binding会被给定值:从0到一个给定的数值。如下:

user=> (dotimes [num 3] (println "number:" (inc num)))
number: 1
number: 2
number: 3
nil


doseq:
doseq和for的语法是一样的,只不过for返回lazy seq而doseq接受任意数量的表达式, 以有副作用的方式执行它们, 并且返回nil

user=> (doseq [i (range 10)] (println i))
0
1
2
3
4
5
6
7
8
9
nil
user=> (doseq [i [1 2 3] j [10 20]] (println i "-" j))
1 - 10
1 - 20
2 - 10
2 - 20
3 - 10
3 - 20
nil


for:
for、doseq都支持遍历多个集合(最右边的最快),同时还可以用:when 和 :while来过滤。

user=> (for [x (range 3 7)] (* x x))
(9 16 25 36)

user=> (for [x [0 1 2 3 4 5] :let [y (* x 3)] :when (even? y)] y)
(0 6 12)

上面第二条语句可理解为:先定义x为集合,再使用let将y赋值为x*3,最后判断y是否为偶数,偶数才返回
如何使用Python爬取并保存网页上的所有附件 爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。 阅读详情

相关推荐

时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)

STFT function [STFT, f, t] = mystft(x, win, hop, nfft, fs) % function: [STFT, f, t] = stft(x, win, hop, nfft, fs) % % Input: % x - signal in the time domain % win - analysis window function % hop - hop size % nfft - numb

frostime的博客 13万+

Clojure 学习入门(17)- 异常处理

异常处理  Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的Java代码还是可能抛出那种需要检查的异常的。 try - catch - finally 以及throw 提供了和java里面类似的功能。 try、catch、throw、finally:  user=> (try (throw (Exception. "err

Android系统攻城狮 744

PySpark 本地开发环境搭建与实践

本文详细介绍了 PySpark 本地开发环境的搭建过程,包括 JDK、Hadoop、Anaconda、PySpark 的安装以及 Pycharm 工程的创建。同时,深入讲解了代码编写、本地开发案例(如 WordCount、处理特殊分隔符、读取 hdfs 数据、获取外部变量)、Spark 程序的监控和 local 模式下结果文件数量问题等内容。通过掌握这些知识和技能,读者可以在 Windows 本地环境中高效地进行 PySpark 开发,处理大规模数据,解决实际业务中的数据分析和处理问题。

天冬忘忧的博客 3011

Clojure 学习入门(17)—— 异常处理

异常处理Clojure代码里面抛出来的异常都是运行时异常。当然从Clojure代码里面调用的java代码还是可能抛出那种需要检查的异常的。 try - catch - finally 以及throw 提供了和java里面类似的功能。 try、catch、throw、finally: user=&gt;(try(throw(Exception."error"))(finally(println"f...

modabobo 210

数据安全实战技能解析:从加密攻防到数字水印的竞赛指南

数据安全是信息安全领域的核心,其基础在于密码学与信息隐藏技术。密码学通过加密算法(如AES、RSA)和哈希函数,保障数据的机密性与完整性,其原理涉及对称/非对称加密、工作模式及密钥管理。数字水印技术则基于信号处理(如DCT/DWT变换),将信息嵌入多媒体载体,用于版权保护与溯源。这些技术的价值在于为数据全生命周期提供“防泄漏”与“可追溯”的解决方案,广泛应用于企业数据治理、合规审计和**数据防泄漏(DLP)** 系统。本文以一场贴近实战的**数据安全职业技能竞赛**为切入点,深入剖析如何运用密码分析、磁盘取

weixin_34314962的博客 402

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 730

在 Clojure 中处理异常

Update: As of Clojure 1.3, Clojure standardized the exception handling mechanism. Refer to [url=https://github.com/mmcgrana/clj-stacktrace]clj-stacktrace[/url]for the details. Clojure 中虽然使用了 Java...

YD Blog 327

【Unity】【Photon】Photon Fusion2 的核心Unity组件 NetworkRunner 学习笔记

本文是学习Photon Fusion2 的核心Unity组件 NetworkRunner的学习笔记。

O青草O的博客 Unity和游戏制作知识分享 1269

clojure 面向对象_面向铁路的编程Clojure和异常处理的原因和方式

clojure 面向对象AppsFlyer has a broad functionality offering many products. For us as software developers it means writing complicated business flows on a daily basis. Complicated flows can mean basically...

weixin_26705651的博客 410

博图SCL基础知识-寻址调用及新建SCL

和LAD/FBD不同,LAD/FBD在程序编辑器是一段一段的,编辑器可以插入新的网络段,每一个网络段可以有各自的注释。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如图3所示,当FB的参数全部显示,在背景数据块右键可以激活"仅显示分配的参数";如图2所示,显示了一些FB调用的例子。

电工 2029

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1509

clojure-基本语法-流程控制(一)

[b][color=red]一、标准的流程控制[/color][/b] if: 将一个判断表达式作为它的第一个参数进行求值。如果求值为true,那么就返回它的第二个参数(相当于“then”子句)的求值结果。如果结果为false(包括nil)就返回第三个参数的求值结果(相当于“else”子句),前提是有提供第三个参数并且不为空。 [code="java"] user=> (defn is-s...

Dead_Knight的专栏 340

基于YOLOv8的端面小目标计数解决方案: 多头检测器+小缺陷到大缺陷一网打尽的GiraffeDet+Wasserstein Distance Loss | 助力工业小目标缺陷检测

端面小目标计数部署解决方案 | 亲测在工业小目标缺陷涨点明显,原始mAP@0.5 0.936提升至0.955

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1954

Clojure - 基本语法

http://clojuredocs.org/, 在线Clojure语法例子 Installing Clojure Clojure is an open-source project hosted at github.com. git clone https://github.com/clojure/clojure.git This will download the code from t...

weixin_30663471的博客 409

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Clojure 学习入门(14)—— 循环控制

Clojure 学习入门(14)—— 循环控制

dghggij的博客 164

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

clojure基础入门(一)

最近在看storm的源码,就学习分享下clojure语法。 阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上的Lisp方言,属于函数式编程范式,它和java可以方便的互相调用,这样开发的程序可以很好的结合java和clojure的优点(storm),这跟Net中C#和F#的角色一样。 安装java1.6以上的JDK,下载地址。 下...

weixin_34326179的博客 253

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

把第三方硬盘装进群晖白名单:从下载到生效的完整实操

刚把新买的硬盘塞进群晖NAS,存储管理器就给它标了个「不受支持」?别慌,盘没问题,是它不在群晖官方的兼容名单里。读完这篇,你能把这类第三方硬盘写进群晖的兼容数据库,像官方认证盘一样建池、组阵列,不用退货,也不用换官方列表里的型号。 全程大约 10 分钟,操作都在命令行完成,但每一步我会讲清楚这行命令到底在干什么。只提一个要求:动手前把重要数据先备份好,为什么、哪些情况要格外小心,第二节会说清楚。

gitblog_00045的博客 743

Clojure 学习入门(14)- 循环控制

Clojure 基于函数的流程控制  repeatedly 字面意思为重复函数。一般的用法如下:  user=> (repeatedly 5 #(rand-int 11))   (6 8 2 6 6)   重复产生5次随机数。rand-int 11表示0至11的随机数。 这里顺便提一下repeat函数:repeat函数接受一/两个常量参数,用法如下:

Android系统攻城狮 657

Clojure语言的人工智能

Clojure是一种现代的、函数式的 Lisp 方言,主要运行在 Java 虚拟机(JVM)上,具有高度的可扩展性和灵活性。Clojure的设计理念是“简单但强大”,鼓励以简洁的方式表达复杂的逻辑。Clojure尤其擅长处理并发和状态管理,这在构建人工智能应用时尤为重要。

2501_90410911的博客 438

Clojure语言的编程范式

Clojure是一种运行在Java虚拟机(JVM)上的现代LISP方言,由Rich Hickey于2007年设计。作为函数式编程语言,Clojure强调不可变性、第一公民的函数以及数据的表达和传递。Clojure不仅能与Java代码无缝集成,还能充分利用JVM提供的强大功能,使得它在企业级开发中具备重要优势。

2501_90485607的博客 415

Clojure程序设计

《Clojure程序设计》基本信息作者: (美)Stuart Halloway Aaron Bedra [作译者介绍]出版社:人民邮电出版社ISBN:9787115308474上架时间:2013-3-1出版日期:2013 年3月...

csdn1232的博客 238
上一篇: java调用Oracle存储过程返回二维数组
下一篇: clojure-基本语法-符号及关键字
Dead_Knight
博客等级 码龄19年 6粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值