小编geo*_*gjz的帖子

递归 Haskell 函数似乎不会终止

为了提高我的 Haskell 技能,我正在尝试解决Code 2018出现。正如预期的那样,我已经被困在第 1 天,特别是第 2 部分:

- - 第二部分 - -

您会注意到设备一遍又一遍地重复相同的频率更改列表。

要校准设备,您需要找到它达到的第一个频率两次。

例如,使用上面相同的更改列表,设备将循环如下:

当前频率0,变化+1;结果频率 1。

当前频率1,变化-2;结果频率-1。

当前频率-1,变化+3;结果频率 2。

当前频率2,变化+1;结果频率 3.

(此时,设备从列表的开头继续。)

当前频率3,变化+1;结果频率 4.

当前频率4,变化-2;结果频率 2,这已经被看到了。

在这个例子中,第一个达到两次的频率是2。请注意,在找到重复频率之前,您的设备可能需要多次重复其频率更改列表,并且在处理列表的过程中可能会发现重复项。

以下是其他示例:

+1, -1 首先达到 0 两次。

+3、+3、+4、-2、-4 首先达到 10 两次。

-6、+3、+8、+5、-6 首先达到 5 两次。

+7, +7, -2, -7, -4 首先两次达到 14。

您的设备达到两次的第一个频率是多少?

基本上,我有一个非常大的列表vals::[Int],其中包括上面提到的所有频率变化。

这是我为解决此问题而编写的函数:

-- [1] The list of frequency changes
-- [2] The first repeat frequency
--             [1]      [2]
part2helper :: [Int] …
Run Code Online (Sandbox Code Playgroud)

recursion haskell

3
推荐指数
1
解决办法
200
查看次数

我的Megaparsec解析器卡住了,ghci调试也没有帮助

我已经完成了这个Megaparsec教程,现在我正在尝试编写自己的解析器.我想为编写汇编语言编写一个简单的解析器:

Label: lda $0ffe
       sta %10100110
       push $01, $02, $03
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的简单数据类型:

-- Syntax.hs
module Syntax where

import  Data.Int

-- |A program is made up of one or more source lines
type Program = [SourceLine]

data SourceLine = SourceLine
    { label :: Maybe String     -- ^ Each line may contain a label
    , instr :: Maybe String     -- ^ This can either be an opcode or an assembler directive
    , operand :: Maybe String   -- ^ The opcode/instruction may …
Run Code Online (Sandbox Code Playgroud)

parsing haskell megaparsec

2
推荐指数
1
解决办法
90
查看次数

标签 统计

haskell ×2

megaparsec ×1

parsing ×1

recursion ×1