标签: mutual-recursion

如何让两种方法相互呼叫?

关于如何让两个方法相互呼叫(即有A()呼叫B()B()呼叫A()),我有点困惑.似乎F#只在代码中遇到它后"看到"该方法,所以如果它没有,它只是说值或构造函数尚未定义.

我错过了一些非常基本的东西吗?

f# mutual-recursion

34
推荐指数
4
解决办法
2718
查看次数

F#转发类型声明

我偶然发现了F#中的这个问题.假设,我想声明两种相互引用的类型:


type firstType = 
     | T1 of secondType
     //................

type secondType =
     | T1 of firstType  
     //................    
Run Code Online (Sandbox Code Playgroud)

我该怎么做,所以编译器不会生成错误?

syntax recursion f# types mutual-recursion

32
推荐指数
1
解决办法
4041
查看次数

为什么Haskell不支持相互递归的模块?

Haskell支持相互递归的let-bindings,这很棒.Haskell不支持相互递归的模块,这有时很糟糕.我知道GHC有它的.hs-boot机制,但我认为这有点像黑客.

据我所知,对相互递归模块的透明支持应该相对"简单",并且它可以完全像相互递归的let-bindings:不是将每个单独的模块作为编译单元,而是将每个强连接组件模块依赖图作为编译单元.

我在这里错过了什么吗?Haskell以这种方式不支持相互递归模块有什么重要的原因吗?

compiler-construction haskell module mutual-recursion

17
推荐指数
1
解决办法
1070
查看次数

Haskell让表达式收敛,而使用fix的类似表达式则不会

我一直难以理解为什么haskell表达式如预期let (x,y) = (y,1) in (x,y)收敛(1,1)fix (\(x,y)-> (y,1))导致<<loop>>被抛出.有谁能解释一下?

haskell mutual-recursion

17
推荐指数
1
解决办法
290
查看次数

歧视工会可以相互提及吗?

我正在使用受歧视的联合构建表达式树.以下代码:

type IntExpression =
    | TrueIsOne of BoolExpression

type BoolExpression =
    | LessThan of IntExpression * IntExpression
    | And of BoolExpression * BoolExpression
    | Or of BoolExpression * BoolExpression
    | Bool of bool
Run Code Online (Sandbox Code Playgroud)

抛出错误,因为未定义BoolExpression.交换定义只会导致反向(IntExpression未定义),如您所料.

有没有解决的办法?

recursion f# mutual-recursion discriminated-union

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

由于循环引用而确定如何订购F#类型的问题

我有一些扩展常见类型的类型,这些是我的模型.

然后我为CRUD操作的每个模型类型都有DAO类型.

我现在需要一个允许我在给定任何模型类型的情况下找到id的函数,因此我为一些其他函数创建了一个新类型.

问题是我不知道如何订购这些类型.目前我在dao之前有模型,但我不知何故需要DAOMisc之前CityDAOCityDAO之前DAOMisc,这是不可能的.

简单的方法是把每个DAO此功能,指的只是前,可以来的类型,所以,State之前谈到CityState有一个外键关系City,所以辅助功能将是非常短的.但是,这只是让我觉得错误,所以我不确定如何最好地解决这个问题.

这是我的杂项类型,BaseType我的所有模型的常见类型.

type DAOMisc =
    member internal self.FindIdByType item = 
        match(item:BaseType) with
        | :? StateType as i -> 
            let a = (StateDAO()).Retrieve i
            a.Head.Id
        | :? CityType as i -> 
            let a = (CityDAO()).Retrieve i
            a.Head.Id
        | _ -> -1
Run Code Online (Sandbox Code Playgroud)

这是一种dao类型.CommonDAO实际上有CRUD操作的代码,但这在这里并不重要.

type CityDAO() =
    inherit CommonDAO<CityType>("city", ["name"; "state_id"], 
        (fun(reader) ->
            [
                while reader.Read() do
                    let s …
Run Code Online (Sandbox Code Playgroud)

f# types functional-programming reference mutual-recursion

13
推荐指数
3
解决办法
1568
查看次数

用于相互递归函数的定点组合器?

是否有一个固定点组合器用于创建相互递归函数的元组?即我正在寻找像Y-Combinator这样的东西,但它需要多个"递归"*函数,并将返回一个函数元组?

*:当然不是真正的递归,因为它们是以通常的Y-Combinator方式将自己(和兄弟姐妹)作为参数编写的.

recursion functional-programming combinators y-combinator mutual-recursion

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

F#:相互递归函数

可能重复:
[F#]如何让两种方法相互呼叫?

大家好,

我有一个场景,我有两个功能,可以从相互递归中受益,但我不确定如何在F#中做到这一点

我的场景不像下面的代码那么简单,但我想得到类似于编译的东西:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

let rec g x =
  if x>0 then
    f (x-1)
  else
    x
Run Code Online (Sandbox Code Playgroud)

recursion f# mutual-recursion

12
推荐指数
1
解决办法
4073
查看次数

如何有两个相互调用C++的函数

我有2个这样的函数,它对if循环进行模糊处理:

void funcA(string str)
{
    size_t f = str.find("if");
    if(f!=string::npos)
    {
        funcB(str);        //obfuscate if-loop
    }
}

void funcB(string str)
{
     //obfuscate if loop
     funcA(body_of_if_loop);     //to check if there is a nested if-loop
}
Run Code Online (Sandbox Code Playgroud)

如果我放在前面,问题funcA就是无法看到funcB,反之亦然.funcBfuncA

非常感谢这里的任何帮助或建议.

c++ mutual-recursion

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

OCaml:在定义函数之前声明它

有没有办法在OCaml中定义函数之前声明一个函数?我正在使用OCaml解释器.

我有两个功能:

let myFunctionA = 
(* some stuff here..... *) myFunctionB (*some stuff *)

let myFunctionB = 
(* some stuff here .... *) myFunctionA (* some stuff *)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为myFunctionA在制作之前无法调用myFunctionB.

我做了一些谷歌搜索,但似乎找不到任何东西.我怎么能做到这一点?

ocaml functional-programming function mutual-recursion function-declaration

10
推荐指数
1
解决办法
4909
查看次数