List 如何为导入或输出列表的谓词声明pred?
正在寻找为导入或输出列表的谓词声明pred的帮助。我试过:-pred名称(list::in,integer::out)是multi。编译器错误消息表示无法识别列表/0。检查了库模块列表,发现我应该写一些类似于…(列表(T)::in…,但不完全理解该做什么。我尝试过:-pred name(…列表(T),…)是。。。编译器不再报告与pred声明相关的错误。现在还不知道结果是否正确,但更进一步。列表是参数化类型,参数化类型接受一个或多个参数。在列表的情况下,参数表示这是一个列表。您可能有一个数字列表、一个字符串列表、一个南瓜列表或一个数字列表(任何有效类型)。因此,如果我创建一个函数,例如:List 如何为导入或输出列表的谓词声明pred?,list,declaration,predicate,mercury,List,Declaration,Predicate,Mercury,正在寻找为导入或输出列表的谓词声明pred的帮助。我试过:-pred名称(list::in,integer::out)是multi。编译器错误消息表示无法识别列表/0。检查了库模块列表,发现我应该写一些类似于…(列表(T)::in…,但不完全理解该做什么。我尝试过:-pred name(…列表(T),…)是。。。编译器不再报告与pred声明相关的错误。现在还不知道结果是否正确,但更进一步。列表是参数化类型,参数化类型接受一个或多个参数。在列表的情况下,参数表示这是一个列表。您可能有一个数字列表、
:- func max(list(int)) = int.
此函数获取整数列表并返回整数(列表中的最大值)
那么,列表(T)是什么?以大写字母开头的标记是一个变量,即使在类型中,它也可以代表任何其他类型(通常)。所以“list(T)”是指任何东西的列表,比如数字或字符串的列表。下一个谓词是多态的,根据其类型变量的实际值,它适用于不同的类型
:- pred first(list(T)::in, T::out) is semidet.
任何内容的列表都可以传递,因为列表中的第一项将被返回(如果有)。如果它与字符串列表“list(string)”一起使用,那么T将(在编译期间)替换为“string”
这里是Mercury类型系统的这部分参考。