Как реализовать рекурсивную функцию для упрощения полиномиальных членов с отсортированным списком кортежей?

#list #tuples #ocaml

#Список #Кортежи #ocaml

Вопрос:

Я пытаюсь реализовать функцию для добавления подобных терминов в отсортированный список кортежей (первое число представляет константу полинома, второе представляет степень). Я новичок в ocaml и на самом деле не знаю, что я делаю неправильно или как это сделать правильно.

Я пытался написать это, но это не работает https://gyazo.com/d37bb66d0e6813537c34225b6d4048d0

 let rec simp list = 
    match list with 
    | (a,b)::(c,d)::remainder where b == d -> (a c,b)::simp(remainder)
    | (a,b)::(c,d)::remainder where b != d -> (a,b)::(c,d)::simp(remainder)
    | _ -> list;;
  

Это должно объединить все термины с одним и тем же вторым значением и просто вернуть один кортеж с их первыми значениями, добавленными в новый список. ie: [(3,2);(4,2)] -> [(7,2)].

Комментарии:

1. Привет, не могли бы вы написать сообщение об ошибке, которое вы получаете, прямо в своем вопросе, вместо скриншота?

Ответ №1:

Я не знаком с where ключевым словом — есть ocaml-where, который его предоставляет, но, похоже, он делает что-то отличное от того, что вы ожидаете. Таким образом, синтаксис просто неправильный и where неожиданный.

Вы, вероятно, имели в виду when вместо where .

Комментарии:

1. Да, проблема действительно заключалась в том, что я использовал when вместо where . У меня также был порядок сортировки в обратном направлении. Вместо сортировки по второму элементу кортежа я изменил элементы кортежа на (мощность, константа). Теперь это работает. Спасибо, чувак. 🙂