问题标签 [cons]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
706 浏览

macros - 球拍中的 c(a|d)+r 宏

我想知道是否可以在 Racket 中编写一个宏来翻译每种形式的形状 (c(a|d)+r xs),其中 c(a|d)+r 是匹配 car、cdr、caar 的正则表达式, cadr, ... etc,放入对应的first和rest组成。

例如,此宏应采用 (caadr '(1 2 3 4 5)) 并将其转换为 (first (first (rest '(1 2 3 4 5))))。

Shen 中的类似内容(Mark Tarver 的新编程语言):https ://groups.google.com/group/qilang/browse_thread/thread/131eda1cf60d9094?hl=en

0 投票
2 回答
2143 浏览

f# - fsharp 中的 fst 和 3 元组

你知道完成这项工作的最佳方法吗:

一定有比重写 fst 更好的方法..

更新 在垫建议之后,我重写了将以前的 'a*'b 打包成一个结构我的代码现在看起来像

0 投票
3 回答
1549 浏览

f# - F# 中序列的 ​​cons :: 运算符?

是否有更好的代码不需要将序列转换为列表?

0 投票
4 回答
421 浏览

list - LISP 中的列表评估(缺点的奇怪行为)

我目前正在玩 LISP。一切都很好,但我无法理解以下问题。

我有这个附加操作:

我这样使用它:

Racket中的结果 是:

但为什么?在我看来,它应该是'(1 2 4 5),因为 cons 返回一个列表,而 myappends 附加两个列表。有谁能够帮助我?LISP 在做什么?

0 投票
1 回答
3627 浏览

ios - NSString 到 const char * 转换为希腊字符

我正在尝试将包含希腊词的 NSString 转换为 const char。我正在尝试使用用于希腊语言的 UTF-8 编码转换字符串,当我将字符注销时,它里面有垃圾。请在这里提供一点帮助..

0 投票
5 回答
3080 浏览

recursion - 累加器、conj 和递归

我已经从 4clojure.com 解决了 45 个问题,并且在尝试使用递归和累加器解决一些问题的过程中发现了一个反复出现的问题。

我将尽我所能解释我正在做的最好的事情,以最终得到令人毛骨悚然的解决方案,希望一些 Clojurers 会“得到”我没有得到的东西。

例如,问题 34 要求编写一个以两个整数作为参数的函数(不使用range)并创建一个范围(不使用 range )。简单地说,你做 (... 1 7) 你得到 (1 2 3 4 5 6)。

现在这个问题不是关于解决这个特定问题。

如果我使用递归和累加器解决这个问题怎么办?

我的思考过程是这样的:

  • 我需要编写一个带有两个参数的函数,我从(fn [xy] )开始

  • 我需要递归,我需要跟踪一个列表,我将使用一个累加器,所以我在第一个函数中编写了第二个函数,并接受一个额外的参数:

    (fn [xy]
    ((fn g [xy acc] ...) x y '())

(显然我无法在 SO 上正确格式化 Clojure 代码!?)

在这里我已经不确定我做对了:第一个函数必须正好有两个整数参数(不是我的调用),我不确定:如果我想使用累加器,我可以使用累加器而不创建嵌套函数?

然后我想conj,但我不能这样做:

所以我做了一些奇怪的事情来确保我首先有一个序列,我最终得到了这个:

但是这会产生这个:

而不是这个:

所以我最终做了一个额外的展平,它可以工作,但它非常难看。

我开始理解一些事情,在某些情况下,我什至开始以一种更流行的方式“思考”,但我在编写解决方案时遇到了问题。

例如在这里我决定:

  • 使用蓄能器
  • 通过递增x直到达到y来递归

但我最终得到了上面的怪物。

很多方法可以解决这个问题,再一次,这不是我所追求的。

我所追求的是,​​在我决定 cons/conj、使用累加器和递归之后,我可以得到这个(不是我写的):

而不是这个:

我认为这是能够解决一些问题的开始,但我对我倾向于产生的丑陋解决方案有点失望......

0 投票
2 回答
242 浏览

scala - 为什么称为显式的 cons 函数在 Scala 中对 Int 有效?

您可以使用以下方法在 Scala 中创建新列表:

据我了解,这可以重写为:

主要是因为 :: fixty 但如果我写:

我得到“值 :: 不是 Int 的成员”这是完全可以预期的,因为在 scaladoc Int 中没有 ::,但如果我将其翻译为:

它作为输出工作:

看起来 scalac 自动将1and转换为与2Int 不同的类型。那是对的吗?如果是,为什么会发生这种奇怪的类型?

0 投票
2 回答
2067 浏览

lisp - 为什么 caddr[(ABC)] = C?

理想情况下在 LISP 中:

但书上说答案是C。谁能解释一下?

非常感谢。

0 投票
2 回答
27191 浏览

list - `::` 和 `+:` 用于添加到列表中有什么区别)?

List有 2 种方法指定将元素添加到(不可变)列表中:

  • +:(实施Seq.+:),和
  • ::(仅在 中定义List

+:技术上具有更通用的类型签名——</p>

——但忽略隐含的,根据文档消息只需要Thatbe List[B],签名是等价的。

List.+:和 和有什么不一样List.::如果它们实际上是相同的,我认为+:最好避免取决于具体的实现List。但是为什么要定义另一个公共方法,客户端代码什么时候会调用它呢?

编辑

还有一个用于::模式匹配的提取器,但我想知道这些特定的方法。

另请参阅:Scala 列表连接,::: vs ++

0 投票
1 回答
4173 浏览

clojure - clojure cons vs conj with lazy-seq

为什么 cons 在这种情况下与lazy-seq 一起工作,而 conj 却不行?

这有效:

这没有(它给出了堆栈溢出异常):