Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 是什么导致断点无法绑定?_F#_Conways Game Of Life - Fatal编程技术网

F# 是什么导致断点无法绑定?

F# 是什么导致断点无法绑定?,f#,conways-game-of-life,F#,Conways Game Of Life,是什么导致断点无法绑定? 我在尝试执行以下表达式时收到错误: let grid_1 = { grid with Four= grid |> update };; // Updated here 我收到的错误如下: 代码: type State = Alive | Dead type Response = | Survives | Dies | Resurected type Grid = { Zero:State

是什么导致断点无法绑定?

我在尝试执行以下表达式时收到错误:

let grid_1 = {  grid with Four= grid |> update };; // Updated here
我收到的错误如下:

代码:

type State = Alive | Dead 

type Response = | Survives
                | Dies
                | Resurected

type Grid = { Zero:State
              One:State
              Two:State
              Three:State
              Four:State // Central
              Five:State
              Six:State
              Seven:State
              Eight:State }

let isUnderPopulated (grid:Grid) =

    let zero =  if grid.Zero  = Alive then 1 else 0
    let one =   if grid.One   = Alive then 1 else 0
    let two =   if grid.Two   = Alive then 1 else 0
    let three = if grid.Three = Alive then 1 else 0
    let four =  if grid.Four  = Alive then 1 else 0
    let five =  if grid.Five  = Alive then 1 else 0
    let six =   if grid.Six   = Alive then 1 else 0
    let seven = if grid.Seven = Alive then 1 else 0
    let eight = if grid.Eight = Alive then 1 else 0

    let livingCount = zero + one + two + three + four + five + six + seven + eight
    livingCount < 2

let grid = { Zero =  Dead
             One =   Dead 
             Two =   Dead
             Three = Dead
             Four =  Dead
             Five =  Dead
             Six =   Dead
             Seven = Dead
             Eight = Dead }

let update (grid:Grid) =

    let underPopulated = grid |> isUnderPopulated 
    if underPopulated then Dead 
    else Alive

let grid_1 = {  grid with Four= grid |> update };; // Updated here
type State=Alive | Dead
类型响应=|生存
|死亡
|复活
类型Grid={Zero:State
一:国家
二是国家
三:国家
四:州/中央
五:国家
六:国家
七:国家
八:国家}
let Is人口不足(网格:网格)=
让零=如果网格。零=活动,则1=其他0
让一个=如果网格。一个=活动,然后1个=其他0
让两个=如果网格。两个=活动,那么1个=0
让三个=如果网格。三个=活动,那么1个=0
设四=如果网格。四=活动,则1=其他0
设五=如果网格。五=活动,则1=其他0
设六=如果网格。六=活动,则1=其他0
设七=如果网格。七=活动,则1=其他0
设8=如果网格。8=活动,则1=其他0
让livingCount=0+1+2+3+4+5+6+7+8
活细胞计数<2
设grid={Zero=Dead
一个=死了
2=死亡
三=死
四个=死亡
五个=死亡
六=死
七=死
八=死亡}
让我们更新(网格:网格)=
设人口不足=网格|>为人口不足
如果人口不足,则死亡
还活着吗
让grid_1={grid with Four=grid |>update};;//在此更新

您可能试图将断点绑定到过期的应用程序,这意味着在进行更改之后,在重新编译之前。

尝试:

  • 在调试模式下编译

  • 在设置断点之前,请尝试清理解决方案

  • 转到调试文件夹,删除[Your application].pdb文件
  • 然后构建或重建应用程序
  • 转到调试文件夹并确认您有一个全新的[您的 应用程序].pdb文件
  • 然后试着设置你的断点
您可能没有生成调试信息,或者处于优化模式,这可能会对此产生影响。

< C++项目> < /P> 检查以下项目属性:

  • C++/通用/调试信息格式:程序数据库
  • C++/优化:已禁用
  • C++/代码生成/运行库:多线程调试
  • 链接器/调试/生成调试信息:是
  • 链接器/调试/生成程序数据库: $(TargetDir)$(TargetName).pdb
  • 链接器/清单文件/生成清单:否
  • 链接器/清单文件/允许隔离:否
  • 链接器/嵌入式IDL/忽略嵌入式IDL:是
对于C#项目,请检查以下内容:

  • 在项目属性集中,生成/常规/优化代码:禁用
  • 在IDE设置中,Debug/Options/Debug/General抑制JIT 模块负载优化(仅限托管):已启用
这可能是您的VS中的一个错误。

尝试在其他计算机IDE中打开您的解决方案。如果您可以在不同的计算机上绑定断点,这可能意味着您的VS或OS存在问题

检查您的IDE是否是最新的:

VS2013 RTM以及VS2015更新1和更新2中都有类似问题的报告

在VS中,转到工具/扩展和更新/更新/产品更新,查看您正在运行的版本。如果需要更新,它将出现在那里

这可能是由于操作系统中的错误造成的。


如果您运行的是Win 10操作系统,则在构建14251中存在与此问题相关的报告错误。这在14257(及以上)版本中得到解决

这是关于函数式编程的一般性评论,但由于它与您的问题有着显著的联系,我将提及它。在函数式编程中使用状态越多,就越需要使用调试器。我在函数式编程中使用状态的次数越少,就越不需要使用调试器。经过几个月的函数式编程,没有使用state,我不再需要调试器了。在六个月的时间里,我从未在函数式编程中使用过调试器。只有在再次使用state之后,我才需要一个调试器。是的,事情可以是有状态的,但它们使用的函数不是。解决这一问题的一种方法是传递参数中更改的所有状态,该参数通常在代码中命名为
env
world
。通常情况下,
env
可能以几个单独的变量开始,但随后将它们组合成一个元组,并将其命名为
env
。另一种方法是将其编码为OO,可能是C#,其中使用状态进行思考,然后使用F#将其重构为函数。在此过程中,您将看到什么真正需要保持为状态,以及可以做些什么来更改您的设计。正如我所指出的,当我必须添加状态和OO(如属性、成员、接口、,等等。我发现没有状态的问题的方法是找到其他编程语言的函数式编程书籍,例如ML、OCaml、Haskell,并将它们翻译成F#。但是使用数组代码要短得多,更容易让人阅读
let gridWithArray=Array.create 9 Dead
那么isubpopulated可以重写为:
let isubpopulated Array value=(Array |>Array.filter((=)Alive)|>Array.length)
这通常是某种优化,我只在运行时看到类似的错误(编辑器通常只是拒绝绑定断点并将其移动到另一行)-有时如果使用C#项目,它可能没有编译,因此会丢失绑定,我认为这是错误的