关于如何让两个方法相互呼叫(即有A()呼叫B()和B()呼叫A()),我有点困惑.似乎F#只在代码中遇到它后"看到"该方法,所以如果它没有,它只是说值或构造函数尚未定义.
我错过了一些非常基本的东西吗?
我偶然发现了F#中的这个问题.假设,我想声明两种相互引用的类型:
type firstType =
| T1 of secondType
//................
type secondType =
| T1 of firstType
//................
Run Code Online (Sandbox Code Playgroud)
我该怎么做,所以编译器不会生成错误?
Haskell支持相互递归的let-bindings,这很棒.Haskell不支持相互递归的模块,这有时很糟糕.我知道GHC有它的.hs-boot机制,但我认为这有点像黑客.
据我所知,对相互递归模块的透明支持应该相对"简单",并且它可以完全像相互递归的let-bindings:不是将每个单独的模块作为编译单元,而是将每个强连接组件模块依赖图作为编译单元.
我在这里错过了什么吗?Haskell以这种方式不支持相互递归模块有什么重要的原因吗?
我一直难以理解为什么haskell表达式如预期let (x,y) = (y,1) in (x,y)收敛(1,1)但fix (\(x,y)-> (y,1))导致<<loop>>被抛出.有谁能解释一下?
我正在使用受歧视的联合构建表达式树.以下代码:
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未定义),如您所料.
有没有解决的办法?
我有一些扩展常见类型的类型,这些是我的模型.
然后我为CRUD操作的每个模型类型都有DAO类型.
我现在需要一个允许我在给定任何模型类型的情况下找到id的函数,因此我为一些其他函数创建了一个新类型.
问题是我不知道如何订购这些类型.目前我在dao之前有模型,但我不知何故需要DAOMisc之前CityDAO和CityDAO之前DAOMisc,这是不可能的.
简单的方法是把每个DAO此功能,指的只是前,可以来的类型,所以,State之前谈到City的State有一个外键关系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) 是否有一个固定点组合器用于创建相互递归函数的元组?即我正在寻找像Y-Combinator这样的东西,但它需要多个"递归"*函数,并将返回一个函数元组?
*:当然不是真正的递归,因为它们是以通常的Y-Combinator方式将自己(和兄弟姐妹)作为参数编写的.
recursion functional-programming combinators y-combinator mutual-recursion
可能重复:
[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) 我有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
非常感谢这里的任何帮助或建议.
有没有办法在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
mutual-recursion ×10
f# ×5
recursion ×4
haskell ×2
types ×2
c++ ×1
combinators ×1
function ×1
module ×1
ocaml ×1
reference ×1
syntax ×1
y-combinator ×1