【问题标题】:what does C1 mean in cryptarithmetic puzzle in polog?在 polog 的密码算术难题中,C1 是什么意思?
【发布时间】:2013-05-27 04:04:16
【问题描述】:

这是prolog中密码算法的sn-p

sum1( [D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs)  :-
  sum1( N1, N2, N, C1, C2, Digs1, Digs2),
  digitsum( D1, D2, C2, D, C, Digs2, Digs).

如下所述

sum1( N1, N2, N, C1, C, Digits1, Digits)
where N1, N2 and N are our three numbers, 
      C1 is carry from the right, and
      C is carry to the left (after the summation).
      Digits1 is the list of available digits for instantiating the
      variables in N1, N2, and N.
      Digits is the list of digits that were not used in the
      instantiation of these variables.

我真的不明白sum1( [D1|N1], [D2|N2], [D|N], C1, C, Digs1, Digs)中的C1是什么意思,因为C2代表右进位,C代表左进位,那么C1代表什么?

【问题讨论】:

    标签: prolog cryptarithmetic-puzzle


    【解决方案1】:

    C,C1,C2 只能假设 0,1 值。算术规则要求 C1 在第一次调用时为 0,C 在最后一次调用时为 0。 C2 在递归调用中变为 C,然后在求和后传播进位。 C1 是进位加到 N1,N2 得到 N。

    【讨论】:

    • 不错!为什么不将其简化为sum1( [D1|N1], [D2|N2], [D|N], C, Digs1, Digs) :- sum1( N1, N2, N, C2, Digs1, Digs2), digitsum( D1, D2, C2, D, C, Digs2, Digs).,因为 C1 在递归调用中永远不会改变并且始终为零?
    • 哦!它确实可以简化并且测试成功,但我们也应该改变基本情况。在Bratko's booksum(N1, N2, N) :-sum1( N1, N2, N, 0, 0, [0,1,2,3,4,5,6,7,8,9], _).,基本情况是sum1( [], [], [], C, C, Digits, Digits).。现在我把它们改成sum(N1, N2, N) :-sum1( N1, N2, N, 0, [0,1,2,3,4,5,6,7,8,9], _).,基本情况改成sum1( [], [], [], 0, Digits, Digits).
    • 你是对的。我认为它可能会在所有递归步骤之后受到限制,但似乎对目的无用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多