小编pow*_*put的帖子

函数在OCaml中以相反的顺序返回列表

我想从文件中读取一些数字,将它们带到列表中,最后在屏幕上显示它们.数字.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

5
推荐指数
1
解决办法
610
查看次数

在OCaml顶层使用Str模块?

我尝试了两个命令来加载OCaml顶级的Str Module.第一个命令给我错误"无法找到文件Str.cmo".然后我尝试使用我在顶级使用的文件和第二个命令.使用该命令,我得到了"未定义全局Str的引用".

#load "Str.cmo";;

#use "my_file.ml";;
Run Code Online (Sandbox Code Playgroud)

在OCaml顶级成功加载Str模块需要做什么.

ocaml module

3
推荐指数
2
解决办法
3193
查看次数

Ocaml - 全局vs局部变量

我想创建一个名为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 global-variables local-variables

3
推荐指数
1
解决办法
1109
查看次数

函数调用OCaml中的顺序

我在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)

ocaml

1
推荐指数
1
解决办法
95
查看次数

在Java程序中调用JavaFX并等待退出以运行更多代码

在我的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)

java javafx wait onactivityresult startactivityforresult

1
推荐指数
1
解决办法
914
查看次数

C 数组中可以使用迭代器吗?

我知道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)

c++ arrays

1
推荐指数
1
解决办法
1万
查看次数

如何在OCaml中创建矩阵?

我正在学习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)

arrays ocaml matrix

0
推荐指数
1
解决办法
2731
查看次数