从相关问题我能够弄清楚如何使用块对象模仿暂停计算,但我仍然试图掌握这个概念。对于horribleComputation
它会起作用,但是如何建模无限流?
如何在SML中正常完成,
(* Have a datatype to wrap a computation *)
datatype 'a susp = Susp of (unit -> 'a)
(* Create a recursive datatype to handle an infinite stream *)
datatype 'a stream = Cons of 'a * ('a stream') susp
type 'a stream = ('a stream') susp
现在在Objective-C中有typedef,它接受预定义值
enum suit {hearts, spades, diamonds, clubs};
我无法弄清楚如何获得部分的Cons
目前,如果无法进行无限数据建模,那么一个模型如何成为一手牌。再次在SML中,
datatype suit = Clubs | Spades | Hearts | Diamonds
datatype rank = Two | Four | Five (*... etc *)
(* Then a card *)
type card = rank*suit
(* And now we can have a Hand :) *)
datatype hand = Empty | Hand of card * hand;
最有可能一切都不可转让,但我只是好奇我能否使用Objective C进行懒惰编程......例如按需处理所有自然数字。我一直在寻找这个圈子。
答案 0 :(得分:3)
有两个独立的正交概念:递归数据类型和延迟计算。在C和C类语言中,您使用struct
为前者建模,其中包含指向其自身的指针,或者包含/直接或间接指向struct
的其他数据类型。使用块对象或其他任何内容来暂停计算。将这两个概念组合在一起,得到一个struct
,其中包含一个指向暂停计算的指针,该计算返回(指向)struct
。