Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[LISP]Vraagje over statement

Pagina: 1
Acties:
  • 234 views

Onderwerpen


  • McFreak
  • Registratie: December 2000
  • Laatst online: 20-11 18:14

McFreak

McFraGG de gekste !!

Topicstarter
Hoi,

Vraagje over een LISP statement; ik begrijp de syntax niet goed

Wat gebeurt er nu hier ?

(if (> (getvar "cdate") (+ (* t1 10000) (* t2 100) t3))

Mijn inziens pakt hij de huidige tijd en daar doet ie wat mee, maar wat ?
Kan iemand mij dit uitleggen ?

McFraGG de gekste !!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:14
Dat is geen volledige s-expressie (de haakjes zijn niet in balans) dus daar kunnen we weinig mee.

In z'n algemeenheid helpt het in LISP (zeker als beginner) om je code zo te formatteren dat de structuur van expressies duidelijk is. Bijvoorbeeld:
Common Lisp:
1
2
3
4
5
6
7
8
9
10
(
    >
    ( getvar "cdate" )
    (
        +
        ( * t1 10000 )
        ( * t2 100 )
        t3
    )
 )

Dit moet toch wel enigzins duidelijk zijn?

  • McFreak
  • Registratie: December 2000
  • Laatst online: 20-11 18:14

McFreak

McFraGG de gekste !!

Topicstarter
ah wel het is zo maar een kopie uit een regel
dit is de gehele functie

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun draw_esi (bestand / )
  (if (setq file (open bestand "r")) nil (exit))
  (setq regel (read-line file))
  (setq teller (1+ teller))
  (if (> (getvar "cdate") (+ (* t1 10000) (* t2 100) t3))
    (einde = 1)
    (while regel
      ; bepaal of de regel met + of - begint
      (if (wcmatch regel "+*,-*") (coordinaat) (machinecode))
      ; lees een nieuwe regel in
      (setq regel (read-line file))
      (setq teller (1+ teller))
    )
  )
  (close file)
)


maar sinds vandaag opeens gaf hij een foutmelding met bad function (0)
nu waren we er al wel achter dat (einde = 1) geen functie is dus die hebben we verwijderd het script geeft nu wel resultaat.
De vraag is waarom het script nu juist vandaag de eerste clause uit de if pakt (dus (einde = 1))
Hierom de vraag

Wat wordt er nu geevalueerd in
code:
1
if (> (getvar "cdate") (+ (* t1 10000) (* t2 100) t3))
?

McFraGG de gekste !!


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:14
Nogmaals: niet-ingesprongen LISP code is extreem vervelend. Ga dat eerst maar eens fixen. Ok, is gefixt. :P

Verder: als je van de code die ik postte (die de conditie voor je if-expressie vormt) niet kunt bedenken wat 'ie doet, dan kun je beter opnieuw beginnen met je tutorial/handboek/whatever je gebruikt om de taal te leren.

Snap je wat "123" betekent? Snap je wat "(+ 123 456)" betekent? Snap je wat "(< (+ 123 456) 789)" betekent? Dan kan de rest van die expressie toch geen probleem vormen?

Overigens, nadat je de expressie ontcijferd hebt, lijkt de meer relevante vraag me: waar komen t1, t2 en t3 vandaan en wat betekenen ze?

[ Voor 31% gewijzigd door Soultaker op 22-11-2010 10:41 ]


  • McFreak
  • Registratie: December 2000
  • Laatst online: 20-11 18:14

McFreak

McFraGG de gekste !!

Topicstarter
kijk, ik kom toch wel ergens ..

(setq t1 1997)
(setq t2 6)
(setq t3 1)

dit zijn de vars t*

mijn inziens kijkt hij dus of de cdate groter is dan (+ (* t1 10000) (* t2 100) t3)
is 20101122.10484602 groter dan 1997601 ?

ja
dus hij pakt statement (einde = 1) ; wat een bad function is.

maar waarom deed deze functie het dan vorige week wel ?
en precies vandaag op elk workstation niet ?

na verwijderen van de clause (einde = 1) werkt alles weer ..

McFraGG de gekste !!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Sorry hoor, maar de basale werking van operators mag je toch echt uit een lesboek of tutorial halen. We runnen hier een discussieforum, geen helpdesk en al helemaal geen prive-les. ;) Het is niet alsof er complexe wiskunde toegepast wordt in die expressie. ;)

Daarnaast: als je code van anderen niet begrijpt is de eerste logische stap om even contact op te nemen met die persoon. Hij weet als geen ander wat die code doet.

Dit topic gaat in elk geval op slot bij gebrek aan eigen inzet.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.