我如何在序言的列表中对数字进行平方?
列表可以包含数字、原子和列表。
例如:[a,b,2,3,4,[3],[c,d,9]]
答案应该是[a,b,4,9,16,[3],[c,d,9]]
。正如我们在答案中看到的那样,它应该是列表中值的浅平方。
2->4
3->9
4->16
到目前为止我所尝试的,
square([],X).
square([A|B],X):-number(A), A is A*A, square(B,X).
X 将包含平方值。基本情况是收到空列表时。我检查 head (A) 是否是一个数字,然后我继续对数字进行平方并将 A 更改为 A * A。然后继续调用剩余部分 B 的 square 函数。
请建议我在哪里做错了。
编辑:正确答案如下。由一位病理学家。请阅读他的评论以获取详细说明。
squared_members([], []).
squared_members([L|Ls], [SqrdL|SqrdLs]) :-
number(L),
SqrdL is L * L,
squared_members(Ls, SqrdLs).
squared_members([L|Ls], [L|SqrdLs]) :-
\+number(L),
squared_members(Ls, SqrdLs).
和
squared_members([], []).
squared_members([L|Ls], [M|Ms]) :-
( number(L)
-> M is L * L, squared_members(Ls, Ms)
; M = L, squared_members(Ls, Ms)
).