gpt4 book ai didi

prolog - 检查对角线是否具有相同的值

转载 作者:行者123 更新时间:2023-12-02 14:50:10 29 4
gpt4 key购买 nike

我正在尝试编写一个谓词来删除外部检查内部对角线是否与序言中的值(int)相同例如:

same_Diagonal([[0,11,54,45],[16,1,6,9],[35,7,1,5],[27,3,9,1]])

    [0,11,54,45]
[16,1,6,9]
[35,7,1,5]
[27,3,9,1]

首先,我们去除外部,然后得到

[1,6,9]
[7,1,5]
[3,9,1]

并获取第一个列表的第一个元素的头部,然后递归执行。

[1,5]
[9,1]

我已经成功地移除了外部,因为当我打字的时候

withoutHead([[0,11,54,45],[16,1,6,9],[35,7,1,5],[27,3,9,1]],X).

可以显示成功

X = [[1, 6, 9], [7, 1, 5], [3, 9, 1]].

但是我在比较对角线值时失败了,这是我的代码

% withoutHead(+ ListOfList, -ListOfList)
% parameter1: the ListOfList is input
% parameter2: the ListOfList process output
withoutHead([HeadRow|TailRow],Squares):-
maplist(removeHead,TailRow,Squares).

% removeHead(+List, -List)
% parameter1: the List is each row
% parameter2: the List is tail of each row
removeHead([Head|Tail], Tail).


same_Diagonal([HeadRow|TailRow]):-
withoutHead([HeadRow|TailRow],[[Diagonal|Tail]|Back]),
same_Diagonal(Back).

我希望它在我输入正确的输入时返回“true”,但它仍然给出“false”。谁能告诉我这是什么问题?

最佳答案

使用findall/3nth1/3,构建一个列表[X1, ..., Xn],其中 XiM中第i个列表的第i项,得到它的尾部D。然后,使用 maplist/2,检查 D 中的所有项目是否都相同 X

same_diagonal(M) :-
findall(X, (nth1(I,M,L), nth1(I,L,X)), [_|D]),
maplist(=(X), D).


?- same_diagonal([[0,11,54,45],[16,1,6,9],[35,7,1,5],[27,3,9,1]]).
true.

?- same_diagonal([[0,11,54,45],[16,1,6,9],[35,7,1,5],[27,3,9,9999]]).
false.

关于prolog - 检查对角线是否具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231615/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com