我正在编写一种解决方案,以使用递归计算列表中数字之间的距离,但一直在努力获得预期的输出。 我正在尝试将列表列表合并为一个列表,但是尝试使用flatten和append / 2无效。我已经尝试了几个小时,并且一直绕着圈子转圈,有人可以告诉我我在做什么错吗?
:- use_module(library(clpfd)).
difference([],_,[]).
differwnce([L|Ls],X,[DST|Ds]) :-
DST #= abs(X - L),
difference(Ls,X,Ds).
differences[],[]).
differences([L|Ls], [DST|Tail]) :-
difference(Ls,X,DST),
differences(Ls, Tail).
以下是预期的输入和输出:-
?- differences([1,2,4,9],Ds).
Ds = [1,3,8,2,7,5].
当前输出:
Ds = [[1,3,8],[2,7],[5],[]].
答案 0 :(得分:2)
seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).
seqq([]) --> [].
seqq([Es|Ess]) -->
seq(Es),
seqq(Ess).
?- phrase(seqq([[1,3,8],[2,7],[5],[]]), Es).
Es = [1,3,8,2,7,5].
答案 1 :(得分:1)
您可以将override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let sectionHeaderView = UIView()
let sectionHeaderImage = UIImage(named: "Flag - ENGLAND.png")!
let sectionHeaderImageView = UIImageView(image: sectionHeaderImage)
sectionHeaderImageView.translatesAutoresizingMaskIntoConstraints = false
sectionHeaderView.addSubview(sectionHeaderImageView)
NSLayoutConstraint.activate([
sectionHeaderImageView.widthAnchor.constraint(equalToConstant: 40),
sectionHeaderImageView.heightAnchor.constraint(equalToConstant: 40),
sectionHeaderImageView.leadingAnchor.constraint(equalTo: sectionHeaderView.leadingAnchor, constant: 50),
sectionHeaderImageView.topAnchor.constraint(equalTo: sectionHeaderView.topAnchor, constant: 50)
])
return sectionHeaderView
}
谓词转换为distances/3
谓词,从而有效地使用打开列表 来返回后面元素的列表尾部。
distances/4
通话示例:
:- use_module(library(clpfd)).
distances([], _, Tail, Tail).
distances([BN| Bs], B, [DST| Ds], Tail) :-
DST #= abs(B - BN),
distances(Bs, B, Ds, Tail).
triangle([], []).
triangle([BN| Bs], Ds) :-
distances(Bs, BN, Ds, Tail),
triangle(Bs, Tail).
要更好地理解此解决方案,请考虑以下查询的结果:
?- triangle([1,2,4,9], Ds).
Ds = [1, 3, 8, 2, 7, 5].
此解决方案比最后调用诸如?- distances([2,4,9], 1, Ds, Tail).
Ds = [1, 3, 8| Tail].
或append/2
之类的谓词更为有效。
P.S。如果您仍然需要flatten/3
谓词以在其他地方使用,则可以轻松定义它:
distances/3
答案 2 :(得分:1)
为什么不像这样使用库谓词append/2
?
?- append([[1,3,8],[2,7],[5],[]], Xs).
Xs = [1,3,8,2,7,5].