@Fsharp_chat

Страница 176 из 772
Friedrich
29.05.2017
12:26:45
@fvnever кстати, а что по поводу игры? Как оно вообще пишется то ? А то я не малейшего представление - как с этим работать =)
Ну, я пилю там потихоньку. Сам понятия не имею, как оно пишется. Придумываем архитектуру на ходу.

игры?
https://github.com/ForNeVeR/1969/

Roman
29.05.2017
12:27:13
игры на F#
MonoGame я делал хелловорлды на ней)

Friedrich
29.05.2017
12:27:16
Но не обольщайтесь, там вообще ничо нету. Я пока только начал.

Google
Anton
29.05.2017
12:27:17
@fvnever го как нибудь в скайп какой. Расскажешь хоть, как это кушать и что я смогу сделать.

А то я пока что только понял, как цвет бекграунда менять :D

Friedrich
29.05.2017
12:27:49
Но это единственное, что там есть!

Ты познал 100% кода :)

Anton
29.05.2017
12:28:29
Дык это, сходим куда переговорить вечером по поводу этого дела?

Friedrich
29.05.2017
12:28:33
Если чо, я щас пилю там рудиментарную рендерилку и некую модель миссии: https://github.com/ForNeVeR/1969/pull/13

Anton
29.05.2017
12:28:42
И, может ещё кто с нами пойдёт.

Friedrich
29.05.2017
12:29:25
Дык это, сходим куда переговорить вечером по поводу этого дела?
Я не знаю, о чём там можно говорить. Пилить надо! Для того, чтоб ещё кому-то было направление для пиления, надо чтоб кто-то (я) подготовил основной скелет.

Я этим и занимаюсь.

Anton
29.05.2017
12:29:54
Но я не имею не малейшего понятия, как пилить это. Не разу игры не пилил.

Friedrich
29.05.2017
12:30:03
Тю, я тоже :D

Vasily
29.05.2017
12:31:54
Я когда -то пытался описать предметную область Settlers of Catan, но чет застрял на гексах

Nikolay
29.05.2017
12:34:21
https://github.com/ForNeVeR/1969/
Пилите Шура, пилите :)

Google
Nikolay
29.05.2017
12:34:40
Правильное дело делаете

Anton
29.05.2017
12:37:03
А что если в F# функция не помечена как «rec» но код её вызывает сам себя. Или компилятор этого не позволит ?

Anton
29.05.2017
12:38:31
Ага, ясно. А я то смотрю сейчас товарища @shwars и вижу у него функция fact помечена как rec

и задумался "Эм, а просто так низя что ли рекурсию вызывать? 0_o"

Friedrich
29.05.2017
12:39:25
Рекурсивные функции специально помечаются явным образом, чтоб нельзя было наворотить случайно.

Anton
29.05.2017
12:39:41
удобно

Friedrich
29.05.2017
12:39:42
Не представляешь, сколько я таких косяков выловил в C#-продакшене :)

Anton
29.05.2017
12:39:52
я так один раз писал экстеншен и вызвал его же в себе.

даже не спрашивай, чем я думал.

У меня студия упала нафиг :D ( когда вызвал код)

Dmitri
29.05.2017
12:41:14
Смысл rec отчасти исторический и берет начало от ранних ML-языков. Идея в том, что let и let-rec - это разные конструкции с точки зрения трансляции в лямбда-исчисление.

Friedrich
29.05.2017
12:41:43
Хм, и правда. Об этом я не задумывался.

Anton
29.05.2017
12:42:38
Ого, вот оно как. И что мы имеем в лямбда-исчислении, когда пишем let-rec ? Можно ли какой-нибудь мини пример для наглядности разницы let и let-rec на уровне лямбда-исчисления ? (если такое вообще возможно)

Friedrich
29.05.2017
12:47:15
letrec через Y-комбинатор, очевидно.

https://github.com/morganey-lang/Morganey/blob/master/std/src/main/resources/std/functions.mgn#L13 — вот он.

Anton
29.05.2017
12:47:43
я про этот Y-комбинатор уже раз 20 слышал. Но так и не знаю, что это такое.

Friedrich
29.05.2017
12:49:15
Я лучше в привате расскажу :)

А то тут народ иногда ругается на такие вот пересказы основ для начинающих.

Nikolay
29.05.2017
12:49:42
Я бы тоже послушал

Google
Nikolay
29.05.2017
12:49:47
Про Y комбинаторы

Надо тогда создать канал: "FSharp для самых маленьких"

Friedrich
29.05.2017
12:50:20
Короче, Y-комбинатор это один из т.н. "комбинаторов неподвижной точки".

