powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / list comprehension в F#
20 сообщений из 20, страница 1 из 1
list comprehension в F#
    #36580761
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такой синтаксический сахар, как замена do yield на -> .
Эти выражения эквивалентны:

Код: plaintext
1.
2.
let myList = [for i in  0 .. 3  do yield  0 . 5  * float i]
let myList = [for i in  0 .. 3  ->  0 . 5  * float i]

Но я был удивлен когда выражение
Код: plaintext
let s = [ for i =  1  to  3  -> i ]
не компилируется пока не заменишь на
Код: plaintext
let s = [ for i =  1  to  3  do yield i ]

"for .. in .. -> .." работает, а "for .. to .. -> .." - нет

Серьезной проблемы здесь нет. Просто возникли вопросы к тем кто использует f#:
Может это не единственный баг, а таких много?
Действительно ли Майкрософт будет продвигать этот язык?
Получается ли у вас органично сочетать функциональный стиль с дотнетовскими библиотеками, или нужно выработать новый, гибридный стиль программирования?(на это вопрос прошу ответить не только f#-еров, но и программистов занимающимися другими гибридными языками для платформ .net и java(nemerle, scala итд.)).
Исправлен ли это баг в новых редакциях(у меня vs2010beta2)?

p.s. Пол года назад на дотнетовском форуме я уже задавал вопрос по перспективности F#, но меня там встретили с шутками: "айтизагибаетсо", "не податься ли те в гитаристы" и тд. Сейчас я нашел время заняться этим языком, но уже после первых примеров найдя баги, был огорчен. Поэтому прошу уже без шуток обсудить данный язык.
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580895
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в релизе тоже самое, но я бы не стал вот так называть это багой - для этого надо найти в language specification такое правило. Я думаю еще рано говорить о наличии багов в релизе F# так как он вышел в начале недели и данных по использованию, думаю, еще мало.

Сам использовал эпизодически багов не видел - было странное поведение VS при редактировании fsyaml файлов, но терпимое
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580925
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
см. грамматику: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.pdf

-> это не слово заменяющее yield а часть спецсинтаксиса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[ comp-or-range-expr] -- computed list expression
...
comp-or-range-expr :=
  comp-expr
  short-comp-expr
  range-expr

comp-expr :=
  let! pat = expr in comp-expr -- binding computation
  do! expr in comp-expr -- sequential computation
  use! pat = expr in comp-expr -- auto cleanup computation
  yield! expr -- yield computation
  yield expr -- yield result
  return! expr -- return computation
  return expr -- return result
  expr -- control flow or imperative action
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
short-comp-expr :=
  for pat in expr-or-range-expr -> expr -- yield result
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580928
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin4в релизе тоже самое, но я бы не стал вот так называть это багой - для этого надо найти в language specification такое правило. Я думаю еще рано говорить о наличии багов в релизе F# так как он вышел в начале недели и данных по использованию, думаю, еще мало.

Сам использовал эпизодически багов не видел - было странное поведение VS при редактировании fsyaml файлов, но терпимое

Programming F#
let allIntsSeq = seq { for i = 0 to System.Int32.MaxValue -> i }

пример с книги Programming F#, у меня не скомпилился.
Думаю, если автор писал так, то это не противоречит спецификации, хотя ...
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580938
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В релизе оно дает вот такую ошибку
"Error 1 The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions."

То есть это не бага, это фича!
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580941
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin4см. грамматику: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.pdf

-> это не слово заменяющее yield а часть спецсинтаксиса

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[ comp-or-range-expr] -- computed list expression
...
comp-or-range-expr :=
  comp-expr
  short-comp-expr
  range-expr

comp-expr :=
  let! pat = expr in comp-expr -- binding computation
  do! expr in comp-expr -- sequential computation
  use! pat = expr in comp-expr -- auto cleanup computation
  yield! expr -- yield computation
  yield expr -- yield result
  return! expr -- return computation
  return expr -- return result
  expr -- control flow or imperative action
-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
short-comp-expr :=
  for pat in expr-or-range-expr -> expr -- yield result

Programming f#
When using for loops within list comprehensions, you can simplify the code by using
-> instead of do yield. The following two code snippets are identical:
// Generate the first ten multiples of a number
let multiplesOf x = [ for i in 1 .. 10 do yield x * i ]
// Simplified list comprehension
let multiplesOf2 x = [ for i in 1 .. 10 -> x * i ]

ссылался на книгу. спецификацию не читал
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580948
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin4В релизе оно дает вот такую ошибку
"Error 1 The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions."

То есть это не бага, это фича!

мен студия выдала это:
[src]Error 1 Unexpected symbol '->' in expression. Expected 'do' or other token.[/SRC

в релизе видно изменили сообщение об обшыбке, вместо того чтобы пофиксить багу.
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580954
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaNДумаю, если автор писал так, то это не противоречит спецификации, хотя ...

В книгах бывают опечатки, язык F# менялся несколько раз. Фактически 2.0 - первый финальный релиз.

см например список изменений октябрьского ctp
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580962
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaN
в релизе видно изменили сообщение об обшыбке, вместо того чтобы пофиксить багу.

Если багой называть противоречие книжке, то можно так сказать :)
...
Рейтинг: 0 / 0
list comprehension в F#
    #36580971
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin4ZyK_BotaN
в релизе видно изменили сообщение об обшыбке, вместо того чтобы пофиксить багу.

Если багой называть противоречие книжке, то можно так сказать :)

