我仍然是F#的新手,并试图找出如何制作我自己的类型,可以容纳任何数量的"A"之前,如果最终应该如何一个值.
作为一个例子,它可能像:
A(A(A(A(A(0))))).
Run Code Online (Sandbox Code Playgroud)
如果我尝试制作这样的类型,我试着像这样声明:
type test =
| A of int
| A of test;;
Run Code Online (Sandbox Code Playgroud)
它告诉我,我不能声明两次相同的类型,因为我有重复.有没有办法解决这个问题,或者我真的需要让最后一个节点成为另一个名字:
type test =
| B of int
| A of test;;
Run Code Online (Sandbox Code Playgroud)
结果将是:
A(A(A(A(B(0)))))
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?
以下测试失败:
open FsCheck
open FsCheck.NUnit
open NUnit.Framework
let ``Property: double negation equals no negation`` list =
list = List.rev (List.rev list)
[<Test>]
let ``reversing list two times is equal to not reversing list at all`` list =
Check.Quick ``Property: double negation equals no negation``
Run Code Online (Sandbox Code Playgroud)
错误:
消息:未提供任何参数
我认为FsCheck会在每次测试迭代时为我提供论据.
我正在引用以下文档.
所以
?- canCall(mary, Person).
Run Code Online (Sandbox Code Playgroud)
工作并终止,
?- canFind(mary, Person).
Run Code Online (Sandbox Code Playgroud)
也可以工作并终止。但是不知何故
?- canCall(mary, Person), canFind(mary, Person).
Run Code Online (Sandbox Code Playgroud)
不终止。可能是什么原因?
我仍然无法理解为什么我会将关键字inline用于函数.
它给了我什么,我还没有?
let inline (|Positive|Neutral|Negative|) x =
match sign x with
| 1 -> Positive
| -1 -> Negative
| _ -> Neutral
Run Code Online (Sandbox Code Playgroud) 你好伙伴Overflowers.我正在开发一个组项目,用于创建绘制3D场景的2D渲染的光线跟踪器.我目前正在进行的任务涉及对象(形状)的矩阵变换,需要移动,镜像,剪切等.
在处理形状时,我们选择实现一个定义命中函数类型的接口.此命中函数在每个形状中定义,例如球体,方框,平面等.当变换形状时,我需要变换撞击形状的光线,并且这样做的方式似乎是具有更高阶函数,改变原始形状命中功能.
为了做到这一点,我已经实现了函数transformHitFunction,它似乎工作,但实现Shape接口的新类型transformedShape给了我错误
未找到与此覆盖对应的抽象属性
这对我没有任何意义,因为它适用于同类型的其他命中功能.谁能发现什么是错的?
我试图剥离与此问题无关的所有模块,命名空间和代码.
type Transformation = Matrix of float [,]
type Vector =
| V of float * float * float
let mkVector x y z = V(x, y, z)
let vgetX (V(x,_,_)) = x
let vgetY (V(_,y,_)) = y
let vgetZ (V(_,_,z)) = z
type Point =
| P of float * float * float
let mkPoint x y z = P(x, y, z)
let pgetX (P(x,_,_)) = x
let pgetY (P(_,y,_)) = y
let pgetZ …Run Code Online (Sandbox Code Playgroud) 在将NUnit与F#一起使用之前,我遇到过这个问题:
无法加载文件或程序集'nunit.framework,Version = 2.6.3.13283
我已将我的FSharp.Core版本降级为较低的版本号.我不确定我需要做什么来让我的测试运行没有任何例外.
码
module Foo
open NUnit.Framework
open FsUnit
[<Test>]
let ``some test``() =
1 |> should equal 1
Run Code Online (Sandbox Code Playgroud)
Packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="FSharp.Core" version="4.0.0.1" targetFramework="net46" />
<package id="FsUnit" version="1.4.1.0" targetFramework="net46" />
<package id="NUnit" version="2.6.4" targetFramework="net46" />
<package id="NUnitTestAdapter" version="2.0.0" targetFramework="net46" />
<package id="xunit" version="2.1.0" targetFramework="net46" />
<package id="xunit.abstractions" version="2.0.0" targetFramework="net46" />
<package id="xunit.assert" version="2.1.0" targetFramework="net46" />
<package id="xunit.core" version="2.1.0" targetFramework="net46" />
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net46" />
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net46" />
<package id="xunit.runner.visualstudio" version="2.1.0" …Run Code Online (Sandbox Code Playgroud) f#中的代数数据类型如何工作?我想看一个基本的示例程序来解释它但似乎找不到任何东西.
例如,可能是执行二次公式的代码或找到形状区域的解决方案.
我正在尝试在本地主机(mac osx - El-capitan)上安装 neo4j 服务器,但出现此错误 -
启动 Neo4j 失败:地址 localhost:7474 已在使用中,无法绑定到它。
我尝试停止端口运行,然后安装它并抛出 neo4j 安装应用程序,但它仍然给出此错误
当我尝试启动 neo4j 服务器时,出现以下错误:
./usr/local/bin/neo4j:第 229 行:[:参数太多
给定一个字符串,例如
一:1.0|二:2.0|三:3.0
我们如何创建一个字符串形式的字典:float?
open System
open System.Collections.Generic
let ofSeq (src:seq<'a * 'b>) =
// from fssnip
let d = new Dictionary<'a, 'b>()
for (k,v) in src do
d.Add(k,v)
d
let msg = "one:1.0|two:2.0|three:3.0"
let msgseq = msg.Split[|'|'|] |> Array.toSeq |> Seq.map (fun i -> i.Split(':'))
let d = ofSeq msgseq // The type ''a * 'b' does not match the type 'string []'
Run Code Online (Sandbox Code Playgroud)
此操作将在一个紧密循环内进行,因此效率将是一个加分项。虽然我也想看到一个简单的解决方案,只是为了让我的 F# 轴承。
谢谢。
我正在跟踪序言程序
1 ?- trace.
true.
[trace] 1 ?- solve.
Call: (7) solve ?
Run Code Online (Sandbox Code Playgroud)
我也试过
tell('trace_op.txt').
Run Code Online (Sandbox Code Playgroud)
该文件已创建但为空
现在的痕迹真的很多。我想将输出重定向到一个文件 我们可以将它重定向到一个文件吗?