Композиция в SML (дискретная математика и функциональное программирование)

Мне нужно определить композицию рекурсивной функции ML, которая принимает два отношения и возвращает композицию этих двух отношений. Мне нужно использовать функцию thhisIsTheImageOf и createRelationFromImage в моем определении композиции.

Вот код, который необходимо использовать для определения композиции

fun thisIsTheImageOf(e,[])=[]
    |thisIsTheImageOf(e,(a,b)::xs) = 
        if e=a 
        then b::thisIsTheImageOf(e,xs)
        else thisIsTheImageOf(e,xs);

Вот тип данных, значение и проверенные входные данные для функции thisIsTheImageOf.

datatype city =Vancouver|LosAngeles|Mexico|Minneapolis|Omaha |KansasCity|Denver|StLouis|Memphis|Chicago |NewOrleans|Cinncinati|Pittsburgh|Montreal|NewYork;

datatype rivers =Missouri|Platte|NPlatte|SPlatte|Arkansas|Canadian |Kansas|Mississippi|Tennessee|Ohio|Allegheny|Monongahela;

val isOnRiver=[(Denver,Platte),(Omaha,Missouri),(Omaha,Platte),(KansasCity,Missouri),(KansasCity,Kansas),(Minneapolis,Mississippi),(StLouis,Mississippi),(StLouis,Mi vssouri),(Memphis,Mississippi),(NewOrleans,Mississippi),(Cinncinati,Ohio),(Pittsburgh,Ohio),(Pittsburgh,Allegheny),(Pittsburgh,Monongahela)];

val flowsInto=[(Platte,Missouri),(Kansas,Missouri),(Missouri,Mississippi),(Allegheny,Ohio),(Monongahela,Ohio),(Tennessee,Ohio),(NPlatte,Platte),(SPlatte,Platte),(Ohio,Mississippi)];

thisIsTheImageOf(Pittsburgh, isOnRiver);thisIsTheImageOf(Mississippi, flowsInto);thisIsTheImageOf(Cinncinati, isOnRiver);

fun createRelationFromImage(e,[])=[]
createRelationFromImage(e,x::xs)= (e,x)::createRelationFromImage(e,xs);``

Here are tested inputs for the createRelationFromImage function
createRelationFromImage("Cincinnati",["New York", "Boston", "Dallas"]);

Эти две функции были созданы как отдельные функции, но я должен использовать эти две функции для создания рекурсивной функции композиции.

Я математически знаю функцию композиции, и вот что я написал, чтобы понять, что мне нужно делать.

fun composition( i, r)x=i(r(x));

однако я застрял в том, чтобы идти дальше, пытаясь реализовать две функции.

Композиция, которую требует это упражнение, не является композицией функций. Отношение — это список пар, поэтому вам нужна функция, которая берет два списка пар и создает список пар. Может быть хорошей идеей сначала определить тип вашей операции композиции и решить некоторые конкретные примеры вручную. Например, что именно являетсяcompose(isOnRiver, flowsInto) или compose(flowsInto, isOnRiver)?

molbdnilo 31.03.2022 08:55
Учебная записка [Medium] Leetcode#22 Generate Parentheses
Учебная записка [Medium] Leetcode#22 Generate Parentheses
На этот раз мы собираемся решить еще одну классическую проблему, связанную с парными скобками, так называемую генерацию скобок.
1
1
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
fun composition([],_ )=[]
| composition((a,b)::rest,relation)=
    let 
    fun thisIsTheImageOf(e,[])=[]
    |thisIsTheImageOf(e,(a,b)::xs) = 
        if e=a 
        then b::thisIsTheImageOf(e,xs)
        else thisIsTheImageOf(e,xs);
    fun createRelationFromImage(e,[])=[]
    | createRelationFromImage(e,x::xs)= (e,x)::createRelationFromImage(e,xs);
in 
 createRelationFromImage(a, (thisIsTheImageOf(b, relation)))@ composition(rest, relation)
 end; 

Другие вопросы по теме