我正在读真实世界Haskell Pg 151,我已经盯着下面的一段时间了一个多小时:
回想一下,String是[Char]的同义词,而Char又是类型[a],其中Char代替了类型参数a.根据Haskell 98的规则,在编写实例时,我们不允许提供类型代替类型参数.换句话说,为[a]编写实例对我们来说是合法的,但对于[Char]则不是.16条评论5335
它只是没有下沉.盯着RWH第6章的(免费盗版)副本,我看到很多其他人真的很痛苦.我仍然不明白这些评论......
首先,关于这一切的一切让我感到困惑,所以如果你觉得你可以解释这段经文的任何事情,TypeSynonymInstances请你做.
这是我的问题:
Int是一个数据构造函数String是数据构造函数 AND 类型同义词现在我无法回答这些问题:
谢谢!
我刚刚开始使用VS2010学习F#,下面是我第一次尝试生成Fibonacci系列.我要做的是建立一个小于400的所有数字的列表.
let fabList =
let l = [1;2;]
let mutable a = 1
let mutable b = 2
while l.Tail < 400 do
let c = a + b
l.Add(c)
let a = b
let b = c
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,在最后一个语句中,我在最后一行收到错误消息"表达式中此点或之前的不完整结构化构造".我不明白我在这里做错了什么.
虽然这似乎是以相当有效的方式(从c ++/C#程序员)构建列表的明显方式,但从我对f#的了解很少,这似乎不是正确的方法来执行程序.这种感觉我是否正确?
有谁知道为什么这不能编译?
type MyInterface<'input, 'output> =
abstract member MyFun: 'input -> 'output
type MyClass() =
interface MyInterface<string, unit> with
member this.MyFun(input: string) = ()
//fails with error FS0017: The member 'MyFun : string -> unit' does not have the correct type to override the corresponding abstract method.
type MyUnit = MyUnit
type MyClass2() =
//success
interface MyInterface<string, MyUnit> with
member this.MyFun(input: string) = MyUnit
Run Code Online (Sandbox Code Playgroud) F#具有称为"类型扩展"的功能,使开发人员能够扩展现有类型.有两种类型的扩展:内在扩展和可选扩展.第一个类似于C#中的部分类型,第二个类似于方法扩展(但更强大).
要使用内部扩展,我们应该将两个声明放入同一个文件中.在这种情况下,编译器会将两个定义合并为一个最终类型(即这是一种类型的两个"部分").
问题是这两种类型对不同的成员和值有不同的访问规则:
// SampleType.fs
// "Main" declaration
type SampleType(a: int) =
let f1 = 42
let func() = 42
[<DefaultValue>]
val mutable f2: int
member private x.f3 = 42
static member private f4 = 42
member private this.someMethod() =
// "Main" declaration has access to all values (a, f1 and func())
// as well as to all members (f2, f3, f4)
printf "a: %d, f1: %d, f2: %d, f3: %d, f4: %d, func(): …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
x = tf.placeholder("float", shape=[42, 4])
y = tf.zeros([42, 4], "float")
xy_stacked = tf.concat(1, [x, y])
print(x.get_shape())
print(y.get_shape())
print(xy_stacked.get_shape())
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出,如预期的那样:
TensorShape([Dimension(42), Dimension(4)])
TensorShape([Dimension(42), Dimension(4)])
TensorShape([Dimension(42), Dimension(8)])
Run Code Online (Sandbox Code Playgroud)
但是,如果占位符具有动态维度,该维度在运行时由传递给的值确定feed_dict=,如占位符通常那样:
x = tf.placeholder("float", shape=[None, 4])
y = tf.zeros([None, 4], "float")
xy_stacked = tf.concat(1, [x, y])
Run Code Online (Sandbox Code Playgroud)
这会产生错误tf.zeros([None, 4], "float").显然Dimension(None)不允许tf.zeros:
TypeError Traceback (most recent call last)
<ipython-input-24-277eca38a392> in <module>()
2
3 x = tf.placeholder("float", shape=[None, 4])
----> 4 y = tf.zeros([None, 4], "float")
5 xy_stacked = tf.concat(1, …Run Code Online (Sandbox Code Playgroud) 我试图找出我的计算机上目前有哪个Bazel版本从源代码安装TensorFlow(它需要0.1.4版本)
evan@evan-box:~/Apps/tensorflow$ bazel --version
Unknown Bazel startup option: '--version'.
For more info, run 'blaze help startup_options'.
evan@evan-box:~/Apps/tensorflow$ bazel version
Build label: head (@125b349)
Build target: bazel-out/local_linux-fastbuild/bin/src/main/java/bazel-main_deploy.jar
Build time: Fri Nov 13 01:23:30 2015 (1447377810)
Build timestamp: 1447377810
Build timestamp as int: 1447377810
Run Code Online (Sandbox Code Playgroud)
那么版本究竟在哪里?
我正在通过"真实世界Haskell"工作,这导致了一个免费的PDF,名为"关于折叠的普遍性和表现力的教程".它指出"折叠"是"普遍的".我正在与他对"普遍"的定义进行斗争,并希望听到那些已经投入时间消化的人:请用最简单,最无术语的英语解释"折叠的普遍属性"?什么是"普遍财产",为什么重要?
谢谢.
我想提出一个接受列表并返回两个列表的功能:第一个是包含每个奇数项和第二个包含每个偶数项.
例如,给定[1;2;4;6;7;9],我想回来[ [1;4;7] ; [2;6;9] ].
到目前为止我写过这篇文章,我不知道如何进步.
let splitList list =
let rec splitOdd oList list1 list2 =
match oList with
| [] -> []
| head :: tail -> splitEven tail (list1::head) list2
and splitEven oList list1 list2 =
match oList with
| [] -> []
| head :: tail -> splitOdd tail list1 (list2::head)
splitOdd list [] []
Run Code Online (Sandbox Code Playgroud) 类型签名中的#含义seq<#seq<'a>>与刚刚相比是什么意思seq<seq<'a>>?
我想知道是否有办法让Bazel列出,输出,显示等所有可以从命令行执行的命令,这些命令在清理后的构建期间运行.我不在乎输出是否在屏幕上,文件中等等.如有必要,我会将其按到可用的形式.
我在Bazel运行期间捕获了屏幕输出,这让我知道正在做什么,但它没有给我一个命令,我可以在命令行上执行.该命令必须包含所有命令选项而不是显示变量.
如果这是不可能的,因为Bazel是开源的,代码中的代码是表示要运行的命令的行,以便我可以修改Bazel以输出可执行命令.
我知道Bazel中的查询命令,并使用它生成依赖关系图.如果这可以作为查询命令完成,那就更好了.
TLDR;
我的目标是在Windows上使用Bazel构建TensorFlow.是的我知道所有问题和原因没有这样做,并且已经通过虚拟机或Docker在Windows上成功安装了TensorFlow.我没有采取射击在Windows上建立巴泽勒开始使用Cygwin,但开始失控,因为我用它来使用包安装和Cygwin不玩包不错,所以后来我就开始尝试手工打造巴泽尔那变成了一个泥潭.所以我现在试图在Windows上手动构建TensorFlow,复制Bazel在Linux上构建TensorFlow的方法.