Hello,
I'm new to functional programming and Clojure and I'm trying to
translate a simple java program into Clojure. My program must build
from 2 input lists (stored in a vector) 2 output lists (also stored in
a vector) which have same number of elements as input lists for both
output lists. The elements' values of the output lists will be the
result of a very simple arithmetical calculation based on input lists'
elements.
Since my java program iterates on lists, I wanted to use a 'higher
order function' in the Clojure version of the program (like the 'map'
function). But I didn't manage to write the equivalent program in
Clojure.
Could someone please help me?
Below is the java program that I'd like to translate.
Thanks a lot,
Regards,
Nicolas
// first file (these are the elements of my lists):
public class Pos {
public String name;
public int value;
public Pos(String newName, int newValue) {
name = newName;
value = newValue;
}
@Override
public String toString() {
return "Name: " + name + ", Value: " + value + "\n";
}
}
// second file that contains the method I'd like to translate using a
higher order function (method called "match"):
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class Matching {
public static void main(String[] args) throws Exception {
List<Pos> options = new ArrayList<Pos>(5);
Pos option1 = new Pos("IBM", -50);
Pos option2 = new Pos("ACCOR", -30);
Pos option3 = new Pos("IBM", -10);
Pos option4 = new Pos("APPLE", -20);
Pos option5 = new Pos("AIRFRANCE", -20);
options.add(option1);
options.add(option2);
options.add(option3);
options.add(option4);
options.add(option5);
List<Pos> actions = new ArrayList<Pos>(4);
Pos action1 = new Pos("IBM", 55);
Pos action2 = new Pos("ACCOR", 40);
Pos action3 = new Pos("AIRFRANCE", 10);
Pos action4 = new Pos("LUFTHANSA", 100);
actions.add(action1);
actions.add(action2);
actions.add(action3);
actions.add(action4);
Vector<List<Pos>> input = new Vector<List<Pos>>(2);
input.set(0, options);
input.set(1, actions);
System.out.println("Options: " + options);
System.out.println("Actions: " + actions);
Vector<List<Pos>> res = Matching.match(input);
System.out.println("Options: " + res.get(0));
System.out.println("Actions: " + res.get(1));
}
public static Vector<List<Pos>> match(Vector<List<Pos>>
optionsAndActions) {
if (optionsAndActions == null) {
return optionsAndActions;
}
if (optionsAndActions.size() < 2) {
return optionsAndActions;
}
Vector<List<Pos>> modifiedOptionsAndActions = new
Vector<List<Pos>>(2);
if (optionsAndActions.get(1) == null) {
modifiedOptionsAndActions.add(0, new
ArrayList<Pos>(optionsAndActions.get(0)));
return modifiedOptionsAndActions;
} else if (optionsAndActions.get(0) == null) {
modifiedOptionsAndActions.add(1, new
ArrayList<Pos>(optionsAndActions.get(1)));
return modifiedOptionsAndActions;
}
ArrayList<Pos> modifiedOptions = new
ArrayList<Pos>(optionsAndActions.get(0));
ArrayList<Pos> modifiedActions = new
ArrayList<Pos>(optionsAndActions.get(1));
modifiedOptionsAndActions.add(0, modifiedOptions);
modifiedOptionsAndActions.add(1, modifiedActions);
for (Pos option : modifiedOptions) {
for (Pos action : modifiedActions) {
if (option.name.equals(action.name)) {
int tempActionValue = Math.max(0, action.value +
option.value);
int tempOptionValue = Math.min(0, action.value +
option.value);
action.value = tempActionValue;
option.value = tempOptionValue;
}
}
}
return modifiedOptionsAndActions;
}
}
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en