Hallo Dea,
der Ansatz ist super (das ist Lisp, kein Basic!) - nur ein kleiner Haken bei der Ausführung: Da ist eine Evaluationsstufe zu wenig im Spiel.
CAR evaluiert zu #<SUBR @027eef8c CAR> - und das ist das, was da gebraucht wird (in XYZ), nicht der Name CAR, sondern der Funktionsinhalt. Ändere '(car cadr caddr) in (list car cadr caddr) um, dann geht's, weil dann nicht die Namen, sondern die evaluierten Inhalte an mapcar durchgereicht werden.
Code:
(setq punktliste '((1 6 3)(2 5 7)(9 4 6)))
(mapcar
'(lambda (xyz)
(max (xyz (car punktliste)) (xyz (cadr punktliste)) (xyz (caddr punktliste)))
)
(list car cadr caddr)
)
Aber es lässt sich noch einiges vereinfachen und verbessern. Warum auf drei Punkte beschränken? Ist doch schöner, wenn's mit jeder Punktliste funktioniert. Und gleich noch MIN und MAX in einem Rutsch erledigen:
Code:
(setq punktliste '((1 6 3)(2 5 7)(9 4 6)))(mapcar
'(lambda(extr / )
(mapcar
'(lambda(cxr / )
(apply extr
(mapcar cxr punktliste)
)
)
'(car cadr caddr)
)
)
'(min max)
)
=> ((1 4 3)(9 6 7))
In diesem Fall musst du aber wieder die Funktionsnamen übergeben, nicht die Funktionen selbst. Sowohl APPLY als auch MAPCAR ohne LAMBDA erwarten Funktionsnamen, nicht die Funktionen.
Gruss, Axel
------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP