Конвертировать схему в C ++ - PullRequest
0 голосов
/ 01 мая 2020

Мне дали задание, где я должен преобразовать функцию Scheme в функцию C ++. Вот функция Scheme:

(DEFINE someFunction
   (LAMBDA (n)
      (IF (>= n 0)
         n
         (- 0 n))))

Исправьте меня, если я ошибаюсь, но DEFINE связывает имя someFunction с выражением LAMBDA n. Если n больше или равно 0, то n просто возвращается. В противном случае возвращается 0 - n.

Вот что я придумал, когда преобразовал его в C ++:

int someFunction() {
   int n;
   if (n >= 0) 
      return n;
   else
      return (0 - n);
}

Я правильно понял? Любые советы будут полезны! Я хочу узнать, что я делаю неправильно, поэтому не сдерживайтесь.

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Вы пропустили одну проблему: n в лямбда-выражении является аргументом функции. В вашем коде C ++ вы объявляете его как локальную переменную (которая не инициализируется, поэтому имеет неопределенное значение)

Лучшее решение будет:

int someFunction(int n) {
   if (n >= 0) 
      return n;
   else
      return (0 - n);
}
1 голос
/ 01 мая 2020

Лямбда-выражение не имеет имени; это функция, которая принимает один параметр, и этот параметр называется «n».
(n не является локальной переменной.)

Вы забыли сделать n параметром в C ++ версия.

"Наиболее эквивалентной" версией C ++ будет

auto someFunction = [](int n) { return n >= 0 ? n : -n; };

, но вы, вероятно, ожидаете написать

int someFunction(int n) {
    return n >= 0 ? n : -n;
}
...