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

在Clojure中打印可变数量的命令行参数的紧凑方式?

在Clojure中,你可以使用apply函数和println来打印任意数量的命令行参数。apply函数允许你将一个函数应用于一个参数列表,而println则用于打印输出。

以下是一个简单的例子,展示了如何在Clojure中打印命令行参数:

代码语言:txt
复制
(defn -main [& args]
  (apply println args))

在这个例子中,-main函数定义了一个可变参数列表& args,这意味着它可以接受任意数量的参数。当这个函数被调用时,所有传递给它的参数都会被收集到一个名为args的序列中。

然后,我们使用apply函数将println应用于args序列。apply会将println函数和args序列中的元素作为单独的参数传递给println,这样就可以打印出所有的命令行参数。

要运行这个程序,你可以将其保存到一个文件中,例如print_args.clj,然后在命令行中使用Clojure的REPL或者编译器来执行它:

代码语言:txt
复制
clojure print_args.clj arg1 arg2 arg3

这将输出:

代码语言:txt
复制
arg1 arg2 arg3

这种方式简洁且易于理解,是处理可变数量命令行参数的常用方法。

如果你想要更紧凑的方式,可以直接在-main函数中使用doseq来迭代参数并打印它们:

代码语言:txt
复制
(defn -main [& args]
  (doseq [arg args]
    (println arg)))

这种方式会在新的一行打印每个参数,而不是将它们作为一个序列打印出来。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号、函数、或者参数的数据类型。但是,所有的值仍然有一个类型。...5) -> false 打印与换行打印 字符串打印函数 (print & println) 接受任意数量参数,打印到标准系统输出(如果不是字符串则转换成字符串)。println 在尾部追加一个换行符。...如果这些数据类型中的任何一种都不足以表示某种数据结构,那么我们可以通过任何方式来组合它们。 这些数据类型都具有如下性质: 都不可变。...因为这个原因,在很多情况下,向量是个更好地选择。不过列表在很多情况下依然十分有用,特别是在即使构建Clojure代码的时候。 list list函数接收任意数量的参数并将它们的值组成列表。...在一个Clojure程序的上下文里,使用映射十分不错,因为可以通过普通的方式来操作它们,而不必为不同的类的对象创建操作的方法。 assoc 映射结合函数assoc接收一个映射和一些键/值对作为参数。

    2.3K10

    Clojure component 设计哲学

    内存式缓存:在一个共享的可变引用当中获取或者设置数据的函数,比如 Clojure 中的 Atom 或 Ref。 Component 和面向对象编程里的对象定义在理念上很类似。...但这并不会动摇 Clojure 这门编程语言中纯函数和不可变数据结构的地位。大部分函数依然是函数,大多数数据也还是数据。而 Component 尝试在函数式编程范式中辅助管理有状态的资源。...在极少数的情况下,环形依赖无法避免,那么你可以使用可变的引用来管理它,不过这就超出了 component 的范围。...该方式也能配合类似 Apache Commons Daemon 的命令行驱动一起很好地工作。 开发环境的入口 开发过程中,一般引用一个 system map 然后在 REPL 中测试它是很有用的。...,你最好不要记日志或者打印出异常。

    1K00

    Clojure 开发那些事

    除了最基本的圆括号()外,方括号[]与花括号{}在 Clojure 用的也比其他 Lisp 方言中多。...语言非常详细的介绍 https://clojuredocs.org/,可以方便查看函数的方法 数据不可变 括号问题适应后,另一个比较挑战的是数据的不可变性,这融合在 Clojure 语言的设计之中,表象就是没有赋值语句了...《The Joy of Clojure》一书中有简单介绍,不过我觉得初学者可以完全不用去关心实现的细节,在遇到性能问题时在考虑去优化。...nrepl Clojure 的 REPL 可以连接到远程服务器上的进程中,直接对进程中的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程...REPL server 的方式。

    1.6K20

    不学函数式设计的3大损失

    如果不懂Clojure,读起来比较吃力。在去年JetBrains全球程序员生态调查中,Clojure粉丝只占所有程序员中很小的一部分。大家总怕花了时间学一门小众语言,在时间投入上有些不值。...图1右边的图,展示了在BookingSystem类的makeBooking()方法里使用锁的方式。...在Clojure函数式编程中,"不可变"(immutable)指的是一旦创建,就不能被改变的数据。具体来说,首先创建后的数据不能被修改。如果需要"改变",实际上是创建了一个新的数据副本。...比如图7中上面那几行代码中第9行map-indexed 就是一个高阶函数,它接受一个函数作为参数。这个函数应用到集合的每个元素上,同时提供元素的索引。...这种并发机制能用不加锁的方式实现原子操作。

    43754

    【JAVA-Day35】不变应万变:灵活处理Java中的可变参数

    可变参数的特征包括: 可变参数必须是方法参数列表中的最后一个参数。 可变参数可以接受零个或多个参数值。 在方法内部,可变参数被视为数组,可以通过数组的方式来访问参数值。...在 main 方法中,我们展示了不同数量参数的调用方式,并打印出计算得到的平均值。 示例2:如何编写和使用可变参数方法 让我们通过一个示例来演示如何编写和使用可变参数方法。...优势:灵活性 可变参数使得方法更加灵活,可以接受不定数量的参数。这对于处理不确定数量的输入非常有用,例如打印不定数量的数据、计算总和或平均值等。 可变参数在处理不定数量的输入时非常灵活。...可变参数在日常编程中的实际用途 在日常编程中,可变参数可以用于各种情况,例如: 打印日志信息: 使用可变参数来记录日志消息允许开发者传递不定数量的消息,这对于调试和故障排除非常有帮助。...处理命令行参数: 在命令行工具和应用程序中,用户通常可以根据需要传递不同数量的参数。使用可变参数来处理命令行参数允许应用程序更加灵活地接受用户输入,而无需事先知道参数的数量。

    17210

    JDK有用的新特性-Java Record

    Java Record Java14 中预览的新特性叫做 Record,在 Java 中,Record 是一种特殊类型的 Java 类。可用来创建不可变类,语法 简短。参考JEP 395....我们可以在 Record 中添加构造方法, 有三种类型的构造方法分别:是紧凑的,规范的和定制构造方法 紧凑型构造方法没有任何参数,甚至没有括号。...规范构造方法是以所有成员作为参数 定制构造方法是自定义参数个数 step1: 紧凑和定制构造方法 public record Student(Integer id,String name,String...文件(紧凑构造方法和规范构造方法合并了 ): Record 与 与 Lombok Java Record 是创建不可变类且减少样板代码的好方法。...编译器知道记录组件的确切数量和类型。

    29620

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

    交互 defrecord、deftype生成同名的类,proxy、reify生成匿名的类 需要明确一点,只有在 AOT 编译时,Clojure 才会在本地生成 .class 文件,其他情况下生成的类均在内存中...我们知道 Clojure 里面很多“函数”其实是用宏实现的,宏在编译时会进行展开,生成新代码,上面代码中的ns、defn都是宏,展开后(在 Cider + Emacs 开发环境下,C-c M-m)可得...doInvoke(java.lang.Object); public int getRequiredArity(); public static {}; } 由于main函数的参数数量是可变的,...可以在定义 var 时指定^:redef表示必须重定向。^:dynamic的 var 永远采用重定向的方式确定最终值。...总结 Clojure 作为一门 host 在 JVM 上的语言,其独特的实现方式让其拥动态的运行时的同时,方便与 Java 进行交互。

    74320

    JDK有用的新特性-Java Record

    Java Record Java14 中预览的新特性叫做 Record,在 Java 中,Record 是一种特殊类型的 Java 类。可用来创建不可变类,语法 简短。参考JEP 395....我们可以在 Record 中添加构造方法, 有三种类型的构造方法分别:是紧凑的,规范的和定制构造方法 紧凑型构造方法没有任何参数,甚至没有括号。...规范构造方法是以所有成员作为参数 定制构造方法是自定义参数个数 step1: 紧凑和定制构造方法 public record Student(Integer id,String name,String...Lombok 提供语法的便利性,通常预装一些代码模板,根据您加入到类中的注解自动执行代码模板。这样的库纯粹是为了方便实现 POJO 类。通过预编译代码。将代码的模板加入到 class 中。...编译器知道记录组件的确切数量和类型。

    59330

    clojure基础入门(一)

    解压后用命令行进入到clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...欢迎进入clojure的世界。  ? 变量 Clojure中的变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应java中的object,然后通过变量名直接调用。...函数式编程中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?

    1.5K30

    《架构整洁之道》第 6 章 函数式编程

    整数平方在书中,举了一个整数平方的例子,分别以Java代码,和Clojure代码输出前25个整数的平方值。其区别在于,在Clojure中,没有出现一个变量。函数式编程语言中的变量,是不可变的。...不可变性与软件架构所有的竞争问题,死锁问题,并发更新问题,都是由于可变变量导致的。所以我们应该关注不可变性。...可变形的隔离一个架构设计良好的应用程序,应当将程序的内部服务进行切分,分为可变和不可变的组件,不可变组件使用纯函数的方式来执行任务,期间它不更改任务状态和变量(应当也包含数据库)。...可变和不可变之间的组件使用可变组件来通讯。最终等到需要修改状态(数据库)时,应当使用事务性数据库,避免同步更新和竞争状态发生。大部分处理逻辑应当在不可变组件中,可变组件中的逻辑越少越好。...事件溯源事件溯源的核心是不再对数据进行删改操作,这样也能避免任何可变变量。例如银行账号余额或库存数据,每一次删改就是一条记录,需要取数据时,将全部流水拉出来计算数据,并上锁。

    19260

    2024年18种热门编程语言你喜欢哪个?

    我喜欢Clojure。原因有三。第一,我想通过学习Clojure来掌握函数式编程。第二,Clojure鼓励使用不可变数据和纯函数,语法相比Scala相对简单一些。...作为做了30年的软件,且着迷于面向对象和函数式编程和设计的程序员,我花了几个晚上的时间,从2023年像TIOBE这样的编程语言排名榜单中,选择了18种热门编程语言进行解析,以便帮你选择适合的语言进行学习...面向对象式语言,使用对象封装数据和行为,便于用面向对象的方式设计复杂的大型项目。⚠️但由于这种语言的数据一般是可变的,容易出现bug,且难以并发执行。...函数式语言,其数据通常不可变,从而能减少因状态改变而引起的错误和复杂性。这种语言强调使用纯函数,意味着相同的输入总是产生相同的输出,且没有副作用(如不会修改全局状态)。...不可变性和纯函数特性使函数式语言更适合并发编程。由于没有共享状态,因此减少了死锁和竞态条件的风险。

    64710

    Java 8的函数式编程学习

    Clojure编程语言就是一个这样的例子,尽管它运行于基于类的Java虚拟机,Clojure的本质是函数式语言,并且在高级语言源程序中不直接公布类和对象(尽管提供了与Java良好的互操作性)。...非函数式编程语言中的函数式编程 一种语言是不是函数式并不是非此即彼的状态,实际上,语言存在于图谱上。在最末端,基本上是强制函数式编程,通常禁止可变的数据结构。...Clojure就是一种不接受可变数据的语言。 不过,也有一些其它语言,通常以函数方式编程,但语言并不强制这一点。Scala就是一个例子,它混和了面向对象和函数式语言。...Java 5类型系统 Java 5的发布为类型系统带来了三个主要新特性,枚举、注解和泛型。 枚举类型(Enum)在某些方面与类相似,但是它的属性只能是指定数量的实例,每个实例都不同并且在类描述中指定。...Java泛型提供了参数化类型,其想法是一种类型能扮演其它类型对象的“容器”,无需关心被包含类型的具体细节。装配到容器中的类型通常称为类型参数。

    99670

    clojure基础入门(一)

    解压后用命令行进入到clojure目录下,输入下面命令进入REPL命令行交互界面: java -cp clojure-1.7.0.jar clojure.main ?...欢迎进入clojure的世界。  ? 变量 Clojure中的变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应java中的object,然后通过变量名直接调用。...函数式编程中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure中以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不传会报异常。 ? 下面在函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?

    1.3K40

    程序员需要知道的8个Linux命令

    每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对linux命令行任务时,你应该能很熟练的完成。...grep grep, egrep, fgrep – 打印出匹配条件的文字行 假设我们只对Patterns of Enterprise Architecture这本书的订单感兴趣。...但我们只关心Patterns of Enterprise Architecture这本书的信息,而且只关心数量和价格。我现在要做到是切除我们不关心的任何信息。...find find – 在文件目录中搜索文件 在上面的例子中我们处理了order.in.log和order.out.log这两个文件。这两个文件放在我的home目录里的。...less less – 在文件里向前或向后移动 让我们再回到简单的 cat | sort 例子中来,下面的命令就是将经过合并、排序后的内容输出到less命令里。

    83950

    函数式编程简介

    所谓不完备,即系统中存在一个为真,但是无法在系统中推导出来的命题。比如:U说:“U在PM中不可证”。虽然和说谎者很类似,但其实有明显的差异。...我们可以假设U为可证,那么可以推出PM是矛盾(不相容)的;但是假设U不可证,却推导不出PM是矛盾的。U的含义是在PM中不可证,而事实上,它被证明不可证,所以U是PM中不可证的真命题。...在多并发的情况下,就得用读写锁来控制。所以不可变性特别利于并发。 ? 不可变性 不可变的链式结构 好了,现在我们有个新的需求,设计一个不可变列表收集大家的名字。...Clojure Persistent Vector 不可变的树状结构 Zipper数据结构类似于文本编辑器中的 gap buffer,编辑文本时,光标左边和右边分别是独立的buffer,光标处也是单独的...比如Clojure中的map高阶函数,它接收(fn [v] ...),把一组数据映射成另外一组数据。

    1.7K41
    领券