gpt4 book ai didi

oop - OCaml 结构类型和列表

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

我在使用 OCaml 中的列表时遇到问题。我读过相互矛盾的陈述,说明是否可以在运行时修改列表。运行时可以使用 cons 运算符吗?

此外,为什么允许杜宾犬(见下文)出现在吉娃娃列表中?如何将另一只吉娃娃添加到列表中(如最后一行所尝试的那样)?

class virtual dog =
object
method virtual bark : unit
end;;

class chihuahua =
object
inherit dog
method bark = Printf.printf "Yip!"

end;;

class doberman =
object
inherit dog
method bark = Printf.printf "Roar!"

end;;

let c1 = new chihuahua;;
let c2 = new chihuahua;;
let c3 = new chihuahua;;
let d1 = new doberman;;

let arrayOfDogs = [c1;c2;d1];;
arrayOfDogs :: c3;;

最佳答案

1) 您可以在运行时使用 cons 运算符,它只返回一个新列表而不是改变输入列表。

2) OCaml 中的类类型使用“结构”子类型,而不是 Java 风格的“名义”子类型。 arrayOfDogs 的推断类型将是“一个对象,其方法名为 bark,类型为 unit -> unit(不一定是 dog )”。例如:

# class cat = object 
method bark = print_endline "meow"
end ;;
class cat : object method bark : unit end
# let c = new cat ;;
val c : cat = <obj>
# c :: arrayOfDogs ;;
- : cat list = [<obj>; <obj>; <obj>; <obj>]

3) arrayOfDogs::c3 的问题是你理解错了。 :: 的类型是'a -> 'a list -> 'a list。要在开头添加 c3,请使用

c3 :: arrayOfDogs

要在末尾添加它,请使用“追加”运算符 @

arrayOfDogs @ [c3]

关于oop - OCaml 结构类型和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501872/

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