小编use*_*221的帖子

计算Haskell的变化

我遇到了计算变化的DP问题的以下解决方案:

count' :: Int -> [Int] -> Int
count' cents coins = aux coins !! cents
  where aux = foldr addCoin (1:repeat 0)
          where addCoin c oldlist = newlist
                  where newlist = (take c oldlist) ++ zipWith (+) newlist (drop c oldlist)
Run Code Online (Sandbox Code Playgroud)

它比我天真的自上而下的递归解决方案运行得快得多,我仍然试图理解它.

我得到一个硬币列表,aux计算正整数的每个解决方案.因此,金额的解决方案是在该位置索引列表.

不过,我不太清楚addCoin.它以某种方式使用每个硬币的价值从硬币列表中绘制元素?我正在努力为它找到一个直观的意义.

折叠aux也将我的大脑绑在一起.为什么是1:repeat 0初始值?它代表什么?

haskell dynamic-programming

7
推荐指数
1
解决办法
594
查看次数

swing - 触发树单元格编辑事件

我有一个带可编辑节点的JTree.

如何以编程方式触发树状单元格编辑事件,即调出节点重命名文本框来代替突出显示的节点,就像用户手动突出显示它并按下F2一样?

基本上我想添加一个"重命名"菜单项或工具栏按钮,以便在树的特定功能上提示用户,并且我希望它在用户突出显示节点时与F2按键功能相同.

java swing rename editor jtree

5
推荐指数
1
解决办法
1358
查看次数

应用式Parsec的问题

我有以下ADT:

type Program = [Expr]
data Expr =
    Num Int
    | Bool Bool
    | Binding String Expr
    deriving (Show)
Run Code Online (Sandbox Code Playgroud)

这是表单的变量绑定表达式的解析器lhs is rhs.

binding :: Parser Expr
binding = do
    lhs <- word
    spaces
    string "is"
    spaces
    rhs <- expr
    return $ Binding lhs rhs
Run Code Online (Sandbox Code Playgroud)

它工作正常,但当我尝试将其转换为应用风格时,它会给出错误的结果.

binding :: Parser Expr
binding = Binding <$> word <* (spaces *> string "is" *> spaces) *> expr
Run Code Online (Sandbox Code Playgroud)

更换*>>>在parenthesised部分也不能工作.这两种实现有什么区别?是否有一个组合器用于组合两个解析器并忽略两者的结果?

尝试调试Debug.trace也不起作用......没有打印.

binding :: Parser Expr
binding = (\x …
Run Code Online (Sandbox Code Playgroud)

haskell parsec

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

与多态变体结合

我在一个模块中定义了一个变体,另一个模块基本上扩展了变体,但是我使用的是一个多态变体.

为了防止子表达式Extended.exp成为那些Core.exp,结后来被束缚.

module Core = struct
  type 'a expr_f = [
    | `Int of int
    | `Plus of 'a expr_f * 'a expr_f
  ]

  type expr = expr expr_f
end

module Ex = struct
  type 'a expr_f = [
    | 'a Core.expr_f
    | `Times of 'a expr_f * 'a expr_f
  ]

  type expr = expr expr_f
end
Run Code Online (Sandbox Code Playgroud)

这似乎有效,直到我们使用递归函数遍历类型的值Ex.expr.

let rec test : Ex.expr -> Ex.expr = function
  | `Int i -> `Int i
  | …
Run Code Online (Sandbox Code Playgroud)

ocaml

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

标签 统计

haskell ×2

dynamic-programming ×1

editor ×1

java ×1

jtree ×1

ocaml ×1

parsec ×1

rename ×1

swing ×1