упражнение number_in_month (ошибка в функции SML при построении списка целых чисел из списка кортежей) - PullRequest
1 голос
/ 25 февраля 2020
val test1 = [(1,5,3),(3,5,2),(3,4,5)]

fun number_in_month dates_and_month  =
    case dates_and_month of
        (x,y,z)::xs' => y :: number_in_month xs'           

Этот код выдает следующую ошибку при запуске в REPL с test1:

необработанное исключение Соответствие [ошибка неисчерпывающего совпадения] возбуждено при: hw1pm.sml: 28.49

Любое подсказка почему?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Не знал, что делать, когда список пуст.

Рабочий код:

fun number_in_month dates_and_month  =
    case dates_and_month of
        [] => []
        | (x,y,z)::xs' => y :: number_in_month xs'    
0 голосов
/ 26 февраля 2020

Редактировать: Я пытался сделать этот ответ более полезным, сохраняя при этом замечание, что это, вероятно, наиболее часто задаваемый вопрос SML в StackOverflow. Полный список случаев, когда этот вопрос задавался: 1-й , 2-й , 3-й , 4-й , 5-й, 6-й , 7-й , 8-й , 9-й , 10-й , 11-й , 12 , 13 , 14 , 15 и 16 * (не считая этого сообщения).

Вместо того, чтобы ответить на этот вопрос снова, кураторская версия их здесь:

  • 1-й , 2-й , 6-й , 12 борьба с рекурсией и бесконечной рекурсией. Некоторые попытки включают использование функции null, а другие - сопоставление с образцом. Я бы go с рекомендацией использовать сопоставление с образцом.
  • 3-й , 4-й , 5-й , 7-й , 13th , 14th обеспечивают много понимания общей структуры этой функции. Вы, вероятно, узнаете гораздо больше, чем просили, просто прочитав эти ответы, и, поскольку они охватывают множество элементарных тем в контексте функции, с которой вы активно работаете, это может быть очень полезным.
  • 10th касается использования изменяемой ссылки, поэтому держитесь подальше от этой ссылки, если только вы не собираетесь совершить ту же ошибку!
  • 11th на самом деле не спросите что-нибудь, но автор говорит, что у них есть это упражнение, а затем как бы останавливается. Здесь есть урок, и я не собираюсь его выяснять.
  • 8-й , 9-й , 15-й и 16-й , по-видимому, устраняет синтаксические ошибки.

Вопросы, задаваемые по этому вопросу после этого ответа: 17-й (отсутствует else).

...