1
A
回答
2
当你被卡住长期转换,它往往是一个好主意,什么是长期实际上表示的理解。
您可以使用write_canonical/1
获得 术语的规范形式。
你的情况:
?- Tuple = (1,2,3,4), write_canonical(Tuple). ','(1,','(2,','(3,4))) Tuple = (1, 2, 3, 4).
这清楚地表明,我们实际上是在谈论复合 方面(A,B)
—写在前缀符号为 ','(A,B)
—其参数用整数形式的或者再次使用这种复合词术语 。此类术语在Prolog中也被称为“和 列表”,并且Prolog 目标也具有这样的 形状。特别要注意的是,这些并不是真正的“元组”,当然不是“首先 类公民”的意义,只有复合术语与其他任何复合术语非常相似。
因此,我们只需要来思考这些2可能的情况:
- 整数
- 长期形式
(A,B)
的。
此外,在描述列表时,为方便起见,请始终考虑使用dcg表示法。
例如:
tuple_list(I) --> { integer(I) }, [I]. tuple_list((A,B)) --> tuple_list(A), tuple_list(B).
现在我们有:
?- Tuple = (1,2,3,4), phrase(tuple_list(Tuple), Ls). Tuple = (1, 2, 3, 4), Ls = [1, 2, 3, 4].
这解决您从这些方面到 列表转换的任务。
然而,最一般的查询产生没有答案:
?- phrase(tuple_list(Tuple), Ls). ERROR: Out of local stack
我离开概括tuples_list//1
,使其适用于所有 方向作为练习。
0
在Prolog的元组很少使用,但快速的转换可能是
list_tuple([A,B|L], (A,R)) :- list_tuple([B|L], R).
list_tuple([A,B], (A,B)). % I don't think unary tuples make sense...
?- list_tuple([1,2,3,4],T).
T = (1, 2, 3, 4) ;
false.
这不会对“落后模式”
?- list_tuple(L,(1,2,3,4)).
L = [1, 2, 3, 4] ;
L = [1, 2, (3, 4)] ....
工作得非常好,你可以尝试把切为了得到它确定性,我已经按要求提供了条款...
1
你已经有两个有用的答案。如前所述,您通常不会在符号(1, 2, 3, 4)
中使用“元组”:这与Haskell中的平面数据结构不同,它是嵌套数据结构。 Prolog的方式是使用4的术语,例如quadruple(1, 2, 3, 4)
。课程名称无关紧要,但通常使用某种描述性名称。
然后,以一个长期的参数转换到一个列表,你使用“大学”运营商=..
这样的:
Term =.. [Name|Arguments]
这样:
?- foo(1, 2, 3, 4) =.. [foo|Args].
Args = [1, 2, 3, 4].
在元组的特殊情况有两个元素(对),通常使用函子-/2
。破折号也是一个中缀操作符,所以你可以写1-a
而不是-(1, a)
。不少图书馆谓词上对工作期望他们为-/2
,例如:
?- keysort([1-c, 2-a, -(0, b), 1-a], S).
S = [0-b, 1-c, 1-a, 2-a].
相关问题
- 1. 将列表变成一个元组python
- 2. 将一个列表变成一组 - Python
- 3. ocaml的把一整成一个列表
- 4. cakephp把树变成一个数组
- 5. 从一个变量和一个列表创建一个元组
- 6. 把两个列表变成1,没有涉及元组
- 7. 把一个变量数组
- 8. PHP - 把一个mysql数组的结果变成一个局部变量数组?
- 9. 在scala中使列表解构为一个元组,或者使一个元组迭代成一个列表
- 10. 把一个红宝石数组变成一个整齐的列字符串?
- 11. 把一个列表转换成一个列表,在每一组k链节的每个新行
- 12. 以一个数组中的每个第n个元素,并把它变成另一个数组PHP
- 13. Django将列表变成一个列表
- 14. 把一个函数列表
- 15. C#:把成员变量到一个列表
- 16. F#:在一个元组列表更新一个元组
- 17. 使用角度把一个多维数组成多列表
- 18. 把一个多维的PHP数组变成一个二维数组
- 19. Django模块ID变成一个元组
- 20. 使用Python把一个元组列表成柱状图/条形图
- 21. 把一个变量到一个变量
- 22. 给出一个元组列表,返回元组第一个值的新列表
- 23. 获取数组值,并把它变成一个变量
- 24. 如何把ajaxStart()换成一个元素
- 25. 如何将一个列表元素变成两个?
- 26. 如何把它变成一个覆盖?
- 27. 把一个字符串变成plist - swift
- 28. 把它变成一个jquery函数?
- 29. Python-将两个列表组合成一个列表列表
- 30. 把列表变成列
参见[这个问题](http://stackoverflow.com/q/2893766/1812457) – 2016-11-19 20:08:43