代码之家  ›  专栏  ›  技术社区  ›  Sundaze123

处理2D数组和未绑定变量的Prolog

  •  0
  • Sundaze123  · 技术社区  · 7 年前

    任何帮助都将不胜感激。

    0 回复  |  直到 7 年前
        1
  •  2
  •   lurker    7 年前

    这个答案是试图给你一些想法,让你开始,而不只是交出一个完整的解决方案。

    但是 统一的 (或 跳跃

    运行Prolog并获得Prolog提示符,然后尝试一些方法来开始了解Prolog是如何工作的。

    N . Prolog有一个名为 length/2 length 有2个参数):

    1 ?- length([a,b,c], N).
    N = 3.
    

    名单 [a,b,c]

    2 ?- length([X,Y,Z], N).
    N = 3.
    

    变量 X , Y ,和 Z 没有束缚。是什么造成的 长度/2 而不是函数,它只是描述长度和列表之间的关系。你也可以写:

    3 ?- length(L, 3).
    L = [_5112, _5118, _5124].
    

    L ,对于长度为3的列表。变量 _xxxx 匿名

    4 ?- length([X,Y,Z], N), Y = 2, write([X,Y,Z]).
    [_5850,2,_5862]
    Y = 2,
    N = 3.
    

    这里,我是说我要一份名单 [X,Y,Z] N ,值 [_xxxx, 2, _xxxx] 分配2到 = 做。 =/2 是一个 统一 Prolog中的运算符。如果参数是统一的,则成功。如果涉及到变量,Prolog会将变量绑定到使其统一的值(如果可能的话)。在这种情况下, Y = 2 将绑定 使用值2使其成功,然后转到下一个语句。 =/2 2 = Y 这样写绝对没有错。我们的命令式编程大脑似乎更愿意将其视为 Y=2 ,尽管这可能会产生误导。

    length(Row, N) . 如果你说 matrix(N, M) length(M, N) 应该是真的。

    M (列表元素 )并对该行执行长度规则。你也可以看看 maplist/3 这会让这更容易。

    注意,我没有为变量包含任何绑定,所以这都是未绑定的变量。如果您想绑定变量,我不能提供比上面更多的输入,而不提供更多关于绑定特定值的规则的信息( ,您是得到了一个完全绑定的矩阵,还是只想绑定特定的条目?等等)。

    如果您想要更多列表处理的示例,我强烈建议您仔细阅读下面给出的问题和解决方案: 99 Prolog Problems

    推荐文章