Prolog中的计划返回变化



我想编写一个返回prolog中更改的程序,我尝试了这个谓词,但我不确定,因为我想做的与c/c 程序相同。如果有人对此有了更正,我会很感激。

dollar(100).
quarter(25).
dime(1).

return(0,0,0).
return(Amount_recieved,Amount_due,Change) :-
   Change is Amount_recieved - Amount_due.
dollar(100) is Change / 100 , Change is Change mod 100.
quarter(25) is Change /25 , Change is Change mod 25.
dime(1) is Change

i i提出了以下解决方案,该解决方案基于结构amount/3,其数量(第一个值),季度(第二值)和Dimes(第三值)

getAmountInDimes(amount(Do, Qu, Di), AmountInDimes) :-
  AmountInDimes is (Do * 100) + (Qu * 25) + Di.
getAmountTriple(AmountInDimes, amount(Do, Qu, Di)) :-
  Do  is AmountInDimes div 100,
  Mid is AmountInDimes mod 100,
  Qu  is Mid div 25,
  Di  is Mid mod 25.
computeChange(AReceived, ADue, Change) :- 
  getAmountInDimes(AReceived, ARDimes),
  getAmountInDimes(ADue, ADDimes),
  ARDimes >= ADDimes,
  CDimes is ARDimes - ADDimes,
  getAmountTriple(CDimes, Change).

以下是使用的示例

computeChange(amount(20, 0, 0), amount(15, 2, 12), Ch)

Chamount(4,1,13)统一。

另一个示例

computeChange(amount(20, 0, 0), amount(15, 2, 12), amount(Do, Qu, Di))

直接将Do与4,Qu与1和13的Di统一。

最新更新