小编And*_*ewC的帖子

哈斯克尔 - 关于咖喱

在Haskell中,所有功能都是最初的咖喱,对吗?

那么,让我们来看一下这个max函数吧,我会写下我对它是如何工作的理解.

当我写这样的东西时:

max 4 5
Run Code Online (Sandbox Code Playgroud)

会发生的是创建一个内部值为4的新函数,然后接收一个值,因此将此函数应用于5并返回正确的值?

我是以某种方式说错了还是这是正确的?

haskell

5
推荐指数
1
解决办法
197
查看次数

使用TemplateHaskell中的列表

这是我正在使用的教程.

他有一个例子,tupleReplicate它返回一个带值的函数并复制它:

tupleReplicate :: Int -> Q Exp
tupleReplicate n = do id <- newName "x"
                      return $ LamE (VarP id)
                                    (TupE $ replicate n $ VarE id)
Run Code Online (Sandbox Code Playgroud)

那么VarE id返回一个表达式,然后可以使用replicate?我的问题是,如果id是列表,这将如何工作?我想做的事情如下:

let vals = mkName "vals"
LamE (ListP vals) (map reverse $ ListE vals)
Run Code Online (Sandbox Code Playgroud)

除非因为ListE退货Exp而不起作用[Exp].

更一般地说,我想在TemplateHaskell中编写一个获取列表并将函数应用于它的函数.


这里也有一些示例代码在这里,我试图写这样一个函数

makeModel (id_ : name_ : []) = Person (fromSql id_) (fromSql name_)
Run Code Online (Sandbox Code Playgroud)

haskell template-haskell

5
推荐指数
1
解决办法
172
查看次数

为什么有嵌套的IO monad,IO(IO())作为我函数的返回值?

为什么这个函数有类型: deleteAllMp4sExcluding :: [Char] -> IO (IO ()) 而不是deleteAllMp4sExcluding :: [Char] -> IO ()

另外,我怎么能重写这个以便它有一个更简单的定义?

这是函数定义:

import System.FilePath.Glob
import qualified Data.String.Utils as S

deleteAllMp4sExcluding videoFileName =
  let dirGlob = globDir [compile "*"] "."
      f = filter (\s -> S.endswith ".mp4" s && (/=) videoFileName s) . head . fst 
      lst = f <$> dirGlob
  in mapM_ removeFile <$> lst
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
2
解决办法
620
查看次数

“一元函数”的正式定义

维基百科说:

Monadic 函数(即使用 monad 中的值作为参数或返回值的函数)。

我的理解是函数接受或返回单子是单子函数,但当我遇到这个博客时,它似乎有更严格的定义

作者说:

一元函数是产生一元值的函数。(请注意,我们没有提及其输入类型)

形式的函数f :: a -> m b,其中a是 monad 内部值的类型。(称这些为经典的一元函数)

形式的函数f :: anything -> m b,其中函数的输入实际上并不重要。(将这些称为松散一元函数)

看起来定义相当严格和正式,但我找不到任何关于经典一元函数松散一元函数的内容。

那么一元函数到底是什么?

monads haskell functional-programming

5
推荐指数
1
解决办法
2872
查看次数

Haskell替代长模式匹配列表?

我有一个函数,在给定数据类型的情况下输出类似booleanlike的属性.此函数通过模式匹配在数据类型的第一个构造函数上计算属性,所以类似于

data C = C1 | C2 | .. | Cn 

f :: C -> Bool 
f (C1 _ _ ... _) = True
f (C2 _ _ ... _) = True
f (C3 _ _ ... _) = False
.
.
.
f (Cn _ _ ..._) = False
Run Code Online (Sandbox Code Playgroud)

是否有更紧凑的方式来执行模式匹配,还是有另一种(也更紧凑)的方式来进行我的财产检查?我不想将属性添加到数据类型定义中,因为它可以相对容易地计算.

haskell pattern-matching

