如何在满足给定条件的榆树中创建一组三元组?

雷·托尔

我知道Elm既没有for循环(不足为奇),也没有理解力(有些出乎意料)。我知道map应该在可能会有理解的地方使用它。

但是,如何从三个范围变量构建一组三元组呢?我对生成这些元组很感兴趣,这在Python中很简单:

>>> [(x,y,z) for z in range(5) for y in range(z) for x in range(y)]
[(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3), (0, 1, 4), (0, 2, 4), 
(1, 2, 4), (0, 3, 4), (1, 3, 4), (2, 3, 4)]

我不确定如何在榆木中制作这种东西。这是我尝试过的:

import Text (asText)
import List (map)
main =
  asText <| map (\z -> map (\y -> map (\x -> (x,y,z)) [0..y-1]) [0..z-1]) [0..4]

这产生

[[],[[]],[[],[(0,1,2)]],[[],[(0,1,3)],[(0,2,3),(1,2,3)]],
[[],[(0,1,4)],[(0,2,4),(1,2,4)],[(0,3,4),(1,3,4),(2,3,4)]]]

这很接近,但需要展平。

我是Elm的新手,所以我不知道生成这些元组的正确方法。我大概可以弄清楚如何弄平我想出的列表,代码本身看起来很冗长(我应该使用List.map3吗?),对于较大的范围,我想按需生成值。是否有办法将这些值生成为信号?

阿帕纳什卡

展平

最小的变化,使您的工作,例如,你所希望的方式是改变两个外mapconcatMap

import Text (asText)
import List (map,concatMap)
main =
  asText <| concatMap (\z -> concatMap (\y -> map (\x -> (x,y,z)) [0..y-1]) [0..z-1]) [0..4]

根据您喜欢阅读代码的方式,您可能更喜欢以下代码:

import Text (asText)
import List (map,concatMap)

list = 
  [0..4] |> concatMap (\z -> 
    [0..z-1] |> concatMap (\y -> 
      [0..y-1] |> map (\x -> (x,y,z))))

main =
  asText list

实际上,这不是您可以做的事情map3,因为它仅适用于彼此不依赖的列表。

按需生成

信号可能不便于按需生成。除非涉及明显的时间成分,否则即使列表结束,信号也不是正确的选择。

要生成某些东西,您应该定义一个惰性序列。您可以使用函数来建模懒惰,也可以使用懒惰库来记住懒惰动作。

要创建自己的惰性序列,只需使用以下命令:

type LazySeq a = End | Item a (() -> LazySeq a)

map : (a -> b) -> LazySeq a -> LazySeq b
map f ls =
  case ls of
    End -> End
    Item i next -> Item (f i) (\() -> map f (next ()))

append : LazySeq a -> LazySeq a -> LazySeq a
append l r =
  case l of
    End -> r
    Item i next -> Item i (\() -> append (next ()) r)

concat : LazySeq (LazySeq a) -> LazySeq a
concat ls =
  case ls of
    End -> End
    Item i next ->
      case i of
        End -> concat (next ())
        Item i2 next2 -> Item i2 (\() -> append (next2 ()) (concat (next ())))

concatMap : (a -> LazySeq b) -> LazySeq a -> LazySeq b
concatMap f ls =
  concat (map f ls)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在满足给定条件的榆树中创建一组三元组?

来自分类Dev

如何制作一组三元组的列并对其应用功能

来自分类Dev

如何在Marklogic JSON文档中插入一个以上的三元组?

来自分类Dev

如何从MySql创建三元组

来自分类Dev

如何从SCALA中的三元组列表中创建多图?

来自分类Dev

如何区分SQL三元组与显式三元组?

来自分类Dev

给定列总和的行对/三元组的顺序

来自分类Dev

正则表达式:匹配给定整数中的一个数字的三元组

来自分类Dev

如何仅使用三元组值对给定列的向量进行排序?

来自分类Dev

SPARQL - 超过 56000 个三元组的文件 - 如何一次性检查条件

来自分类Dev

如何编写一个接受一个数字并返回一个三元组列表的函数“三元组”?

来自分类Dev

从对列表创建三元组列表,以便所有三元组子集都存在于对列表中

来自分类Dev

确定对象是否为DateTime而不是null作为三元组中的条件

来自分类Dev

验证JSON-LD中的三元组

来自分类Dev

从列表中删除相邻号码的三元组

来自分类Dev

验证JSON-LD中的三元组

来自分类Dev

目标架构三元组中“ pc”的含义

来自分类Dev

如何在SPARQL中构造结合两个过渡性封闭的新三元组?

来自分类Dev

如何检查Jena TDB是否已创建并且三元组存储正在工作

来自分类Dev

如何创建更快的毕达哥拉斯三元组?

来自分类Dev

RDF重复三元组

来自分类Dev

三元组的最佳合并

来自分类Dev

编号三元组

来自分类Dev

三元组的稀疏矩阵

来自分类Dev

编号三元组

来自分类Dev

处理三元组的重复

来自分类Dev

Python,如何返回一个三元组?

来自分类Dev

如何更快地添加芝麻2.7.7中的100万个三元组

来自分类Dev

F#:如何在不牺牲运行时性能的情况下为元组,三元组和四元组提供fst

Related 相关文章

  1. 1

    如何在满足给定条件的榆树中创建一组三元组?

  2. 2

    如何制作一组三元组的列并对其应用功能

  3. 3

    如何在Marklogic JSON文档中插入一个以上的三元组?

  4. 4

    如何从MySql创建三元组

  5. 5

    如何从SCALA中的三元组列表中创建多图?

  6. 6

    如何区分SQL三元组与显式三元组?

  7. 7

    给定列总和的行对/三元组的顺序

  8. 8

    正则表达式:匹配给定整数中的一个数字的三元组

  9. 9

    如何仅使用三元组值对给定列的向量进行排序?

  10. 10

    SPARQL - 超过 56000 个三元组的文件 - 如何一次性检查条件

  11. 11

    如何编写一个接受一个数字并返回一个三元组列表的函数“三元组”?

  12. 12

    从对列表创建三元组列表,以便所有三元组子集都存在于对列表中

  13. 13

    确定对象是否为DateTime而不是null作为三元组中的条件

  14. 14

    验证JSON-LD中的三元组

  15. 15

    从列表中删除相邻号码的三元组

  16. 16

    验证JSON-LD中的三元组

  17. 17

    目标架构三元组中“ pc”的含义

  18. 18

    如何在SPARQL中构造结合两个过渡性封闭的新三元组?

  19. 19

    如何检查Jena TDB是否已创建并且三元组存储正在工作

  20. 20

    如何创建更快的毕达哥拉斯三元组?

  21. 21

    RDF重复三元组

  22. 22

    三元组的最佳合并

  23. 23

    编号三元组

  24. 24

    三元组的稀疏矩阵

  25. 25

    编号三元组

  26. 26

    处理三元组的重复

  27. 27

    Python,如何返回一个三元组?

  28. 28

    如何更快地添加芝麻2.7.7中的100万个三元组

  29. 29

    F#:如何在不牺牲运行时性能的情况下为元组,三元组和四元组提供fst

热门标签

归档