gpt4 book ai didi

f# - 如何在 F# 中定义这种惰性(无限?)数据结构

转载 作者:行者123 更新时间:2023-12-01 01:04:07 25 4
gpt4 key购买 nike

我在定义以下简单文本光标时遇到问题,该光标由一个元组表示,其中第一个元素是当前字符,第二个是获取下一个或崩溃的函数。

let rec nextAt index text = 
if index < String.length text then
(text.[index], (fun() -> nextAt (index + 1) text))
else
failwith "End of string."

我正进入(状态
Error   1   Type mismatch. Expecting a
char * (unit -> 'a)
but given a
'a
The resulting type would be infinite when unifying ''a' and 'char * (unit -> 'a)'

最佳答案

您必须使用中间类型:

type GetNext = GetNext of (unit -> char * GetNext)

let rec nextAt index text =
if index < String.length text then
(text.[index], GetNext(fun () -> nextAt (index + 1) text))
else
failwith "End of string."

this question about y combinator的答案更深入地探索此限制并提出解决方法。

关于f# - 如何在 F# 中定义这种惰性(无限?)数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com