小编Asl*_*986的帖子

命名空间 std 中所有符号的列表

我在哪里可以找到命名空间 std 中声明的所有符号的列表?

实在找不到了,不知道去哪里找。

c++

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

如何正确定义像"任何"这样的函数

学习Haskell,我正在尝试编写一个takeIf给定条件和列表的函数来返回满足条件的所有列表元素.

期望输出的示例:

takeIf (>0) [] --> []
takeIf (>0) [-1, 0, 1, 2] --> [1,2]
Run Code Online (Sandbox Code Playgroud)

我试过这个定义:

takeIf cond [] = []
takeIf cond (x:xs) = if (cond x) 
                    then x:(takeIf cond xs)
                    else []:(takeIf cond xs)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我的第一个问题是:我有

:t takeIf --> ([a] -> Bool) -> [[a]] -> [[a]]
Run Code Online (Sandbox Code Playgroud)

为什么?为什么不:

:t takeIf --> (a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

如何才能使此代码生效?

这是我得到的错误:

在此输入图像描述

如果有帮助,我正在使用 ghci

haskell

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

也许是monad用法的例子

我正在尝试学习Haskell,但我在使用monad时遇到问题.

我导入了模块Data.Maybe.

但我不知道如何使用>>=运营商.

鉴于(>>=) :: Monad m => m a -> (a -> m b) -> m b我无法理解如何定义一个函数(a -> m b).

有人可以提供一些教学示例吗?

monads haskell

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

了解monad实例

我有这个Haskell代码部分:

newtype State st a = State (st -> (st, a))

instance Monad (State state) where
    return x = let f t = (t,x) in State f

    State f >>= g = State (\oldstate ->
                let {(newstate, val) = f oldstate;
                  State f'= g val}
                in f' newstate)
Run Code Online (Sandbox Code Playgroud)

我是新来的单子,但我想我如何returnbind在一般情况下工作.

但在上面的例子中我有很多问题:

  1. Monad (State state)状态Monad的名字?它与它有什么关系newtype State ...
  2. return x = let f t = (t,x) in State f哪里t来自?

monads haskell

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

在do块内迭代

我写了这段代码:

toCouplesFile = do inputFile <- openFile "deletedId.csv" ReadMode
                   outputFile <- openFile "couples.txt" WriteMode
                   readAndChange inputFile outputFile

readAndChange i o = do iseof <- hIsEOF i
                       if iseof then (return o)
                       else do line <- hGetLine i
                               hPutStrLn o (show (extractNameAndId line))
                               readAndChange i o
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以使用一个函数重写此代码,使用类似于此模式的东西:

function x = do ...
                label
                .....
                if ... then label else exit
Run Code Online (Sandbox Code Playgroud)

monads haskell

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

在列表列表中,施加相同的长度

我有这种数据类型,它应该代表一个表:

data R = R [Bool]  deriving Eq -- Row
data T = T [R]     deriving Eq -- Table
Run Code Online (Sandbox Code Playgroud)

问题是它允许拥有不同长度的行表,例如:

tab =T [R [True, False, True, True],
        R [False, False, True, False],
        R [False, False, False, True],
        R [False, False]]
Run Code Online (Sandbox Code Playgroud)

是否可以修改数据定义T以强制所有R元素具有相同的长度?

haskell

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

执行地图功能

我正在尝试实现类似Scheme的map功能,即

map([X1, X2, ..], Fun) ->[Fun(X1), Fun(X2), ...] 
Run Code Online (Sandbox Code Playgroud)

我写了这段代码:

map([], Fun, []).
map([H|T], Fun, [HO|TO]) :- call(Fun, H, HO), map(T,F,TO).
Run Code Online (Sandbox Code Playgroud)

现在,看看这个运行:

?- map([1,2,3], plus(1), X).
X = [2, 3, 4] ;
X = [2, 3, 4] ;
X = [2, 3, 4] ;
X = [2, 3, 4] ;
ERROR: map/3: Arguments are not sufficiently instantiated
   Exception: (9) map([3], _G380, _G351) ?
Run Code Online (Sandbox Code Playgroud)
  1. 如何在提供第一个解决方案后停止?
  2. 如何跟踪它?如果我使用trace它,请在第一个解决方案后停止执行.

prolog

3
推荐指数
1
解决办法
1218
查看次数

无法链接模板功能

我有这个代码:

template<typename T>
class Listoid{

  private:
    std::vector<T> list;

  public:
    typedef typename std::vector<T>::iterator iterator;

    iterator begin() {return list.begin();}
    iterator end() {return list.end();}

  public:
    Listoid(T t) {
      list.push_back(t);
    }

  const T operator [](int i){
    return list[i];
  }

  void addElem(T ne){
    list.push_back(ne);
  }

  friend T cons(T new_elem, Listoid<T> list);

};

template<typename T>
Listoid<T> cons(T new_elem, Listoid<T> list){

  Listoid<T> new_list(new_elem);
  for(typename Listoid<T>::iterator it = list.begin(), e = list.end();
        it != e; ++it){
          new_list.addElem(*it);
        }
  return new_list;
}


int main(){

  Listoid<int> lista(312);
  lista.addElem(22);

  Listoid<int> lista2 …
Run Code Online (Sandbox Code Playgroud)

c++ templates

3
推荐指数
1
解决办法
991
查看次数

在Monad定义中键入错误

我正在尝试了解Haskell中的Monads.给定数据类型:

data XY a = X a | Y a
Run Code Online (Sandbox Code Playgroud)

我想'X a >>= f'回来'f a','Y a >>= f'只是忽略'f'并返回'Y a'.

这是我写的代码:

  4 instance Monad XY where
  5         return x = X x
  6         (X a) >>= f = f a
  7         (Y a) >>= f = Y a
Run Code Online (Sandbox Code Playgroud)

这是我得到的编译器错误:

prog.hs:7:25:
    Couldn't match expected type `b' with actual type `a'
      `b' is a rigid type variable bound by
          the type signature for …
Run Code Online (Sandbox Code Playgroud)

monads haskell

3
推荐指数
1
解决办法
94
查看次数

放大ggplot2图例

我有这样的情节做出Rggplot2 在此处输入图片说明

这是由以下代码绘制的:

ggplot(mtcars) + 
  geom_smooth(fill='grey', alpha=0.3, span=0.1, aes(x=mpg, y=hp, color='AAA',linetype='AAA')) +
  geom_smooth(fill='grey', alpha=0.3, span=0.9, aes(x=mpg, y=hp, color='BBB',linetype='BBB')) +
  scale_colour_manual(name='test', values=c('AAA'='chocolate', 'BBB'='yellow')) +
  scale_linetype_manual(name='test', values=c('AAA'='dashed','BBB'='solid')) +
  theme_minimal() +theme(legend.position = "top") 
Run Code Online (Sandbox Code Playgroud)

问题:从图例中很难理解“AAA”线是虚线,因为盒子太小了。

我怎样才能放大它?

我希望有类似的东西: 在此处输入图片说明

r ggplot2

3
推荐指数
1
解决办法
1368
查看次数

标签 统计

haskell ×6

monads ×4

c++ ×2

ggplot2 ×1

prolog ×1

r ×1

templates ×1