answer-set-programming - 有没有一种方法可以在 Clingo 中表示任意长度的元组?
问题描述
如果我想获得任意长度元组的头部,我必须编写如下代码:head(A) :- tuple(A,B)。头(A):-元组(A,B,C)。头(A):-元组(A,B,C,D)。…………
有没有一种方法可以表示 head(A) :- tuple(A...)。
谢谢!
解决方案
我看到两种可能的解决方案:
避免使用不同数量的术语
这可以通过改变元组的表示来完成:
tuple(a, nil).
tuple(b, tuple(c, nil)).
tuple(d, tuple(e, tuple(f, nil))).
head(X) :- tuple(X, _).
在 Clingo 中使用外部函数
Clingo 支持定义外部函数,请参阅Python API和指南。例如,我们可以用 Python 编写可以操纵术语的函数。作为一种解决方法,我建议在此处为术语使用进一步的构造函数c
。
#script (python)
import clingo
def head(x):
return x.arguments[0]
#end.
tuple(c(1)).
tuple(c(2,3)).
head(@head(X)) :- tuple(X).
推荐阅读
- javascript - 使用 reduce() 查找数组中的第二大元素
- powershell - 使用 powershell 远程执行文件
- javascript - Vue Router 发现无效的路由匹配
- c - 十进制到二进制,八进制和十六进制数在C中失败
- javascript - 在NodeJS中为字段对创建一个对象键,说它是未定义的
- powershell - 通过 Windows Powershell pinvoke go c-shared dll 后,可执行文件中没有标准输出
- java - 在字符串中存储和打印连续字符?
- bash - 终端提示 macOS 前的奇怪数字和字母组合
- java - 同步变量应该是什么?
- r - 自 macOS 上的新 R 更新以来私下下载的 R 包