Я пытаюсь решить упражнение в SML;Имея проблему с записями и кортежами в SML
Напишите программу ML, которая будет использоваться для экзамена по множественному выбору, содержащего 10 вопросов. Ваша программа должна включать следующее:
o Ответный ключ экзамена , например.
val key= “adabcbaadb”;
o Определение типа записи (информации), которая содержит имя и ответы студента. , например. {name=”Ali”,ans=”abadccdadb”}
o Определение типа для кортежа (результата), который содержит имя и оценку ученика. , например. ("Ali",60)
o Напишите как можно больше функций для записи списка записей типа, содержащих информацию 3 учеников, вычислить их оценки и преобразовать их в список кортежей результата типа. Вы также можете написать другие вспомогательные функции
например.
- val stuInfo:info list=[{name=”Ali”,ans=”abadccdadb”},
{name=”Ege”,ans=”cbbdacabda”},
{name=”Can”,ans=”adabcbaadb”}];
- val results = calculate(stuInfo);
val results = [("Ali",60),("Ege",20),("Can",100)] : result list
о Пиши, как много функций, которые необходимы для расчета среднего балла, и вернуть студентов, которые получили балл выше среднего. , например.
-val aboveList=aboveAvg(results);
val aboveList = [("Ali",60),("Can",100)] : result list
Примечания: Убедитесь, что вы даете типы ваших параметров и возвращаемого значения во всех ваших функций. Объясните свои выражения. Используйте функцию разрыва, которая преобразует строку в массив символов , например.
- explode "abc";
val it = [#"a",#"b",#"c"] : char list
Мой письменный код для этого упражнения приведен ниже; но мой код не работает:/Где моя ошибка?
val answer_key="ddacbadbca";
type student_information={s_name:string,s_choice:string};
type student_result=string*int;
val student:info list=[{s_name="David",s_choice="adcbbaccad"},{s_name="John",s_choice="ccdabdbbcc"},{s_name="Alice",s_choice="abdaccacdb"}];
val 3studentsResult:student_result=average(student_information);
fun average ((h::t):student_information list):student_result list=student_score(explode"#ans h",explode"key")::average(t);
val sum=0;
fun student_score(((a::b,c::d):'a list):'a list) = (if(a=c) then sum=sum+10 else sum=sum+0)::student_score(b,d);
Благодаря