我已经在网上搜索了这个关键字的实际解释.我看过的每个Haskell教程都是随机开始使用它,而不是解释它的作用(我看过很多).
这是Real World Haskell使用的基本代码Just.我理解代码的作用,但我不明白它的目的或功能Just是什么.
lend amount balance = let reserve = 100
newBalance = balance - amount
in if balance < reserve
then Nothing
else Just newBalance
Run Code Online (Sandbox Code Playgroud)
从我所观察到的,它与Maybe打字有关,但这几乎是我所学到的.
Just非常感谢对什么方法的一个很好的解释.
灵感来自K&R第5.5节中描述的程序:
void strcpy(char *s, char *t)
{
while(*s++ = *t++);
}
Run Code Online (Sandbox Code Playgroud)
C程序
if ('\0') { printf("\'\\0\' -> true \n"); }
else { printf("\'\\0\' -> false\n"); }
if ("\0") { printf("\"\\0\" -> true \n"); }
else { printf("\"\\0\" -> false\n"); }
Run Code Online (Sandbox Code Playgroud)
版画
'\0' -> false
"\0" -> true
Run Code Online (Sandbox Code Playgroud)
为什么'\0'和"\0"评价不同的C 2
clang版本3.8.0
工作代码:
import System
main = do
[file1, file2] <- getArgs
--copy file contents
str <- readFile file1
writeFile file2 str
Run Code Online (Sandbox Code Playgroud)
崩溃的代码:
import System
main = do
[file1, file2] = getArgs
str = readFile file1
writeFile file2 str
Run Code Online (Sandbox Code Playgroud)
当我尝试时,它抛出一个错误:
a.hs:6:18:输入'='解析错误
那么,如何不同是<-从=?
我最初在Windows上的python IDE中编码.现在,当我将我的代码粘贴到Linux服务器上的文件中时.现在当我运行脚本时,它给了我这个错误:
坏解释器:没有这样的文件或目录
请告诉我们如何解决此错误.
好的只是一个简单的问题.我在Windows上使用Visual C++进行编程,并且为了学习目的已经更改为Ubuntu并在Code :: Blocks,CodeLite和Eclipse中启动.我已经编写了一些简单的程序,SDL2并使用GLEW基于SDL2窗口的简单OpenGL应用程序.我用命令下载了库:
sudo apt-get install ...
我的主要问题是:因为这个应用程序是在外部库(rellying SDL2,glew,flu,OIS),它并没有在其他Linux计算机上运行.使用终端命令安装所有这些库后,程序将无法执行.我的问题是,是否可以构建不需要安装这些库的程序.例如,在Windows上,您将程序链接到文件夹SDL2.lib并包含SDL2.dll在.exe文件夹中.我怎么能在linux上做到这一点.我对linux编程以及工作原理的经验很少,所以我希望这只是一个基本问题.:)
首先我加载文件 SWI-Prolog
$ swipl file.pl
Run Code Online (Sandbox Code Playgroud)
然后我修改文件并保存.
现在我如何重新加载文件
?- reload
Run Code Online (Sandbox Code Playgroud)
为此修改file.pl?
我已经创建了一个组合框,从使用该函数转换xmlWidget为a comboBox,castTocomboBox现在我想获取活动项的文本或索引.问题是如果我使用该comboBoxGetActive函数它会返回一个IO Int结果,我需要知道如何获取该Int值.我试着阅读关于monads的内容,这样我就能理解在这样的情况下可以做些什么,但我似乎并不理解.我很感激能得到的所有帮助.我应该提一下,我用Glade和gtk2hs.
我在命题逻辑中证明了一些定理.
Modus Ponens说,如果P暗示Q和P为真,则Q为真
P ? Q
P
-----
Q
Run Code Online (Sandbox Code Playgroud)
将在Haskell中解释为
modus_ponens :: (p -> q) -> p -> q
modus_ponens pq p = pq p
Run Code Online (Sandbox Code Playgroud)
您可能会发现它的类型等同于定理,程序等同于证明.
逻辑分离
data p \/ q = Left p
| Right q
Run Code Online (Sandbox Code Playgroud)
逻辑连接
data p /\ q = Conj p q
Run Code Online (Sandbox Code Playgroud)
当且仅当
type p <-> q = (p -> q) /\ (q -> p)
Run Code Online (Sandbox Code Playgroud)
承认用于假设没有证据的公理
admit :: p
admit = admit
Run Code Online (Sandbox Code Playgroud)
现在我无法证明换位定理:
(P ? Q) ? (¬Q ? ¬P)
Run Code Online (Sandbox Code Playgroud)
它由两部分组成:
左到右:
P …Run Code Online (Sandbox Code Playgroud) 我只是构建了一个Bar具有 2 个函数的特征(alpha()带有实现和beta()仅带有接口),并且我希望实现的结构Bar只实现beta(),而不是实现自己的alpha()。
有什么方法可以阻止另一个结构实现自己的结构alpha()吗?
trait Bar {
fn alpha(&self) {
println!("you should never implement this function on your own.");
}
fn beta(&self);
}
struct Foo {}
impl Bar for Foo {
fn alpha(&self) {
println!("how do I trigger an error here when a struct implement it's own alpha()?");
}
fn beta(&self) {
println!("implement beta() for Foo");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在测试 C++ 20 的范围,这是我的main.cpp:
#include <ranges>
#include <iostream>
int main()
{
auto const ints = {0,1,2,3,4,5};
auto even = [](int i) { return 0 == i % 2; };
auto square = [](int i) { return i * i; };
for (int i : ints | std::views::filter(even) | std::views::transform(square)) {
std::cout << i << ' ';
}
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
编译它clang++-12但找不到“范围”:
$ clang++-12 --version
Ubuntu clang version 12.0.1-++20210525082622+328a6ec95532-1~exp1~20210525063352.95
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin …Run Code Online (Sandbox Code Playgroud)