Сопоставление с образцом списка пустого списка

Я делаю домашнее задание для университета и столкнулся со странной проблемой с порталом веб-назначения (вы вводите свой код, и он проверяет, все ли в порядке).

Нам нужно написать функцию для умножения матриц. Это делается шаг за шагом, используя векторное умножение, матрицу mult vector, матрицу mult matrix.

Мой код работает на интерпретаторе smlnj, но не в веб-назначении:

fun v_v_mult [] _  = 0.0
  | v_v_mult _  [] = 0.0
  | v_v_mult (r::rs) (c::cs) = r*c + v_v_mult rs cs

fun m_v_mult [] _  = []
  | m_v_mult _  [] = []
  | m_v_mult (rv::rvs) cs = v_v_mult rv cs :: m_v_mult rvs cs

Итак, в моем REPL все нормально, но webassign говорит мне, что

m_v_mult [[]] [] 

вызывает исключение. Я не могу воспроизвести исключение в своем REPL, так как приведенный выше код работает должным образом.

Нужно ли что-то особенное для сопоставления шаблона со списком из пустого списка? Я искал stackoverflow, но не нашел подсказки. Можете ли вы дать мне подсказку (или ссылку или ключевое слово для лучшего поиска)?

Спасибо, Йохен

Этот должен соответствует второму шаблону в m_v_mult. Какое исключение он вызывает?

molbdnilo 08.04.2019 20:40

Это именно моя проблема: я знаю только, что возникает исключение, но не получаю никаких подробностей об исключении (webassign - это только портал отправки и использует некоторые инструменты в фоновом режиме. Кажется, нет прямого подключения к REPL. он также использовался для других языков...)

Jochen 08.04.2019 20:58

Я подозреваю что-то подозрительное в конфигурации webassign. Я думаю, что лучше всего вам поможет тот, кто отвечает за курс.

molbdnilo 09.04.2019 10:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ок, ребята, ответ несколько странный.

fun m_v_mult [] _  = []
  | m_v_mult (rv::rvs) cs = v_v_mult rv cs :: m_v_mult rvs cs

то есть вторая строка удалена.

Это потому, что m_v_mult [[]] [] не имеет пустой матрицы в первом аргументе, а матрицу с одной строкой, которая пуста. Таким образом, результатом должен быть вектор с одним элементом, который включает в себя сумму по 0 числам. Таким образом, результат должен быть идентификатором сложения, то есть 0. И вы получаете этот результат в последнем случае, который вызывает v_v_mult, который возвращает 0 для этого случая.

Я бы не пришел к этому решению без подсказки учителя.

Спасибо, что помогли подумать об этой проблеме и сказали мне, что я, по крайней мере, прав в том, как я ее закодировал.

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