fork download
  1. ; your code goes here
  2. ;; ============================================================
  3. ;; SISTEM PAKAR DIAGNOSIS PENYAKIT MENGGUNAKAN CLIPS
  4. ;; Domain : Flu, COVID-19, Alergi
  5. ;; Fitur : Menanyakan gejala kepada user lalu memberikan diagnosis
  6. ;; ============================================================
  7.  
  8. (clear)
  9. ;; ------------------------------------------------------------
  10. ;; 1. TEMPLATE DATA PASIEN (menyimpan jawaban user)
  11. ;; ------------------------------------------------------------
  12. (deftemplate patient-symptom
  13. (slot demam (default unknown))
  14. (slot batuk (default unknown))
  15. (slot pilek (default unknown))
  16. (slot sakit_tenggorokan (default unknown))
  17. (slot lelah (default unknown))
  18. (slot sesak_nafas (default unknown))
  19. (slot bersin (default unknown))
  20. (slot mata_gatal (default unknown))
  21. (slot demam_tinggi (default unknown))
  22. )
  23. ;; ------------------------------------------------------------
  24. ;; 2. AWAL PROGRAM: MENGISI DATA PASIEN DARI USER
  25. ;; ------------------------------------------------------------
  26. (deffacts initial-data
  27. (patient-symptom)
  28. (diagnosis-status waiting)
  29. )
  30.  
  31. (defrule ask-demam
  32. (diagnosis-status waiting)
  33. (patient-symptom (demam unknown))
  34. =>
  35. (printout t crlf "Apakah pasien mengalami demam? (ya/tidak): ")
  36. (bind ?answer (read))
  37. (if (eq ?answer ya) then
  38. (assert (patient-symptom (demam ya)))
  39. else
  40. (assert (patient-symptom (demam tidak)))))
  41. (defrule ask-batuk
  42. (diagnosis-status waiting)
  43. (patient-symptom (demam ?d) (batuk unknown))
  44. =>
  45. (printout t crlf "Apakah pasien mengalami batuk? (ya/tidak): ")
  46. (bind ?answer (read))
  47. (if (eq ?answer ya) then
  48. (assert (patient-symptom (batuk ya)))
  49. else
  50. (assert (patient-symptom (batuk tidak)))))
  51. (defrule ask-pilek
  52. (diagnosis-status waiting)
  53. (patient-symptom (batuk ?b) (pilek unknown))
  54. =>
  55. (printout t crlf "Apakah pasien mengalami pilek? (ya/tidak): ")
  56. (bind ?answer (read))
  57. (if (eq ?answer ya) then
  58. (assert (patient-symptom (pilek ya)))
  59. else
  60. (assert (patient-symptom (pilek tidak)))))
  61. (defrule ask-sakit-tenggorokan
  62. (diagnosis-status waiting)
  63. (patient-symptom (pilek ?p) (sakit_tenggorokan unknown))
  64. =>
  65. (printout t crlf "Apakah pasien mengalami sakit tenggorokan? (ya/tidak): ")
  66. (bind ?answer (read))
  67. (if (eq ?answer ya) then
  68. (assert (patient-symptom (sakit_tenggorokan ya)))
  69. else
  70. (assert (patient-symptom (sakit_tenggorokan tidak)))))
  71. (defrule ask-lelah
  72. (diagnosis-status waiting)
  73. (patient-symptom (sakit_tenggorokan ?st) (lelah unknown))
  74. =>
  75. (printout t crlf "Apakah pasien merasa lelah berlebihan? (ya/tidak): ")
  76. (bind ?answer (read))
  77. (if (eq ?answer ya) then
  78. (assert (patient-symptom (lelah ya)))
  79. else
  80. (assert (patient-symptom (lelah tidak)))))
  81. (defrule ask-sesak-nafas
  82. (diagnosis-status waiting)
  83. (patient-symptom (lelah ?l) (sesak_nafas unknown))
  84. =>
  85. (printout t crlf "Apakah pasien mengalami sesak nafas? (ya/tidak): ")
  86. (bind ?answer (read))
  87. (if (eq ?answer ya) then
  88. (assert (patient-symptom (sesak_nafas ya)))
  89. else
  90. (assert (patient-symptom (sesak_nafas tidak)))))
  91. (defrule ask-bersin
  92. (diagnosis-status waiting)
  93. (patient-symptom (sesak_nafas ?sn) (bersin unknown))
  94. =>
  95. (printout t crlf "Apakah pasien sering bersin? (ya/tidak): ")
  96. (bind ?answer (read))
  97. (if (eq ?answer ya) then
  98. (assert (patient-symptom (bersin ya)))
  99. else
  100. (assert (patient-symptom (bersin tidak)))))
  101. (defrule ask-mata-gatal
  102. (diagnosis-status waiting)
  103. (patient-symptom (bersin ?br) (mata_gatal unknown))
  104. =>
  105. (printout t crlf "Apakah pasien merasa mata gatal? (ya/tidak): ")
  106. (bind ?answer (read))
  107. (if (eq ?answer ya) then
  108. (assert (patient-symptom (mata_gatal ya)))
  109. else
  110. (assert (patient-symptom (mata_gatal tidak)))))
  111. ;; ------------------------------------------------------------
  112. ;; 3. ATURAN DIAGNOSIS PENYAKIT
  113. ;; ------------------------------------------------------------
  114. (defrule diagnose-flu
  115. (patient-symptom (demam ya)
  116. (batuk ya)
  117. (pilek ya)
  118. (sakit_tenggorokan ya)
  119. (lelah ya))
  120. (diagnosis-status waiting)
  121. =>
  122. (assert (diagnosis (penyakit Flu)
  123. (deskripsi "Influenza adalah infeksi virus pada saluran pernapasan.")
  124. (saran "Istirahat cukup, minum banyak air, dan konsumsi obat penurun demam jika perlu.")))
  125. (retract (diagnosis-status waiting)))
  126.  
  127. (defrule diagnose-covid19
  128. (patient-symptom (demam ya)
  129. (batuk ya)
  130. (sesak_nafas ya)
  131. (lelah ya))
  132. (diagnosis-status waiting)
  133. =>
  134. (assert (diagnosis (penyakit COVID-19)
  135. (deskripsi "COVID-19 adalah penyakit infeksi yang disebabkan oleh virus SARS-CoV-2.")
  136. (saran "Segera lakukan tes PCR, isolasi mandiri, dan hubungi fasilitas kesehatan terdekat.")))
  137. (retract (diagnosis-status waiting)))
  138.  
  139. (defrule diagnose-covid19-varian
  140. (patient-symptom (demam ya)
  141. (batuk ya)
  142. (pilek ya)
  143. (sakit_tenggorokan ya)
  144. (sesak_nafas ya)
  145. (lelah ya))
  146. (diagnosis-status waiting)
  147. =>
  148. (assert (diagnosis (penyakit COVID-19 varian Omicron)
  149. (deskripsi "Varian Omicron memiliki gejala mirip flu biasa namun mudah menular.")
  150. (saran "Segera lakukan tes PCR, isolasi mandiri, dan pantau gejala pernapasan.")))
  151. (retract (diagnosis-status waiting)))
  152.  
  153. (defrule diagnose-alergi
  154. (patient-symptom (pilek ya)
  155. (bersin ya)
  156. (mata_gatal ya))
  157. (not (demam ya))
  158. (diagnosis-status waiting)
  159. =>
  160. (assert (diagnosis (penyakit Alergi)
  161. (deskripsi "Alergi adalah reaksi sistem imun terhadap zat asing (alergen).")
  162. (saran "Hindari pemicu alergi, konsumsi antihistamin, dan konsultasi ke dokter.")))
  163. (retract (diagnosis-status waiting)))
  164.  
  165. (defrule diagnose-tidak-terdeteksi
  166. (diagnosis-status waiting)
  167. =>
  168. (assert (diagnosis (penyakit Tidak Terdeteksi)
  169. (deskripsi "Gejala yang Anda masukkan tidak sesuai dengan basis pengetahuan kami.")
  170. (saran "Silakan konsultasi ke dokter untuk pemeriksaan lebih lanjut.")))
  171. (retract (diagnosis-status waiting)))
  172.  
  173. ;; ------------------------------------------------------------
  174. ;; 4. ATURAN MENAMPILKAN HASIL DIAGNOSIS
  175. ;; ------------------------------------------------------------
  176. (defrule print-diagnosis
  177. (diagnosis (penyakit ?p) (deskripsi ?d) (saran ?s))
  178. =>
  179. (printout t crlf "========================================" crlf)
  180. (printout t "HASIL DIAGNOSIS AWAL" crlf)
  181. (printout t "========================================" crlf)
  182. (printout t "Penyakit : " ?p crlf)
  183. (printout t "Deskripsi: " ?d crlf)
  184. (printout t "Saran : " ?s crlf)
  185. (printout t "========================================" crlf)
  186. (printout t "Catatan: Diagnosis ini hanya bersifat edukasi." crlf)
  187. (printout t "Selalu konsultasikan ke dokter untuk kepastian medis." crlf)
  188. (printout t "========================================" crlf crlf))
  189.  
  190. (exit)
  191. ; empty line at the end
