Guest User

Untitled

a guest
Jun 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. require 'tiny_prolog_ext.rb'
  2. require File.expand_path(File.dirname(__FILE__) + '/tiny_prolog_ext.rb')
  3. require 'tiny_prolog.rb'
  4.  
  5. class DataBase
  6.  
  7. def initialize
  8.  
  9.  
  10.  
  11. @action = pred 'action'
  12. @wait_payment = pred 'wait_payment'
  13. @send_deliver = pred 'send_deliver'
  14. @send_ack = pred 'send_ack'
  15. @canceling_order = pred 'canceling_order'
  16. @cancel = pred 'cancel'
  17. @complete = pred 'complete'
  18.  
  19. @payment_recieved = pred 'payment_recieved'
  20. @timeout_occur = pred 'timeout_occur'
  21. @cancel_recieved = pred 'cancel_recieved'
  22. @cancel_order = pred 'cancel_order'
  23. @deliver_cancel = pred 'deliver_cancel'
  24. @deliver_completed = pred 'deliver_completed'
  25. @ack_sended = pred 'ack_sended'
  26.  
  27.  
  28. ['action', 'wait_payment', 'send_deliver', 'send_ack', 'canceling_order', 'cancel', 'complete'].each { |meth| self.send(meth)}
  29. ['payment_recieved', 'timeout_occur', 'cancel_recieved', 'cancel_order', 'deliver_cancel', 'deliver_completed', 'ack_sended'].each { |meth| self.send(meth)}
  30.  
  31.  
  32. action['wait_payment'] <<= [n0t(payment_recieved[]), n0t(cancel_recieved[]), n0t(timeout_occur[])]
  33. action['send_deliver'] <<= [payment_recieved[], action['wait_payment'], n0t(cancel_recieved[]), n0t(timeout_occur[])]
  34. action['complete'] <<= [deliver_completed[], action['send_deliver']]
  35.  
  36. action['cancel'] <<= [timeout_occur[]]
  37. action['cancel'] <<= [cancel_recieved[]]
  38. action['cancel'] <<= [action['send_deliver'], deliver_cancel[]]
  39.  
  40.  
  41. @action['send_ack'] <<= [payment_recieved[], cancel_order[]]
  42. @action['cancel'] <<= [action['send_ack'], ack_sended[]]
  43.  
  44.  
  45.  
  46. end
  47.  
  48. def tell(fact, x = nil, y = nil)
  49. if x.nil? || y.nil?
  50. eval("#{fact.to_s}[].fact") if !ask(fact)
  51. else
  52. eval("#{fact.to_s}[#{x}, #{y}].fact") if !ask(fact, x, y)
  53. end
  54. end
  55.  
  56. def currentS_action
  57. arr =[]
  58. resolve action[:X] do |env|
  59. arr << env[:X]
  60. end
  61. return arr[-1].to_sym
  62. end
  63.  
  64.  
  65. private
  66. def method_missing(mesh, *args)
  67. self.class.class_eval { define_method(mesh){ eval("@#{mesh.to_s}")} }
  68. eval("@#{mesh.to_s}")
  69. end
  70.  
  71. end
Add Comment
Please, Sign In to add comment