저는 SML과 같은 연습 문제를 해결하려고합니다.SML의 레코드 및 튜플에 문제가 있습니다
10 개 질문을 포함한 객관식 시험에 사용할 ML 프로그램을 작성하십시오. 프로그램에 다음이 포함되어야합니다.
o 시험의 대답 키 예 :
val key= “adabcbaadb”;
o 학생의 이름과 답변이 들어있는 레코드 (정보)에 대한 유형 정의. 예 : {name=”Ali”,ans=”abadccdadb”}
o 학생의 이름과 점수가 포함 된 튜플 (결과)에 대한 유형 정의. 예 : ("Ali",60)
o 3 명의 학생 정보가 포함 된 유형 정보 레코드 목록을 작성하고 점수를 계산 한 다음 result 유형의 튜플 목록으로 변환하는 데 필요한만큼의 함수를 작성하십시오. 다른 지원 기능도 작성할 수 있습니다.
예 :
- 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
o 평균 점수를 계산하고 평균보다 높은 점수를받은 학생을 반환하는 데 필요한만큼의 함수를 작성하십시오. 예 :
-val aboveList=aboveAvg(results);
val aboveList = [("Ali",60),("Can",100)] : result list
주 : 귀하의 모든 기능에 매개 변수와 반환 값의 유형을 제공해야합니다. 표현을 paranthesize하십시오. 문자열을 문자 배열 으로 변환하는 분해 함수를 사용하십시오.
- 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);
덕분에