[Haskell] Pattern Matching

Gaishnik


foo = 0
bar = 1
test foo bar = bar
test x _ = x


*Main> test 1 0
0

Вроде должно быть что test 1 0 = 1

alfadred

test foo bar = bar

значит то же самое, что
test x y = y

Matching the pattern var against a value v always succeeds and binds var to v.
http://www.haskell.org/onlinereport/exps.html#sect3.17.2

Gaishnik

Matching the pattern var against a value v always succeeds and binds var to v.
http://www.haskell.org/onlinereport/exps.html#sect3.17.2
А как-нибудь можно, чтобы foo и bar брались снаружи?

Anturag

Они и берутся снаружи при вызове функции :confused:

*Main> test foo bar
1

pitrik2

казалось бы причем тут хаскель?
ты такое в какомнить другом языке видел что ли?
(макросы не считаются)
вот аналог на Си того что ты хошь

#include <stdio.h>

int foo = 0;
int bar = 1;

void test(int foo, int bar) {
printf("%d\n", bar);
}

int main {
test (1, 0);
}

alfadred

А как-нибудь можно, чтобы foo и bar брались снаружи?
А зачем?

apl13

void test(int foo, int bar) {
printf("%d\n", bar);
}
Скорее так:
int test(int foo, int bar) {
return bar;
return foo;
}

Gaishnik

А зачем?
Например есть синонимы для каких-то констант, выписывать их в явном виде не хочется.

alfadred

Например есть синонимы для каких-то констант, выписывать их в явном виде не хочется.
Такая штука не подойдет?
data MyType = Foo | Bar | Value Int
test Foo Bar = Bar
test x _ = x

apl13

foo = 0
bar = 1
test x y = if (x,y) == (foo,bar) then y else x

agaaaa

А для чего именованная константа?
Оставить комментарий
Имя или ник:
Комментарий: