gpt4 book ai didi

clojure - 如何编写clojure条件语句

转载 作者:行者123 更新时间:2023-12-01 07:52:42 26 4
gpt4 key购买 nike

如何翻译以下代码

while ((readInteger = fileInputStream.read()) != -1) {
.....
}

在 clojure 中?我需要在代码的其他部分使用 readInteger 的值,但 '!= -1' 也需要在 while 条件中发生。

最佳答案

一些使事物适应 Clojure 语法的通用模式

  • 移动 (在函数或运算符的左侧。
  • 将运算符(operator)移动到他们工作的事物的左侧并用 ( ) 包围起来

  • 所以你可以这样开始:
    (while (not= (.read fileInputStream) -1 ... and so on.

    那么,由于您需要使用 readInteger value 稍后在代码中让我们讨论命名值和循环。如果您只想读取一次值并为其命名,您可以这样做:
    (let [readInteger  (.read fileInputStream)]
    ... your code here)

    既然要循环执行,那我们就用 loop而不是让:
    (loop [readInteger  (.read fileInputStream)]
    ... your code here
    (if (not= readInteger -1)
    (recur (.read fileInputStream))))

    for (这不是其他语言的“for 循环”)
    (for [readInteger   (repeatedly #(.read fileInputStream))
    :while (not= readInteger -1)]
    ... do somethign with readInteger ...)

    For 生成结果序列,而不是像在其他语言中那样循环。

    然后Clojuring的下一步是考虑如何将读取数据与处理数据分开。我们可以:
  • 对所有数据进行排序
  • 处理每个数据

  • 像这样:
    (let [data (line-seq fileInputStream)]
    (map #(Integer/parseInt %) data)
    ...)

    标准库中有一些函数可以将很多东西转换成序列,还有一堆函数可以用序列做很多事情。

    关于clojure - 如何编写clojure条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862089/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com