Я делаю домашнее задание для университета и столкнулся со странной проблемой с порталом веб-назначения (вы вводите свой код, и он проверяет, все ли в порядке).
Нам нужно написать функцию для умножения матриц. Это делается шаг за шагом, используя векторное умножение, матрицу 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, но не нашел подсказки. Можете ли вы дать мне подсказку (или ссылку или ключевое слово для лучшего поиска)?
Спасибо, Йохен
Это именно моя проблема: я знаю только, что возникает исключение, но не получаю никаких подробностей об исключении (webassign - это только портал отправки и использует некоторые инструменты в фоновом режиме. Кажется, нет прямого подключения к REPL. он также использовался для других языков...)
Я подозреваю что-то подозрительное в конфигурации webassign. Я думаю, что лучше всего вам поможет тот, кто отвечает за курс.
ок, ребята, ответ несколько странный.
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 для этого случая.
Я бы не пришел к этому решению без подсказки учителя.
Спасибо, что помогли подумать об этой проблеме и сказали мне, что я, по крайней мере, прав в том, как я ее закодировал.
Этот должен соответствует второму шаблону в
m_v_mult
. Какое исключение он вызывает?