我很确定我能记得在我的大学水平课程中做过类似的事情并且有一些公式,但是我的思绪让我失望了.
鉴于声明:(a OR b OR d)AND(a OR c)
我很确定这可以简化为:(OR OR b OR d或c)
但我不记得我会如何证明这一点.
也许这是一系列逻辑表?
我试图通过给出两种语言L1和L2来确定算法是什么,以确定它们是否相等(L1 = L2).
我发现它很难想出一个,虽然我很确定它需要首先转换为DFA,然后将它们减少到最小的DFA.
另外,我知道如果L1-L2和L2-L1为空,则L1 = L2.
有理论的人在这里好吗?
.NET中的String.Format(可能只是VB.NET)将{0},{1},...转换为确定的String,例如:
Dim St As String = "Test: {0}, {1}"
Console.WriteLine(String.Format(St, "Text1", "Text2"))
Run Code Online (Sandbox Code Playgroud)
我试图在Google和StackOverflows中搜索,但它们都返回数字字符串格式.
在haskell我可以使用
sortBy (comparing snd)
Run Code Online (Sandbox Code Playgroud)
按元组中的第二个值排序.
是否有相同的功能来测试等效性?我想出了这个,但也许标准库中有一些东西.
equalsBy :: Eq b => (a -> b) -> a -> a -> Bool
equalsBy f x y = f x == f y
Run Code Online (Sandbox Code Playgroud)
最终目标是按第二个值对对列表进行分组.有了这个,我能做到
groupBy (equalsBy snd) pairs
Run Code Online (Sandbox Code Playgroud)
代替
groupBy (\x y -> (snd x) == (snd y)) pairs
Run Code Online (Sandbox Code Playgroud) 我试图为课程完成一些代码:
public int getValue(char value) {
if (value == 'y') return this.y;
else if (value == 'x') return this.x;
Run Code Online (Sandbox Code Playgroud)
因为我最终可能无法返回任何东西,所以它告诉我最后这样做:
return value;
Run Code Online (Sandbox Code Playgroud)
这让我很吃惊,因为该方法的返回类型是类型int
.然而,它告诉我要回来char
!我正在使用eclipse,习惯于无数的警告和东西,这是一个重大的惊喜.
那么,char
真的是一个int
?为什么会这样?
我在 Fortran 例程中有 3 个可分配的一维数组,VX(:)、VY(:)、VZ(:),它们都具有相同的大小。
我需要将它们聚合在一个名为 VARXYZ 的二维数组中,并将其发送到修改“矩阵”的例程。下面的代码可以工作,但会强制将内存大小加倍。
SUBROUTINE TEST(VX,VY,VZ)
REAL(8), INTENT(INOUT), DIMENSION(:) :: VX,VY,VZ ! They've been allocated with size N in the main
REAL(8), ALLOCATABLE, DIMENSION(:,:) :: VARXYZ ! The 'matrix'
ALLOCATE(VARXYZ(3,N))
VARXYZ(1,:)=VX(:)
VARXYZ(2,:)=VY(:)
VARXYZ(3,:)=VZ(:)
CALL CHANGE_MATRIX(VARXYZ)
VX(:)=VARXYZ(1,:)
VY(:)=VARXYZ(2,:)
VZ(:)=VARXYZ(3,:)
...
Run Code Online (Sandbox Code Playgroud)
为了避免“双重分配”,我的第一个错误反应是在一维数组和矩阵的 3 个“列”之间使用 EQUIVALENCE,但显然这是不允许的。
经过一番阅读后,我看到有人推荐使用指针和 TRANSFER 内部函数,但我不知道如何在这里使用它们。
您能否举例说明如何模仿我需要的这种等效机制?
我需要为等价类编写一个程序并获得此输出...
(equiv '((a b) (a c) (d e) (e f) (c g) (g h)))
=> ((a b c g h) (d e f))
(equiv '((a b) (c d) (e f) (f g) (a e)))
=> ((a b e f g) (c d))
Run Code Online (Sandbox Code Playgroud)
基本上,A集是一个列表,其中顺序无关紧要,但元素不会出现多次.该函数应该接受对(这是根据一些等价关系相关的元素)的列表,并返回一组等价类,而无需使用迭代或赋值语句(如do
,set!
等).
然而,设置实用程序,如set-intersection
,set-union
和消除列表中的重复和内置函数的函数union
,intersection
以及remove-duplicates
被允许的.
非常感谢!
顺便说一下,这不是一个家庭作业问题.我的一个朋友需要这段代码来解决微笑问题.
我正在生成一大堆具有不同级别的因素,并且我希望能够检测到其中两个何时定义了相同的分区。例如,我要检测以下各项是否相等:
x1 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"))
x2 <- factor(c("c", "c", "b", "b", "a", "a", "c", "c"))
x3 <- factor(c("x", "x", "y", "y", "z", "z", "x", "x"))
x4 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"), levels=c("b", "c", "a"))
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
假设有一些数据类型来表达lambda和组合术语:
data Lam ? = Var ? -- v
| Abs ? (Lam ?) -- ?v . e1
| App (Lam ?) (Lam ?) -- e1 e2
deriving (Eq, Show)
infixl 0 :@
data SKI ? = V ? -- x
| SKI ? :@ SKI ? -- e1 e2
| I -- I
| K -- K
| S -- S
deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
还有一个函数来获取lambda术语的自由变量列表:
fv ? Eq ? ? Lam ? ? [?]
fv (Var v) = [v] …
Run Code Online (Sandbox Code Playgroud) haskell lambda-calculus equivalence k-combinator s-combinator
假设我有两个类型'T'的文字.我想测试它们是否相同,但类型'T'只有"小于"运算符实现.我怎样才能在C++中测试它?
equivalence ×10
haskell ×2
java ×2
android ×1
arrays ×1
c++ ×1
class ×1
comparison ×1
equivalent ×1
expression ×1
fortran ×1
k-combinator ×1
lisp ×1
logic ×1
pointers ×1
r ×1
r-factor ×1
regex ×1
s-combinator ×1
string ×1
theory ×1
transfer ×1