Objective C中的递归数据类型和类型

时间:2011-05-31 02:55:37

标签: objective-c sml

  

相关:
  Lazy datatypes in Objective C

从相关问题我能够弄清楚如何使用块对象模仿暂停计算,但我仍然试图掌握这个概念。对于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进行懒惰编程......例如按需处理所有自然数字。我一直在寻找这个圈子。

1 个答案:

答案 0 :(得分:3)

有两个独立的正交概念:递归数据类型和延迟计算。在C和C类语言中,您使用struct为前者建模,其中包含指向其自身的指针,或者包含/直接或间接指向struct的其他数据类型。使用块对象或其他任何内容来暂停计算。将这两个概念组合在一起,得到一个struct,其中包含一个指向暂停计算的指针,该计算返回(指向)struct