2013-08-05 38 views
5

Nhân hai số có thể được định nghĩa theo thuật toán như sau: 'thêm số đầu tiên vào chính nó một số lần bằng giá trị của số thứ hai'. Số mũ lũy thừa của hai số có thể được định nghĩa theo thuật toán như sau: 'nhân số đầu tiên với chính nó một số lần bằng giá trị của số thứ hai'. Suy nghĩ về những định nghĩa về phép nhân và lũy thừa này đặt ra một số câu hỏi ...Tổng quát toán tử số học

Thứ nhất, một lớp hoạt động số học có thể được xác định bằng cách bắt đầu bổ sung làm hoạt động cơ bản? Tôi đã viết lên một số mã Haskell để kiểm tra rằng ý tưởng:

order1 x y = x + y 
order2 x y = foldl (order1) x (replicate (y - 1) x) 
order3 x y = foldl (order2) x (replicate (y - 1) x) 
order4 x y = foldl (order3) x (replicate (y - 1) x) 
order5 x y = foldl (order4) x (replicate (y - 1) x) 

đủ Chắc chắn, ý nghĩa của 'order2' là nhân và ý nghĩa của 'order3' là lũy thừa. Ngôn ngữ tiếng Anh, theo như tôi biết, thiếu từ 'orderN' trong đó N> 3. Cộng đồng toán học có điều gì thú vị để nói về các hoạt động này không?

Ngoài ra, với sự xuất hiện đệ quy trong những chức năng 'trật tự', làm thế nào người ta có thể viết một hàm như thế này:

generalArithmetic :: Int -> Int -> Int -> Int 
generalArithmetic n x y = --Comment: what to put here? 

đó có nghĩa là nhân khi n bằng 2, có nghĩa lũy thừa khi n bằng 3 ... ?

Ngoài ra, làm cách nào để tổng quát hóa các hàm số học này để chúng có thể hoạt động trên tất cả các số thực? Kiểu 'tái tạo' là, sau khi tất cả, Int -> a -> [a].

+2

http://en.wikipedia.org/wiki/Tetration –

+1

Khái niệm chung là [hyperoperation ] (http://en.wikipedia.org/wiki/Hyperoperation). – leftaroundabout

+4

Phép nhân/lũy thừa các số ** tự nhiên ** có thể được định nghĩa là các ứng dụng lặp lại của thao tác "thứ tự thấp hơn". Thật khó để nói những gì nó có nghĩa là để giải thích "x^-7,6" là "nhân x của chính nó -7,6 lần". – Ben

Trả lời

4

Có. Bạn có thể bắt đầu với số học peano làm thứ tự đầu tiên (tăng)

Brainf*ck chỉ có tăng, giảm và kiểm tra giá trị khác 0. Ngay cả với điều này nó có thể làm bất kỳ tính toán bất kỳ chương trình máy tính khác có thể làm miễn là nó luôn luôn có đủ bộ nhớ và bạn không vội vàng để có được câu trả lời.

Thuộc tính như vậy được gọi là Turing completenessBrainf*ck là như vậy ngay cả khi không có đầu vào và đầu ra. Do đó, với <, >, +, -, [] bạn có thể thực hiện chương trình để giải quyết tất cả các vấn đề toán học có thể giải quyết được bằng các ngôn ngữ lập trình khác.

Cho đến nay tôi đã thực hiện các chương trình cộng, trừ, trung bình, nhân, chia, mô đun và căn bậc hai với nó.

2

Trong trường hợp bất cứ ai quan tâm đến một định nghĩa cho những gì tôi trước đó gọi là 'generalArithmetic', ở đây nó là:

arithmetic n x y = if n == 0 
        then (x + y) 
        else foldl (arithmetic (n - 1)) x (replicate (y - 1) x) 
+0

Nếu đây là một số điều thực tế và bạn quan tâm đến hiệu quả, bạn cũng muốn xử lý 'n == 1' và' n == 2' làm trường hợp đặc biệt và sử dụng phép nhân và lũy thừa nội tại . – firefrorefiddle

Các vấn đề liên quan