это была шутка(но с ну удивлюсь, если с долей правды)
...
Рейтинг: 0 / 0
list comprehension в F#
    #36581044
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

в спецификации про list comprehensions ничего не нашел.
Если оно там есть, то, пожалуйста, ткните меня носом, на какой странице.
...
Рейтинг: 0 / 0
list comprehension в F#
    #36581109
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaN,

Как видно из приведенного мной кусочка BNF оно называется там computed list expression. Короткая форма с -> - short-comp-expr
...
Рейтинг: 0 / 0
list comprehension в F#
    #36581192
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belugin4ZyK_BotaN,

Как видно из приведенного мной кусочка BNF оно называется там computed list expression. Короткая форма с -> - short-comp-expr

спасибо
...
Рейтинг: 0 / 0
list comprehension в F#
    #36581246
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока сам не увидел спецификацию - не верил.
Хорошо что в релизе более информативное сообщение об ошибке.
...
Рейтинг: 0 / 0
list comprehension в F#
    #36616805
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил протестировать лямбда исчисление на F#.

Код: plaintext
1.
2.
3.
let tru = (fun t -> (fun f -> t))
let fls = (fun t -> (fun f -> f))
let test = (fun l -> (fun m -> (fun n -> l m n)))
let and_bool = (fun b -> (fun c -> (b c) fls))

При записи выражения:
Код: plaintext
let x = and_bool tru tru

гавкает
авторstdin(27,5): error FS0030: Value restriction. The value 'x' has been inferred to have generic type
val x : ('_a -> '_b -> '_a)
Either make the arguments to 'x' explicit or, if you do not intend for it to be generic, add a type annotation.

при этом в хаскеле все работает отлично.

1. Из-за какого отличия в системе типов F# от хаскеля не работает этот код? Что мешает в качестве результата вычислений получить генерик?(я думал в дот нет генерики существуют в момент выполнения)
2. Какие можно добавить аннотации чтобы оно заработало?(может дурацкий вопрос, но мне это не очевидно)
...
Рейтинг: 0 / 0
list comprehension в F#
    #36617306
Фотография Пилотажный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

А не будет ли у Microsoft с F# то, что стало с J# и J++?
...
Рейтинг: 0 / 0
list comprehension в F#
    #36617317
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может тут что полезного написано

Не знаю, никогда так не теоретизировал
...
Рейтинг: 0 / 0
list comprehension в F#
    #36617321
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПилотажныйZyK_BotaN,

А не будет ли у Microsoft с F# то, что стало с J# и J++?

хз, но я не думаю что J# и J++ были для кого-то интересны.
...
Рейтинг: 0 / 0
list comprehension в F#
    #36617357
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бестиповое лямбда-исчислениее, такое бестиповое

решил реализовать на хаскеле

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
tru = \t -> \f -> t
fls = \t -> \f -> f
test = \l -> \m -> \n -> l m n

and_bool = \b -> \c -> b c fls
or_bool = \b -> \c -> b tru c
not_bool = \b -> b fls tru

pair = \f -> \s -> \b -> b f s
first = \p -> p tru
second = \p -> p fls

c0 = \s -> \z -> z
c1 = scc c0
scc = \n -> \s -> \z -> s (n s z)
plus = \m -> \n -> \s -> \z -> m s (n s z)
times = \m -> \n -> m (plus n) c0
power  = \m -> \n -> n (times m) c1

iszro = \m -> m (\x -> fls) tru

zz = pair c0 c0
ss = \p -> pair (second p)(plus c1 (second p))
prd = \m -> first (m ss zz)
sub = \m -> \n -> n prd m

ch2st c = c ( 1 +)  0 
c3 = scc $ scc $ scc c0
c5 = scc $ scc c3

res = ch2st (sub c5 c3)

умножение и сложение работают отлично
декремент также работает
на попытку вычитания, гавкает ошибка:

авторcannot construct the infinite type


переписал слово в слово на динамической схеме, все отлично работает
вот только синтаксис хасклея для записи лямбда выражений мне больше нравится :(
...
Рейтинг: 0 / 0
list comprehension в F#
    #36617376
belugin4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot ZyK_BotaNхз, но я не думаю что J# и J++ были для кого-то интересны.[/quot]

Ну J++ был весьма хорош в свое время - например Rational на нем писал ORM для VB (благодаря хорошей интеграции с COM).

Вот только засудили бедняжечку.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / list comprehension в F#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]