小编Asl*_*986的帖子

导入单子状态

我正在尝试导入 monad 状态。我执行了以下命令:

:m Control.Monad.State
Run Code Online (Sandbox Code Playgroud)

但是找不到模块。我正在使用GHCi, version 7.0.4:.

你能给我一些提示来解决这个问题吗?

谢谢你。

haskell ghci

2
推荐指数
1
解决办法
1776
查看次数

如何定义嵌套列表

试图在这个页面上解决练习7 我想要定义数据类型来写一些值,如:

(List [Elem 1, List [Elem 2, List [Elem 3, Elem 4], Elem 5]])
Run Code Online (Sandbox Code Playgroud)

嵌套列表,任何长度,任何深度.

我试过这段代码:

data List a = Elem a | List [List a]
Run Code Online (Sandbox Code Playgroud)

但它没有编译:

Parse error: naked expression at top level
Run Code Online (Sandbox Code Playgroud)

怎么做到呢?

haskell types

2
推荐指数
1
解决办法
705
查看次数

复杂模式匹配

haskell有可能匹配复杂的模式吗?

我的意思是,我有一个逗号分隔符值(CSV)文件:

name,ID,fieldA,fieldB
Run Code Online (Sandbox Code Playgroud)

是否可以编写如下函数:

getName (n:',':xs) = n
Run Code Online (Sandbox Code Playgroud)

哪里n不是单个元素而是列表?

haskell

2
推荐指数
1
解决办法
347
查看次数

使用基类虚方法

从这段代码开始:

class Base{
public:
    virtual void foo(){....}
};
class Derived{
public:
    void foo(){....}
};
Run Code Online (Sandbox Code Playgroud)

如果d是一个Derived对象,我可以以某种方式调用该对象的Base类中定义的foo方法吗?

编辑:我的意思是从外面,这样d.foo()绑定到Base :: foo()

c++

1
推荐指数
2
解决办法
111
查看次数

是否有可能以这种方式定义for循环?

有没有办法用"双"init-expression写入循环?

vector<int> v;
//...vector filling...
for (vector<int>::iterator i = v.begin() AND vector<int>::iterator e = v.end(); i != e; ++i){ ...}
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
2
解决办法
98
查看次数

打印变量的名称

在Scheme R6RS中是否可以打印变量的名称?我的意思是:

(define (f) 
   (lambda (arg)
      (display ( *name* arg))))
Run Code Online (Sandbox Code Playgroud)

这样:

(define my-var 3)
(f my-var) ; => displays the string "my-var")
Run Code Online (Sandbox Code Playgroud)

scheme r6rs

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

如何在Matlab中传递函数作为参数

我在m文件中定义了这个函数:

function[it,xvect,xdif,fx]=bisez(a,b,nmax,toll,fun)
it=-1;
xvect=[];
xdif=[];
fx=[];
err=toll+1;

while(it<nmax && err>toll)
x=(b+a)/2;
  if(fun(x)==0)
    err=0;
  else
    err=abs(b-a)/2;
  end
it=it+1;
xvect=[xvect;x];
xdif=[xdif;err];
fx=[fx:fun(x)];
  if(fun(x)*fun(a)>0)
    a=x;
  else
    b=x;
  end;
end;
if(it<nmax)
  fprintf('Convergence computed at step k:%d\n',it);
else
  fprinf('Iteration limit reached: %d\n',it);
end
  fprintf('Computed root: %-12.8f\n',xvect(it+1));
return
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试使用这些命令调用它:

fun=@(x)exp(x);
a=1;
b=1.5;
nmax=1000;
toll=2;
bisez(a,b,nmax,toll,fun)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

??? Undefined function or method 'bisez' for input arguments of type 'function_handle'.
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

PS:我正在使用 Matlab 2007b

matlab

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

实例化新数据类型的Show类

我定义了这些数据类型:

data Term = Symbol [Char] | Number [Int] 
data Exp = Fun (String, Term) | Exp (String, [Exp])
Run Code Online (Sandbox Code Playgroud)

然后我写了一些Show规则:

instance Show Term where
  show (Symbol [x])     = [x]
  show (Symbol (x:xs))  = [x]++", "++(show (Symbol xs))

  show (Number [x])     = (show x)
  show (Number (x:xs))  = (show x)++", "++(show (Number xs))

instance Show Exp where
  show (Fun (name, args)) = name++"("++(show args)++")"
  show (Exp (name, args)) = name++"("++(show args)++")"
Run Code Online (Sandbox Code Playgroud)

现在,如果我让:

bt = Exp("z", [Fun("f", Number [1,2,3]), Fun("g", Symbol ['a', …
Run Code Online (Sandbox Code Playgroud)

haskell show

1
推荐指数
2
解决办法
576
查看次数

类构造函数的语法

我有这个代码:

data SafeValue a = SafeValue a a a deriving Eq

class Safe a where
  check::a->Bool
  (+++)::a->a->a

instance (Num a, Eq a) => Safe (SafeValue a) where
  check (SafeValue x y z) | x == y = True
                          | x == z = True
                          | y == z = True
                          | otherwise = False
  (SafeValue a b c)+++(SafeValue x y z) = let new_val = SafeValue (a+x) (b+y) (c+z)
                                          in if check new_val then new_val
                                                              else error "Error"
Run Code Online (Sandbox Code Playgroud)

我想添加class …

haskell

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

为什么长度函数似乎删除了列表?

我有这段代码:

 for (f <- file_list){
                  val file_name = path + "\\" + f + ".txt"
                  val line_list = Source.fromFile(file_name).getLines()
                  println (file_name + ": " + line_list.length)
                  println (file_name + ": " + line_list.length)
                  total_number_lines += line_list.size
              }
Run Code Online (Sandbox Code Playgroud)

我有一个文件列表,对于每个文件我打开它,加载它作为它的行列表然后我计算列表中的行数.

前者调用line_list.length给出正确的行号值,但后者总是返回零.实际上,length执行该函数后,line_list列表似乎是空的.

我真的不明白为什么会这样.

我错过了什么?

scala

1
推荐指数
2
解决办法
86
查看次数

标签 统计

haskell ×5

c++ ×2

ghci ×1

matlab ×1

r6rs ×1

scala ×1

scheme ×1

show ×1

types ×1