问题说明:在Prolog中定义一个关系equal_a_b(L),其中equal_a_b(L)是真的,如果L包含相同数量的a和b项。
我写了一些代码来计算a和b项的数目,并检查是否a==b。如果a===b是假的,那么程序应该输出,而不是。但是,当我测试我的代码时,它会输出是的,我不知道为什么。
下面是代码:
equal_a_b(L):-
eqab(L, A, B),
eqabn(A, B).
eqab([], 0, 0).
eqab([a|L], X, Y):- eqab(L, Z, A), X is Z + 1, Y is A + 0.
eqab([b|L], X, Y):- e
例:
# patched foo.c depends on original foo.c and couple of my edits in foo.dif
foo.c: foo.c foo.dif
patch foo.c foo.dif
我想避免文件名和目录混乱,只需在原地应用编辑,并准备好重建,由原始makefile (这是相当复杂和敏感的文件名和目录)提供的原始源树。
@AUZKamath,我的编辑包含在那个foo.dif中。这是用于在最终用户系统上通过现有源树部署我的修补程序。我做错了吗?
想想我尝试过的:
dif_to_orto(A, B, C) :-
( dif(A, B)
; dif(A, C)
).
虽然从声明的角度来看,这个定义很好,但它包含了许多冗余。想想看:
?- dif_to_orto(A, B, C), A = 1, B = 2, C = 2.
A = 1, B = 2, C = 2
; A = 1, B = 2, C = 2. % unexpected redundant solution
即使在这种情况下:
?- dif_to_orto(A, B, C), A = 1, B = 2, C = 3.
A = 1, B =
这听起来很简单,但我有点麻烦。我有一个包含一些值的列表,其中一些可能是相似的。如果两个或多个值彼此相似,则除其中一个值外,我希望删除所有这些值。例如清单a,
A= 10、45、48、120
假设我想要删除一个值,如果它与另一个值的大小是5,那么在这种情况下,我想要删除45或48,不管是哪个值。我可以设想找到每个元素和每个其他元素之间的绝对差异,即在列表中自己循环,并根据每个元素和每个其他元素之间的差异创建一个新的列表。
import copy
a = [10,45,48,120]
a_new=[]
for val in a:
for val_ in a:
dif =
我有纬度和经度的数据,我需要计算包含位置的两个数组之间的距离矩阵。我使用这个来获取给定纬度和经度的两个位置之间的距离。
下面是我的代码示例:
import numpy as np
import math
def get_distances(locs_1, locs_2):
n_rows_1 = locs_1.shape[0]
n_rows_2 = locs_2.shape[0]
dists = np.empty((n_rows_1, n_rows_2))
# The loops here are inefficient
for i in xrange(