我想从文件中读取一些数字,将它们带到列表中,最后在屏幕上显示它们.数字.txt目前已2 3 5 7 11作为输出我得到11 7 5 3 2 - : unit = ()
为什么会这样?
let rec int_list_from_sb sb n =
match n with
| 0 -> [];
| _ -> (bscanf sb " %d" (fun a -> a))::(int_list_from_sb sb (n - 1));;
let file_name = open_in "numbers.txt" in
let sb = Scanning.from_channel file_name in
let int_list = int_list_from_sb sb 5 in
List.iter (fun a -> print_int a) int_list;;
Run Code Online (Sandbox Code Playgroud) 我尝试了两个命令来加载OCaml顶级的Str Module.第一个命令给我错误"无法找到文件Str.cmo".然后我尝试使用我在顶级使用的文件和第二个命令.使用该命令,我得到了"未定义全局Str的引用".
#load "Str.cmo";;
#use "my_file.ml";;
Run Code Online (Sandbox Code Playgroud)
在OCaml顶级成功加载Str模块需要做什么.
我想创建一个名为result的全局变量,它使用5个字符串连接来创建一个包含字符串start的9倍的字符串,用逗号分隔.我有两段代码,只有第二段代码声明了一个全局变量.由于某种原因,它不能轻易地在我的大脑中注册......难道只是因为我使用了一个let in,所以第一段代码的结果是一个局部变量?有更详细的解释吗?
let start = "ab";;
let result = start ^ "," in
let result = result ^ result in
let result = result ^ result in
let result = result ^ result in
let result = result ^ start in
result;;
- : string = "ab,ab,ab,ab,ab,ab,ab,ab,ab"
let result =
let result = start ^ "," in
let result = result ^ result in
let result = result ^ result in
let result = result ^ result in
let result …Run Code Online (Sandbox Code Playgroud) 我在OCaml中发现了trace函数来跟踪函数调用.我用斐波纳契尝试了它,但是函数调用的顺序并不是我期待的那个.在我的代码中,我fib (n - 1)首先调用,fib (n - 2)但是,通过跟踪,它告诉我fib (n - 2)实际上是第一次调用.是什么原因?
let rec fib n =
if n < 2 then 1
else fib (n - 1) + fib (n - 2);;
Run Code Online (Sandbox Code Playgroud)
当我追踪时,fib 3我得到:
fib <-- 3
fib <-- 1
fib --> 1
fib <-- 2
fib <-- 0
fib --> 1
fib <-- 1
fib --> 1
fib --> 2
fib --> 3
- : int = 3
Run Code Online (Sandbox Code Playgroud) 在我的Java程序中,我给用户一些选项,其中之一调用JavaFXProgram来显示某些内容。当被调用的JavaFX实际退出时,我只想在Java程序中运行更多代码,可能需要5秒钟,也可能需要1分钟。理想情况下,我想要的是类似于Android的设备。我们先致电startActivityForResult(),然后等待的致电onActivityResult()。我如何在自己的情况下达到类似的行为?
我写了这段代码来尝试复制遇到的问题。这是类似的想法,但是以某种方式将其称为JavaFX,开始循环并毫无问题地从用户检索输入。在我的其他程序中,我总是得到Exception in thread "main" java.util.InputMismatchException何时再次返回以扫描输入。但是正如我所说,理想情况下,我只想在JavaFX Application关闭后运行更多代码。
package JavaCallsJavaFXandWaits;
import java.util.Scanner;
import javafx.application.Application;
public class MyJavaProgram {
public static void main(String[] args) {
int input;
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("0 - exit");
System.out.println("1 - display something to me");
input = scanner.nextInt();
switch (input) {
case 0:
break;
case 1:
Application.launch(JavaCallsJavaFXandWaits.MyJavaFXProgram.class, null);
// how to get notified of MyJavaFXProgram exit? I only want to run code after it exits
break;
} …Run Code Online (Sandbox Code Playgroud) 我知道iterator可以用于vectorwithstd::vector::begin或 withstd::begin中定义的<iterator>。对于 也一样std::end。我还可以将迭代器与 C 数组一起使用吗?我尝试了以下方法,但没有成功。
#include <iostream>
#include <iterator>
using std::cin;
using std::cout;
using std::endl;
using std::begin;
using std::end;
void print(const int *arr) {
for (auto cbeg = cbegin(arr); cbeg != cend(arr); ++cbeg) {
cout << *cbeg << endl;
}
}
int main() {
int arr[] = {9, 18, 31, 40, 42};
print(arr);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我认为我可以做到这一点,因为他们在 C++ 入门中使用了这段代码begin,并end让迭代器到达第一个和最后一个元素:
#include <iterator>
using std::begin; using std::end; …Run Code Online (Sandbox Code Playgroud) 我正在学习OCaml,目前我正在努力尝试如何在OCaml中进行迭代以及如何创建矩阵.我想一个数组5×5 0填充.我知道有与共享引用,所以我创造了在每次迭代的新数组不过的IAM在其他地方有问题,特别是在线路的问题6.让我知道像压痕等问题实践.
open Array;;
let n = ref 5 and i = ref 0 in
let m = Array.make !n 0 in
while !i < !n do
m.(!i) <- Array.make !n 0;;
i := !i + 1;;
done
m;;
Run Code Online (Sandbox Code Playgroud)