我正在通過使用ocaml製作一個龜圖形程序。這需要提供符合以下OCaml簽名的模塊的實現。如何使模塊符合OCaml簽名
type program
type ins
val mf: float -> ins
val mb: float -> ins
val tl: float -> ins
val tr: float -> ins
val pu: ins
val pd: ins
val repeat: int -> program -> ins
val make_program: ins list -> program
type stroke
val strokes: program -> stroke list
type state
val animate: program -> state list
val strokes': program -> unit
val animate': program -> unit
- 定義類型烏龜程序和龜說明。
- 用於構建指令和程序的mf,mb,tl,tr,pu,pd,repeat和make_program函數是 。
- 定義筆畫的類型。
- 編寫一個函數筆畫,給定一個海龜程序,返回由海龜繪製的筆畫列表 。
- 定義一個龜的狀態類型。
- 對一個函數進行編程,給出一個龜的程序,返回該龜的狀態列表 。
- 筆劃和動畫」渲染招龜動畫
這是我mf
,pu
和pd
代碼:
type turtle = {
mutable x : float;
mutable y : float;
mutable phi : float;
mutable stt : int;
}
let round = int_of_float
let pi = 3.1415926535897932384626433832795
let rad_of_deg a = a *. pi /. 180.
let p = { x = 100.; y = 100.; phi = 0.; stt = 1 }
let pu() =
p.stt <- 0
let pd() =
p.stt <- 1
let mf l =
let x2 = (p.x) +. l *. cos (rad_of_deg p.phi)
and y2 = (p.y) +. l *. sin (rad_of_deg p.phi) in
moveto (round p.x) (round p.y);
if (p.stt == 1) then lineto (round x2) (round y2);
p.x <- x2;
p.y <- y2
的mf
輸出是: val mf: float -> unit = <fun>
我的問題是如何使它看起來像要求?
問題是? – ivg
如何構建符合上述Ocaml簽名的模塊 – LaD
從我看到您的問題是您的函數'mf'返回'unit'並且您希望它返回'ins'。但是,'ins'是什麼類型?這是一種抽象類型,這意味着您要指定它在實現中的含義,但不能在模塊界面中顯示它。所以,在你提出可以幫助的問題之前,你需要做一些工作。 –