Я пишу компилятор с функционального языка для JS.Компилятор будет работать в браузере.Мне нужно реализовать механику сопоставления с образцом в JS, потому что оригинал есть.Я нашел Спарклер и Z .Насколько я знаю, Sparkler не может быть выполнен в браузере, и Z не имеет всех необходимых мне возможностей.
Так что мой язык имеет такую семантику:
count x [] <- 0
count x [ x : xs ] <- 1 + count x xs
count x [ y : xs ] <- count x xs
Вот чтопроисходит в следующем фрагменте:
Первая строка - это определение функции, которая принимает два параметра: некоторую переменную x и пустой список и возвращает ноль.
Вторая строка - это определение функции, котораятакже принимает два параметра: некоторую переменную x и список, который начинается с x и возвращает 1 + count(x, xs)
В этом примере я хочу создать код, подобный следующему:
const count = (x, list) => {
match(x, list) => (
(x, []) => {...}
(x, [ x : xs ]) => {...}
(x, [ y : xs ]) => {...}
)
}
Как правильно развернутьэтот тип сопоставления с ifs
и ors
?