Anton
29.05.2017
12:50:24
Угу, я бы там был главным флудером.

Nikolay
29.05.2017
12:50:31
И про fparsec ещё интересно

Friedrich
29.05.2017
12:50:58
Я щас поясню, спокойно. Надо ж термины сначала ввести

Задача комбинаторов неподвижной точки состоит в том, чтобы получить, собственно, неподвижную точку функции. Это такая точка, в которой значение функции перестаёт меняться при её дальнейшем применении (т.е. f(x) = x). Например, функция factorial(x) = x == 1 ? 1 : x * factorial(x - 1) перестаёт меняться при x = 1. Эти комбинаторы используются при изучении всякого рода низкоуровневого функционального программирования (в частности, в лямбда-счислении). Комнибатор отличается тем, что вызывает функцию "рекурсивно", применяя её к её собственным результатам прошлой итерации. При этом комбинатор необязательно сам должен использовать рекурсию (скажем, на каком-нибудь C# вы можете представить себе реализацию комбинатора циклом). Ссылку на то, как можно представить Y-комбинатор в лямбда-счислении, я уже дал выше: https://github.com/morganey-lang/Morganey/blob/00056ad1750b5aa3944a8d7fd936df7156612c6d/std/src/main/resources/std/functions.mgn#L13 Если долго на него смотреть и думать, то можно понять, как он работает. Я уже несколько раз понимал, но всё время опять забываю :)

Nikolay
29.05.2017
13:02:11
Задача комбинаторов неподвижной точки состоит в том, чтобы получить, собственно, неподвижную точку функции. Это такая точка, в которой значение функции перестаёт меняться при её дальнейшем применении (т.е. f(x) = x). Например, функция factorial(x) = x == 1 ? 1 : x * factorial(x - 1) перестаёт меняться при x = 1. Эти комбинаторы используются при изучении всякого рода низкоуровневого функционального программирования (в частности, в лямбда-счислении). Комнибатор отличается тем, что вызывает функцию "рекурсивно", применяя её к её собственным результатам прошлой итерации. При этом комбинатор необязательно сам должен использовать рекурсию (скажем, на каком-нибудь C# вы можете представить себе реализацию комбинатора циклом). Ссылку на то, как можно представить Y-комбинатор в лямбда-счислении, я уже дал выше: https://github.com/morganey-lang/Morganey/blob/00056ad1750b5aa3944a8d7fd936df7156612c6d/std/src/main/resources/std/functions.mgn#L13 Если долго на него смотреть и думать, то можно понять, как он работает. Я уже несколько раз понимал, но всё время опять забываю :)
А на F# нет такого?)

Roman
29.05.2017
13:02:32
Задача комбинаторов неподвижной точки состоит в том, чтобы получить, собственно, неподвижную точку функции. Это такая точка, в которой значение функции перестаёт меняться при её дальнейшем применении (т.е. f(x) = x). Например, функция factorial(x) = x == 1 ? 1 : x * factorial(x - 1) перестаёт меняться при x = 1. Эти комбинаторы используются при изучении всякого рода низкоуровневого функционального программирования (в частности, в лямбда-счислении). Комнибатор отличается тем, что вызывает функцию "рекурсивно", применяя её к её собственным результатам прошлой итерации. При этом комбинатор необязательно сам должен использовать рекурсию (скажем, на каком-нибудь C# вы можете представить себе реализацию комбинатора циклом). Ссылку на то, как можно представить Y-комбинатор в лямбда-счислении, я уже дал выше: https://github.com/morganey-lang/Morganey/blob/00056ad1750b5aa3944a8d7fd936df7156612c6d/std/src/main/resources/std/functions.mgn#L13 Если долго на него смотреть и думать, то можно понять, как он работает. Я уже несколько раз понимал, но всё время опять забываю :)
https://www.wikiwand.com/ru/Комбинаторная_логика + https://www.wikiwand.com/ru/Комбинатор_неподвижной_точки

Friedrich
29.05.2017
13:02:36
А на F# нет такого?)
Комбинатор можно написать везде, где вообще есть функции высшего порядка.

Roman
29.05.2017
13:02:49
А на F# нет такого?)
комбинатор это аппликатив, т.е. по сути ф-ция

Friedrich
29.05.2017
13:03:07
Готовой нету. Есть явная хвостовая рекурсия; смысла в такого рода комбинаторах нету :)

Nikolay
29.05.2017
13:03:49
Меня прям разрывает, так хочется всё изучить

Roman
29.05.2017
13:04:11
Friedrich
29.05.2017
13:04:38
Ну и вообще хорошая статья, да. Дельная.

Roman
29.05.2017
13:05:05
Прекрасное введение.
У Душкина очень много всего прекрасного)

Google
Dmitri
29.05.2017
13:05:26
На F#: let rec y f x = f (y f) x

при этом факторал запишется так без рекурсии: let fact = y (fun f n -> if n=0 then 1 else n*f(n-1))

а если ввести ещё несколько вспомогательных определений: let s f g x = f x (g x) let k x y = x let c f a b = f b a let cond p f g x = if p x then f x else g x

то факториал будет выглядеть так: let fact = y(cond((=)1)(k 1)»((s(*))«(c(«)(c(-)1))))

Roman
29.05.2017
13:07:14
при этом факторал запишется так без рекурсии: let fact = y (fun f n -> if n=0 then 1 else n*f(n-1))
А у вас есть/будет/планируется курс по такого рода вещам?

Friedrich
29.05.2017
13:07:24
Такое ощущение, что Дмитрий это всё прям вот щас на мобиле быстренько набросал!

Dmitry
29.05.2017
13:07:57
Такое ощущение, что Дмитрий это всё прям вот щас на мобиле быстренько набросал!
но я это уже видел на каком-то ДевКоне живьём где-то в подмосковной базе отдыха ;)

если ничо не путаю

Dmitri
29.05.2017
13:08:02
:) курс на курсере будет, но скорее к сентябрю

Friedrich
29.05.2017
13:08:52
:) курс на курсере будет, но скорее к сентябрю
Будем рады, если вы анонс курса нам сюда занесёте. Я бы с интересом прослушал такой курс.

Nikolay
29.05.2017
13:10:02
let rec y f x = f (y f) x А может кто-нибудь эту конструкцию расписать подробнее? Хотя-бы с типами, что-то я не понимаю

Dmitri
29.05.2017
13:10:48
Сейчас хороший курс есть на MVA: http://aka.ms/fsharp

Roman
29.05.2017
13:11:40
Сейчас хороший курс есть на MVA: http://aka.ms/fsharp
Занесу в наш список курсов. Спасибо

Igor
29.05.2017
13:12:18
Народ, у вас работает шорткат “send selected to fsi” в VSCode (особенно интересно на macOS)?

Nikolay
29.05.2017
13:13:05
val y : f:(('a -> 'b) -> 'a -> 'b) -> x:'a -> 'b
Как-то понятнее не стало :) Ладно, попробую позже разобраться

Народ, у вас работает шорткат “send selected to fsi” в VSCode (особенно интересно на macOS)?
У меня не работало, а потом вроде заработало, сейчас хз как

Igor
29.05.2017
13:14:46
У меня не работало, а потом вроде заработало, сейчас хз как
У меня не работают и я даже поставить др не могу. Права у меня еще key-binding от IDEA - не понятно это кофликт или просто плагин тупит.

Google
Igor
29.05.2017
13:16:06
А что пишет
Ничего, просто я добавляю свою комбинацию, а он не сохраняется. дефолтная просто не срабатывает..

Nikolay
29.05.2017
13:16:54
Или у тебя проблема только с шорткатом?

Igor
29.05.2017
13:17:21
есть список кейвордов, там можешь поискать "alt+enter"
Я там и настраиваю, уже много перепробовал - не может там быть везде конфлинкт.

Или у тебя проблема только с шорткатом?
Похоже что это тоже самое что и shift-cmd-p, с этим проблем нет, но не удобно какждый раз вводить команду.

Все разрешилось, после перезапуска показались конфликты - удалил и вроде теперь работает.

Кстати, что-нибудь слышно по FSI на coreclr?

Anton
29.05.2017
13:27:32
@shwars спасибо за примеры.

Pawel
29.05.2017
13:32:26
@shwars А как посоветуете сделать чтобы все привязки let в модуле были вычислены автоматически? Наиболее идиоматичным для F# способом

Vasily
29.05.2017
13:36:18
do?

Или про другое?

Pawel
29.05.2017
13:37:20
do не поможет если имя из привязки явно не вызывается

в F# все вычисления начинаются в [<EntryPoint>]. Мне нужно вычислить все привязки в порядке объявления. Сейчас я это делаю явным вызовом и это просто бесит, наверное самое печальное что есть в F#

при чём это поведение зависит от __DEBUG__

Vasily
29.05.2017
13:42:10
А если либа, то где начинаются?

Pawel
29.05.2017
13:42:35
там, где она вызывается естественно

Vasily
29.05.2017
13:42:38
И я кейса не понял, где нужно вычислить все привязки

Из реальной жизни

Для решения какой проблемы нужны подобные вычисления? Я понимаю, что сейчас задаю очень тупой вопрос

Страница 176 из 772