То, что вы прямо просите, просто не может быть сделано.С учетом
:- 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"]]
для вашего банка вопросов.
Невозможно выполнить то, о чем вы просите.Однако то, что вы на самом деле хотите сделать - конец, для которого вы думали, что «переменное число типов» было бы полезным средством, - безусловно, может быть достигнуто иным способом.Я не могу сказать, что это такое, так как я не могу сказать, почему вы хотели сделать это из вашего вопроса.Возможно, вам будет полезно прочитать более 1010 * различающихся союзов или классов типов в справочнике по языку.