thedeemon: (office)
[personal profile] thedeemon
Описанная ниже функция add принимает натуральное число n и n интов и возвращает сумму этих интов. Т.е.
add 0 == 0
add 1 42 == 42
add 2 33 44 == 77
add 8 2 2 2 2 2 2 2 2 == 16
Вот так она описывается на Идрисе:
sumType : Nat -> Type
sumType Z = Int
sumType (S k) = Int -> sumType k

adder : (n:Nat) -> Int -> sumType n
adder Z acc = acc
adder (S k) acc = \x => adder k (x + acc)

add : (n:Nat) -> sumType n
add Z = 0
add (S k) = adder k 

Можно ли ее еще упростить и обойтись без вспомогательной функции adder? Че-то я торможу.

Date: 2013-11-27 07:06 pm (UTC)
From: [identity profile] 109.livejournal.com
int Add(params int[] p) { return p.Sum(); }

извините :)

Date: 2013-11-27 07:22 pm (UTC)
From: [identity profile] dima-starosud.livejournal.com
int add(int n, ...) { /* тут уж сами напишите :-D */ }

Date: 2013-11-27 07:47 pm (UTC)
From: [identity profile] 109.livejournal.com
ни фига, Sum - это стандартная библиотека. но и без Sum ненамного длиннее.

Date: 2013-11-28 04:08 am (UTC)
From: [identity profile] thedeemon.livejournal.com
D:

int sum(int[] xs ...) { return xs.reduce!"a + b"; }

Date: 2013-11-27 09:03 pm (UTC)
From: [identity profile] gds.livejournal.com
проблемы начнутся тогда, когда типы аргументов внезапно будут не совсем одинаковыми.

Date: 2013-11-27 09:31 pm (UTC)
From: [identity profile] 109.livejournal.com
это да. нету типа ISummable, или там INumber, поэтому красиво не получится.

Date: 2013-11-27 10:31 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
и ведь не поправишь же, вот что удручает!

monomorphism restriction, впрочем, недалеко ушло...

Date: 2013-11-28 02:32 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Список чисел я и тут мог бы передать, это не интересно.

Date: 2013-11-28 09:07 pm (UTC)
From: [identity profile] 109.livejournal.com
нет, params это не список, это как раз, как у тебя - variable number of arguments.

Date: 2013-11-29 02:01 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, точно, я потом уже заметил.
Но все равно не подходит для менее игрушечной задачи, где типы разные.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 29th, 2026 07:51 am
Powered by Dreamwidth Studios