2016-04-09 8 views
1

Ich versuche, eine Liste von Variablen in eine Funktion einzeln zu übergeben, aber wenn ich versuche, sie zu übergeben, gibt die Funktion Nill zurück.Clojure Passing List Variablen

(map (partial shortestPath G) (first Robot)(second Robot)) 

Getestet habe ich die Bits des Codes individuell und (first Robot) und (second Robot) nicht arbeiten, wie ich sie auch beabsichtigt sie, wie so [[:space]] zurückkehren und Ausgang zur Zeit.

Was ich brauche, ist nur :Space. Wie würde ich das machen?

Danke.

Edit:

(def ItemPickUp [:Space :Mail]) 
(def ItemDestinations [:Storage :z2]) 
(def Robot [[ItemPickUp] [ItemDestinations]]) 
(map (partial shortestPath G) (first Robot)(second Robot)) 
+2

Wir verwenden müssen mehr Kontext als das. Dies hängt mit Ihrer [früheren Frage] zusammen (http://stackoverflow.com/questions/36367877/clojure-passing-individual-variables-to-function), die den ItemPickup- oder ItemDestinations-Code nicht enthält, der diese Ausgabe erzeugt. Fügen Sie diese Frage bitte dieser Frage hinzu. – jmargolisvt

Antwort

0

ich das Problem zu lösen, gelang es mir, benötigt flatten wie so

(map (partial shortestPath G) (flatten (first Robot))(flatten(second Robot)))

geben mir die gewünschte Ausgabe

(flatten (first Robot)) 
(:Mail :d2) 
+1

'flatten' sollte ein letzter Ausweg sein. Warum benutzt du 'flatten 'hier anstelle von' erst' oder anstelle von '( – noisesmith

+0

) Vielen Dank für deine Lösung, ich bin ein Neuling in Clojure und ich habe versucht eine Lösung zu finden, die ich war achte nicht auf deine Lösung, die auch funktioniert. – Wuffle

+0

@noisesmith * 'flatten' * (eher als Carthago) * delenda est * - der Cato von Clojure. – Thumbnail

Verwandte Themen