5
推荐指数
2
解决办法
531
查看次数

为什么ghci可以看到非导出类型和构造函数?我该如何解决?

我是Haskell的新手.这是一些简单的代码:

module Src
(   -- The 'Answer' type isn't exported
    Shape(Circle), -- i.e 'Rectangle' data constructor isn't exported
    Point(..),
    area,
    nudge
) where

data Answer = Yes | No deriving (Show)

data Point = Point Float Float deriving (Show)

data Shape = Circle Point Float | Rectangle Point Point
    deriving (Show)

area :: Shape -> Float
area (Circle _ r) = pi * r ^ 2
area (Rectangle (Point x1 y1) (Point x2 y2)) = (abs $ x2 - x1) …
Run Code Online (Sandbox Code Playgroud)

haskell ghci

5
推荐指数
1
解决办法
380
查看次数

在这个回合制游戏中使用Reader monad是否正确?

我需要学习使用Reader monad.(还有作家和国家).

我所做的游戏竞赛总是包含在整个游戏中有效的全局参数.还有一堆只在一个转弯期间有效的参数.

我结束了所有最新的比赛,有很多很多功能,几乎都有Game和Turn作为输入参数.

在阅读了关于读者monad之后,我正在考虑:

data Game = Game AllNeeded StrategicPositions AndGameRelatedStuffs
data Turn = Turn PlayersPositions AndTurnDependentStuffs 
Run Code Online (Sandbox Code Playgroud)

当我收到转弯依赖数据时,每个循环,我计划有一个变量Reader Game Turn:

turnReader = Reader currentGame currentTurn
let actionToPerform = play turnReader
Run Code Online (Sandbox Code Playgroud)

你认为这是Reader monad的应用程序的好例子吗?您是否认为我可以/应该蒙上眼睛并学会​​在此上下文中使用Reader monad?还是有更合适的monad,就像State一样?

monads haskell

5
推荐指数
1
解决办法
119
查看次数

TCanvas上的"添加"文本渲染?

令我惊讶的是,我发现在TCanvas上重复渲染文本在某种程度上是"附加的".我意识到设置Canvas.Brush.Style:=bsClear是问题的原因,但我确实需要透明地重复呈现文本(即在OnPaint事件中).执行此操作后,文本看起来不太好.

我怎么能避免这种情况?

这是一些示例代码; 如果你在被调用的TButton上点击几下,就可以看到效果btn1.

procedure TForm1.btn1Click(Sender: TObject);
begin
Form1.Canvas.Brush.Style:=bsClear; //if you omit this, everything is OK.
Form1.Canvas.Font.Color:=clRed;
Form1.Canvas.Font.Name:='Times new Roman';
Form1.Canvas.Font.Style:=[fsBold];
Form1.Canvas.Font.Size:=12;
Form1.Canvas.TextOut(50,50,'www.stackoverflow.com');
end;
Run Code Online (Sandbox Code Playgroud)

delphi

4
推荐指数
1
解决办法
717
查看次数

如何将数据添加到数据库?

如何将数据添加到我的数据库?

我的表格:

from django import forms

class DinnerForm(forms.Form):
    name = forms.CharField(max_length=100)
    text = forms.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

和型号:

class Dinner(models.Model):
    name = models.CharField(max_length=100)
    text = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

我的看法:

def add_dinner(request):
    if request.method == 'POST':
        form = DinnerForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            text = form.cleaned_data['text']
Run Code Online (Sandbox Code Playgroud)

如何将数据保存到数据库?

django django-models django-forms

4
推荐指数
1
解决办法
1万
查看次数

模板元编程的Haskell变体

我是Haskell的新手.鉴于Haskell的整个前提是函数将始终返回相同的值,我希望有一些方法可以在编译时计算常量的fibonacci值,就像我可以在C++中使用模板元编程一样,但我可以看不出怎么做.有办法吗?

haskell template-haskell

4
推荐指数
2
解决办法
350
查看次数