2017-06-23 3 views
0

Il s'agit Programmation Logique de Structure et interprétation des programmes informatiquesComment obtenir les plus haute valeur travail avec la programmation logique AND, NOT et>

Il est un problème simple de comprendre comment obtenir le plus haut valeur.

Cette base de données exemple:

((is-student Anna) 
(is-student Bart) 
(is-student Charlie) 
(is-student David) 
(is-student Eddy) 
(is-student Fanny) 

(has-points Anna 73) 
(has-points Bart 84) 
(has-points Charlie 65) 
(has-points David 34) 
(has-points Eddy 85) 
(has-points Fanny 70)) 

Je comprends le code suivant donne un résumé des élèves avec leurs points:

;;; Query input: 
(and (is-student ?student1) 
     (has-points ?student1 ?points1)) 

;;; Query results: 
(and (is-student fanny) (has-points fanny 70)) 
(and (is-student eddy) (has-points eddy 85)) 
(and (is-student david) (has-points david 34)) 
(and (is-student charlie) (has-points charlie 65)) 
(and (is-student bart) (has-points bart 84)) 
(and (is-student anna) (has-points anna 73)) 

La même chose avec des combinaisons avec ET & OU sont ok à comprendre. C'est surtout travailler sur les combinaisons et filtrer les résultats.

Je rencontre des difficultés à comprendre le code ci-dessous à obtenir l'élève avec les points les plus élevés. Il semble simple, mais je ne comprends pas comment la combinaison avec ET & PAS & "> points2 points1" fournit la plus grande valeur (points)?

C'est ce que je reçois quand je le lance (en DrRacket) pour obtenir l'étudiant avec les points les plus élevés:

;;; Query input: 
(and (is-student ?student1) 
     (has-points ?student1 ?points1) 
     (not (and (is-student ?student2) 
       (has-points ?student2 ?points2) 
       (lisp-value > ?points2 ?points1)))) 

;;; Query results: 
(and (is-student eddy) 
    (has-points eddy 85) 
    (not (and (is-student ?student2) 
       (has-points ?student2 ?points2) 
       (lisp-value > ?points2 85)))) 

Comment comparer la négation de la deuxième liste avec le premier travail? Chaque réponse/ligne du premier résultat est-elle comparée à chaque ligne du second AND? Je ne sais pas lire/interpréter le code et pourquoi cela donne ce que nous cherchions?

Toute aide comprenant comment ceci donne la plus grande valeur serait fortement appréciée!

Merci

PS: Je ne suis pas anglophone, je présente mes excuses pour des erreurs de grammaire ou d'orthographe

Répondre

0

Il me semble que je pourrais avoir une interprétation de ce: Je student1 que a un point de point1 et il ya pas existait une situation qu'il existe un étudiant2 qui a un point de point2 et point2 est plus grand que point1. et les caractères gras et, et non correspondent parfaitement au code. J'espère que cela pourrait vous aider, et je ne suis pas un locuteur natif anglais non plus:)

+0

Merci YoarkYANG !, Il semble que j'ai oublié de vous remercier! Désolé pour le retard! – Gosa