Как новичок в Haskell, я пытаюсь добавить два n-битных двоичных целых числа.Как добавить два n-битных двоичных целых числа в Haskell?
Ниже приведено то, что я написал на C++, чтобы показать, что я хочу реализовать. Может ли кто-нибудь показать мне, как это сделать в Haskell?
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
int main()
{
vector<int> lhs{1,1,1,1}, rhs{1,0,1,1};
//! 3 inputs -> 2 outputs
deque<int> sum;
int carry = 0;
for(auto l = lhs.crbegin(), r = rhs.crbegin(); l != lhs.crend(); ++l, ++r)
{
int digit_sum = carry + *l + *r;
sum.push_front(digit_sum%2);
carry = digit_sum/2;
}
if(carry)
sum.push_front(carry);
for(auto b : sum)
cout << b << " ";
return 0;
}
выход:
1 1 0 1 0
Ниже, где я застрял в Haskell ..
add :: (Int, Int, Int) -> (Int, Int)
add (l,r,c) = (((l+r+c) `mod` 2), ((l+r+c) `div` 2))
bAdd :: [Int] -> [Int] -> ([Int], Int)
bAdd [] [] = ([fst (add (0,0,0))], snd (add(0,0,0)))
bAdd [l] [r] = ([fst (add (l,r,0))], snd (add(l,r,0)))
bAdd (l:lt) (r:rt) = ([fst (add (l,r,add (head)))])
@EdChum Хорошо, я добавил то, что я сделал в Haskell .. –
Для чего это нужно? Встроенный тип «Integer» представляет двоичные целые числа произвольной точности. – dfeuer
@dfeuer Это упражнение от CLRS. Я сделал это, чтобы узнать Хаскелла. Ничего серьезного. –