我需要一个函数,它获得两个Ints(a和b)并返回A/Bas Int.我相信这A/B将永远是一个整数.
这是我的解决方案:
myDiv :: Int -> Int -> Int
myDiv a b =
let x = fromIntegral a
y = fromIntegral b
in truncate (x / y)
Run Code Online (Sandbox Code Playgroud)
但是想找到更简单的解决方案.像这样的东西:
myDiv :: Int -> Int -> Int
myDiv a b = a / b
Run Code Online (Sandbox Code Playgroud)
如何将Int分为Int并获取Int?
我知道我不应该在循环中修改列表,但出于好奇,我想知道为什么以下两个示例之间的迭代次数不同.
例1:
x = [1, 2, 3, 4, 5]
for i, s in enumerate(x):
del x[0]
print(i, s, x)
Run Code Online (Sandbox Code Playgroud)
例2:
x = [1,2,3,4,5]
for i, s in enumerate(x):
x = [1]
print(i, s, x)
Run Code Online (Sandbox Code Playgroud)
示例1仅运行3次,因为何时i==3,len(x)==2.
尽管示例2运行了5次len(x)==1.
所以我的问题是,是否在循环开始时enumerate生成完整的(index, value)对列表并迭代它?或者它们是在循环的每次迭代中生成的?
Parsec在Haskell中是否(或可能有)反应(或任何其他纯函数解析器)?
简单地说,我想通过char自己提供解析器char,并获得足够多的结果以获得输出.
或者更简单,我怎么能这样做foldr或者至少map呢?
我们是否需要不同版本来支持这种反应行为?
编辑
我的问题特别是关于FRP.我用一个解析器作为例子,这是我能想到的最好的解释我的问题并大致了解我需要的东西.
我相信FRP不只是关于UI,对吗?
这听起来微不足道,但我无法找出我应该做的事情.
以下是我的类型定义:
data CDeq q a = Shallow (q a)
| Deep{ hq ? q a
, susp ? CDeq q (q a)
, tq ? q a }
Run Code Online (Sandbox Code Playgroud)
我希望它有一个实例Show.
由于GHC不允许deriving在这里,我只是试着自己写一个:
instance (Show a, Show ????) => Show (CDeq q a) where
....
Run Code Online (Sandbox Code Playgroud)
但我卡住了
我不知道如何for all type v, (q v) can be shown在Haskell中表示这一点.
我不能简单地做以下事情:
instance (Show a, Show (q a)) => Show (CDeq q a) where
....
Run Code Online (Sandbox Code Playgroud)
因为要显示CDeq q (q a),Show …
假设我有一个多态类型,其中一个参数是一个更高级的类型(* -> *).
data Tricky m = Tricky { numbers :: m Int, genesis :: m String }
Run Code Online (Sandbox Code Playgroud)
是否有一种在不使用奥术和不安全语言扩展的情况下为这些类型派生实例的一般方法?
我尝试启用,StandaloneDeriving以便我可以指定上下文:
deriving instance Show (m Int) => Show (Tricky m)
Run Code Online (Sandbox Code Playgroud)
但GHC然后抱怨约束不小于实例头,并指出我的方向UndecidableInstances.
总结一下:
1.我应该简单地与这一建议一起去,或者是有没有更好的办法?
2.有没有提议让这个过程更容易?
3.是它在某种程度上执迷不悟想获得"高kinded"实例?为一些具体类型派生实例会更好(例如Vector,[].Set)
您将如何使用新DuplicateRecordFields启用的镜头生成镜头?
我已经尝试使用makeLenses,但没有生成任何内容任何内容。
我还尝试使用限定符导入我的构造函数以防止字段和镜头之间的名称冲突,但这也无济于事。
模板-haskell 是否有一些未解决的问题,因为它与这个新扩展有关(我在 GHC 错误跟踪器中找到了一张关于该效果的票,但它已被关闭),还是我遗漏了一些明显的东西?
使用 引用特定版本的git存储库的正确方法是Stack什么?
堆栈抱怨在第一场出现的语法错误extra-deps的部分stack.yaml。下面的代码片段基于官方 Stack 文档中的一个示例,我不太确定为什么它不起作用。
# Dependency packages to be pulled from upstream that are not in the resolver
# (e.g., acme-missiles-0.3)
extra-deps:
- git: https://github.com/jwaldmann/moo
commit: b429a7d371c0b268a4bb8dbea8044054aaf04cd5
- git: https://github.com/jwaldmann/monad-mersenne-random
commit: d1f949fe60dc0c0cfbd310b339fe7fd5ecf4c5f5
- gray-code-0.3.1
#extra-deps: [gray-code-0.3.1]
Run Code Online (Sandbox Code Playgroud) 我有一个索引列表:
idx = [1,4,5]
Run Code Online (Sandbox Code Playgroud)
和感兴趣的列表:
mylist = ['a','b','c','d','e','f']
Run Code Online (Sandbox Code Playgroud)
我想从mylist索引不在idx.
所以结果应该是:
['a','c','d']
Run Code Online (Sandbox Code Playgroud)
我也可以拆分mylist为['a','c','d']and ['b','e','f'],因为无论如何我都会使用它们。
一个 numpy 版本是可以的,尽管我现在实际上只有两个列表。
我需要匹配大于 5 的失败计数。
string="""fail_count 7
fail_count 8
fail_count 9
fail count 7
fail_count 71
fail_count 23
"""
match = re.search(r'fail(\s|\_)count\s[5-9]', string)
if match:
print match.group()
Run Code Online (Sandbox Code Playgroud)
我最多可以匹配 9,但是如果我将范围增加到 999,它就不起作用。
Swift Arrays上是否有一个内置方法将它分成两部分,保留所有元素的顺序?
类似于Array.prefix和 的东西Array.suffix,合二为一?
我知道partitionand split,但它们分别不保留顺序和大小。
例子:
[1,2,3,5,6,2,3,5].cut(where: { $0 < 5 })
>>> ([1,2,3], [5,6,2,3,5])
Run Code Online (Sandbox Code Playgroud)