Как исправить ошибку конструктора Ocaml Unbound?

let rec natadd_nat c =
    match c with
    | 0 -> O
    | _ -> (S (natadd_nat (c-1))) 

let rec natadd_int c =
    match c with
    | O -> 0
    | S n' -> 1+(natadd_int n')

let natadd a b =
    natadd_nat((natadd_int a) + (natadd_int b))

Это код, который я написал в ocaml. natadd_nat — это функция, которая преобразует int в символ, состоящий из O и S. natadd_int — это функция, которая преобразует символы O и S в int. Функция natadd изменяет символы a и b с natadd_int на int. И после добавления двух значений, измененных на int, поместите его в функцию natadd_nat и измените обратно на символ.

Но в функции natadd_nat

Unbound constructor O

ошибка произошла в

| 0 -> O

часть.

Как я могу это решить?

пример)

# let two = S (S O) ;;
# let three = S (S (S O)) ;;
# natadd two three ;;
- : nat = S (S (S (S (S O))))

Если это полный пример, вам не хватает определения типа, определяющего конструктор O и S. Если это не полный пример, посмотрите, как создать минимальный воспроизводимый пример.

glennsl 09.04.2022 14:24
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Конструктор типа требует объявления типа с этими конструкторами (или в данном случае конструкторы.

Судя по коду, который вы опубликовали, вам, вероятно, не хватает чего-то вроде:

type nat = O | S of nat

спасибо! Я решил проблему. Но при вызове функции возникает ошибка. Когда я вызываю функцию natadd, возникает ошибка «Несвязанное значение natadd». Как я могу это решить?

jiji 09.04.2022 19:21

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