Success #stdin #stdout 0.02s 5368KB
stdin
Standard input is empty
stdout
[EXPRNPSR3] Missing function declaration for penyakit.

ERROR:
(defrule MAIN::diagnose-flu
   (patient-symptom (demam ya) (batuk ya) (pilek ya) (sakit_tenggorokan ya) (lelah ya))
   (diagnosis-status waiting)
   =>
   (assert (diagnosis (penyakit

[EXPRNPSR3] Missing function declaration for penyakit.

ERROR:
(defrule MAIN::diagnose-covid19
   (patient-symptom (demam ya) (batuk ya) (sesak_nafas ya) (lelah ya))
   (diagnosis-status waiting)
   =>
   (assert (diagnosis (penyakit

[EXPRNPSR3] Missing function declaration for penyakit.

ERROR:
(defrule MAIN::diagnose-covid19-varian
   (patient-symptom (demam ya) (batuk ya) (pilek ya) (sakit_tenggorokan ya) (sesak_nafas ya) (lelah ya))
   (diagnosis-status waiting)
   =>
   (assert (diagnosis (penyakit

[EXPRNPSR3] Missing function declaration for penyakit.

ERROR:
(defrule MAIN::diagnose-alergi
   (patient-symptom (pilek ya) (bersin ya) (mata_gatal ya))
   (not (demam ya))
   (diagnosis-status waiting)
   =>
   (assert (diagnosis (penyakit

[EXPRNPSR3] Missing function declaration for penyakit.

ERROR:
(defrule MAIN::diagnose-tidak-terdeteksi
   (diagnosis-status waiting)
   =>
   (assert (diagnosis (penyakit

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for defrule.

ERROR:
(defrule MAIN::print-diagnosis
   (diagnosis (