你直接要求的,根本做不到。给定
:- type question
---> truth(string, bool)
; blank(string, string)
; multiple(string, string, list(string)).
只能通过在定义的地方扩展这种类型并重新编译模块来添加其他类型的问题 - 并进行许多其他更改,就像以前的确定性代码一样
answer(truth(_, yes)) = "true".
answer(truth(_, no)) = "false".
answer(blank(_, A)) = A.
answer(multiple(_, A, _)) = A.
给定您的新问题类型时会失败。在编译时被告知您未能更新程序以反映添加“选择所有正确答案”类型的问题是您拥有问题类型的一个很好的部分原因,而不是说[["Are foxes pretty?", "true"], ["Green foxes are ____", "adorable!", "fake", "evidence of animal cruelty"]]
问题库的字符串列表。
你所要求的无法完成。然而,你真正想要做的——你认为“可变数量的类型”将是一个有用的手段——当然可以通过其他方式来完成。我不知道那是什么方式,因为我不知道你为什么要从你的问题中这样做。也许您会从阅读语言参考中的有区别的联合或类型类中受益。