小编Bat*_*u99的帖子

elixir中的递归和匿名函数

我正在尝试定义一个匿名函数来做一个点积,我可以将它编码为私有函数而没有任何问题,但我正在努力使用匿名函数语法.我知道我可以以不同的方式实现它,但我试图了解如何使用模式匹配和递归来定义匿名函数.这是我目前的实施

dot = fn
  [i|input],[w|weights], acc -> dot.(input,weights,i*w+acc)
  [],[bias],acc -> acc + bias
end
Run Code Online (Sandbox Code Playgroud)

我在编译时遇到这个错误:

function dot/0 undefined
Run Code Online (Sandbox Code Playgroud)

任何提示?这不可能吗?

recursion anonymous-function elixir

34
推荐指数
3
解决办法
5866
查看次数

如何在Elm中创建Date变量

我想在榆树的记录中硬编码日期.记录签名是

type alias Record = { .., startDate : Date, .. }
Run Code Online (Sandbox Code Playgroud)

在我的代码我正在做

record = { .., startDate = Date.fromString "2011/1/1", .. }
Run Code Online (Sandbox Code Playgroud)

问题是Record类型需要Date类型但Date.fromString签名是

String -> Result.Result String Date.Date
Run Code Online (Sandbox Code Playgroud)

如何创建要在记录类型上使用的日期

elm

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

在elixir中将boolean转换为integer

有没有更简洁的方法来转换true - > 1false - > 0而不是求助于

if boolean_variable do
  1
else
  0
end
Run Code Online (Sandbox Code Playgroud)

elixir

7
推荐指数
2
解决办法
2993
查看次数

elixir和默认参数中的tail递归调用

我在Elixir中写了一个简单的例子,虽然它有效但我真的不明白怎么做.

defmodule MyList do
  def sum([],acc \\ 0), do: acc
  def sum([head | tail], acc), do: sum(tail,acc + head)
end
Run Code Online (Sandbox Code Playgroud)

当我调用MyList.sum时,我得到了预期的结果

sum([]) => 0
sum([1,2,3]) => 6
Run Code Online (Sandbox Code Playgroud)

我无法在第二个和中添加默认参数,因为编译器会抛出错误

def sum/2 has default values and multiple clauses, use a separate clause for declaring defaults
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,sum([1,2,3])如何运作?它与任何定义都不匹配.该函数仍然是尾递归的吗?

recursion default tail-recursion elixir pattern-matching

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

如何在elixir mix项目中读取配置文件

我正在创建一个elixir项目来搜索文件中的模式.我想将这些模式存储为配置文件,以便在应用程序中轻松更改.我的第一个想法是将这些文件作为exs文件存储在mix项目的config文件夹中.所以,问题是:

  1. 有没有简单的方法将配置存储在关键字列表的文件中?
  2. 我如何在应用程序中加载它?

我看到有像File这样的模块来读取文件,但是没有标准方法来解析elixir中的关键字列表吗?我在想与Rails中的yml文件类似的东西.

parsing file elixir-mix elixir

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

如何合并Aeson对象?

我有一个像这样的aeson对象列表

[object ["key1" .= "value1"], object ["key2" .= "value2"]] 
Run Code Online (Sandbox Code Playgroud)

我想将它们合并为像这样的单个aeson对象

object ["key1" .= "value1", "key2" .= "value2"]
Run Code Online (Sandbox Code Playgroud)

当使用其他语言的JSON数据(合并操作)时,这是非常标准的,但我在Aeson库中看不到任何类似的东西.

我只是遗漏了一些东西,可以用一些标准的haskell功能来完成吗?我试过使用,sequence但似乎JSON Value不是monad所以我不能这样做.

我不需要处理深度合并或重复键,我只想生成类似的东西

{
  "key1": value1,
  "key2": value2
}
Run Code Online (Sandbox Code Playgroud)

[{ "key1": value1 }, { "key2": value2 }]
Run Code Online (Sandbox Code Playgroud)

json haskell aeson to-json

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

为什么Elixir中的Rem运算符返回负数?

我正在尝试一个简单的操作

rem(-1, 25)
Run Code Online (Sandbox Code Playgroud)

我希望它能够提醒整数除法并返回24(与Ruby中相同),但它返回-1.难道我做错了什么?长生不老药的行为被打破了吗?

elixir

3
推荐指数
2
解决办法
4358
查看次数

幺半群的自动传播

假设我有一个monoid定义为:

data TotalLine = TotalLine { totalQuantity :: Int, orderTotal :: Float }

instance Monoid TotalLine where
  mempty = zero
  mappend = add
Run Code Online (Sandbox Code Playgroud)

由于totalQuantityorderTotal都是数字,它们也在(+)下形成一个monoid 有没有任何方法可以定义

add :: TotalLine -> TotalLine -> TotalLine
Run Code Online (Sandbox Code Playgroud)

所以,我可以只在每个字段上传播mappend调用,而不必手动定义类似的东西

add line1 line2 =
  TotalLine {
    totalQuantity = totalQuantity line1 + totalQuantity line2,
    orderTotal = orderTotal line1 + orderTotal line2
   }
Run Code Online (Sandbox Code Playgroud)

haskell monoids

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