小编use*_*725的帖子

在 Raku 中,如何编写相当于 Haskell 的 span 函数?


\n

在 Raku 中,如何编写与 Haskell 函数等价的span函数?

\n

在 Haskell 中,给定一个谓词和一个列表,可以将列表分为两部分:

\n
    \n
  • 满足谓词的元素的最长前缀
  • \n
  • 列表的其余部分
  • \n
\n

例如,Haskell 表达式 \xe2\x80\xa6

\n
span (< 10) [2, 2, 2, 5, 5, 7, 13, 9, 6, 2, 20, 4]\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\xa6 计算为 \xe2\x80\xa6

\n
([2,2,2,5,5,7],[13,9,6,2,20,4])\n
Run Code Online (Sandbox Code Playgroud)\n

如何编写与 Haskell 函数相当的 Raku 函数span

\n
\n

更新1

\n

根据@chenyf的回答,我开发了以下span子例程(后来的额外更新反映了保持忠实于Haskell函数正逻辑所需的否定谓词)\xe2\x80\xa6spanspan

\n
sub span( &predicate, @numberList )\n  {\n  my &negatedPredicate = { ! &predicate($^x) …
Run Code Online (Sandbox Code Playgroud)

haskell predicate list raku

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

在 Raku 中,当没有值匹配时,例程不会首先返回 Nil 吗?


\n

根据Raku 文档,当没有值匹配时,例程first将返回。但是,为什么(下面)Nil行不打印?say ($result === Nil) ;True

\n
sub MAIN()\n  {\n  my @myNumberList is Array[Int] = [2, 2, 5, 7] ;\n  my $result = @myNumberList.first( {$_ > 10} ) ;\n  say \'$result\' ;\n  say $result ;\n  say $result.WHAT ;\n  say ($result === Nil) ;\n  } # end sub MAIN\n
Run Code Online (Sandbox Code Playgroud)\n

程序输出为\xe2\x80\xa6

\n
$result\n(Any)\n(Any)\nFalse\n
Run Code Online (Sandbox Code Playgroud)\n
\n

更新

\n

我的目标是确定列表或数组是否包含满足给定谓词的一个或多个元素。在下面的示例程序中,当且仅当给定列表或数组包含至少一个满足对\xe2\x80\xafelems的相应调用中给定谓词的元素时,例程返回一个大于 0 的值。grep

\n
sub MAIN()\n  {\n  my $myList = (2, 2, …
Run Code Online (Sandbox Code Playgroud)

boolean list raku

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

在 Raku 中,如何计算素因数分解的正因数之和?


\n

在 Raku 中,给定一个对列表(\xe2\x80\xaf表示 n = 2 \xe2\x80\xaf3 \ xc2\xb7 3 \xe2\x80\xaf2 \xc2\xb7 5 \xe2\x80\xaf1(2 => 3, 3 => 2, 5 => 1, 7 => 4)的质因数分解\xc2\xb7 7 \xe2\x80\xaf4 \xe2\x80\xaf),如何构造\xcf\x83(n) = (\xe2\x80\xaf2 \xe2\x80\xaf0 + 2 \ xe2\x80\xaf1 + 2 \xe2\x80\xaf2 + 2 \xe2\x80\xaf3 \xe2\x80\xaf) \xc2\xb7 (\xe2\x80\xaf3 \ xe2\x80\xaf0 + 3 \xe2\ x80\xaf1 + 3 \xe2\x80\xaf2 \xe2\x80\xaf) \xc2\xb7 (\xe2\x80\xaf5 \xe2\x80\xaf0 + 5 \xe2\x80\xaf1 \xe2\x80\xaf) \xc2\xb7 (\xe2\x80\xaf7 \xe2\x80\xaf0 + 7 \xe2\x80\xaf1 + 7 \xe2\x80\xaf2 + 7 \xe2\x80\xaf3 + …

key-value raku

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

假设给定的语法,为什么 aaaaabb 的解析不成功?


\n

假设语法 G 有以下产生式 \xe2\x80\xa6

\n
    \n
  1. S \xe2\x86\x92 aSb | 一个 | 乙
  2. \n
  3. A \xe2\x86\x92 \xce\xbb | 一个 | 啊| 啊啊
  4. \n
  5. B \xe2\x86\x92 bB | 乙
  6. \n
\n
\n

使用语法 G,字符串aaaaabb的派生为 \xe2\x80\xa6

\n
\n

S \xe2\x87\x92 aSb \xe2\x87\x92 aaSbb \xe2\x87\x92 aaAbb \xe2\x87\x92 aaaaabb

\n
\n
\n

在如下所示的 Raku 语法中,为什么解析字符串aaaaabb不成功?上面的推导不适用吗?

\n
\n
# Goal: language generated by grammar = { a^n b^m : n <= m + 3 }\n# Example string is:\n#   aaaaabb = …
Run Code Online (Sandbox Code Playgroud)

grammar parsing raku

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

如何以编程方式(动态)创建 Raku 语法?


\n

假设语法 G 有两个产生式 \xe2\x80\xa6

\n
    \n
  1. S \xe2\x86\x92 \xce\xbb
  2. \n
  3. S \xe2\x86\x92 aSb
  4. \n
\n
\n

在 Raku 中,如何以编程方式(即在运行时动态地)创建这种语法?

\n

目标是让 Raku 程序在运行时创建 \xe2\x80\x94 \xe2\x80\x94 一个可以静态编写为 \xe2\x80\xa6 的 Raku 语法

\n
grammar Parser\n  {\n  token  TOP  { <S> }\n  token S { '' | 'a' <S> 'b' }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n
\n

鉴于我的问题的第一个答案,我正在尝试动态创建静态写为 \xe2\x80\xa6 的内容

\n
  grammar Parser\n    {\n    token TOP { <S> }\n    } # end grammar Parser\n
Run Code Online (Sandbox Code Playgroud)\n

我试过 \xe2\x80\xa6

\n
  constant Parser := Metamodel::GrammarHOW.new_type( name => 'Parser' …
Run Code Online (Sandbox Code Playgroud)

grammar raku

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

如何根据大小写操作 Raku 字符串的字符?


\n

在 Raku 中,给定的字符串将被分为其各个字符。每个大写字母字符都应括在尖括号内,每个其他字符应括在单引号内。生成的字符串将连接在一起,并用空格分隔。

\n

示例 \xe2\x80\xa6

\n
    \n
  • 如果给定的字符串(不带定界引号)是aSbTc,则结果字符串将为'a' <S> 'b' <T> 'c'\xe2\x80\xaf。
  • \n
  • 如果给定的字符串(不带定界引号)是A BxyC$B,则结果字符串将为<A> ' ' <B> 'x' 'y' <C> '$' <B>\xe2\x80\xaf。
  • \n
  • 如果给定的字符串(不带定界引号)是XY12,则结果字符串将为<X> <Y> '1' '2'\xe2\x80\xaf。
  • \n
\n
\n
sub MAIN ( )\n  {\n  my $myString = 'aSbTc' ;\n  # Desired output:  The string "'a' <S> 'b' <T> 'c'" (sans ").\n  # Uppercase letters in angle brackets, each other character in single quotes.\n  }\n\n …
Run Code Online (Sandbox Code Playgroud)

string letter uppercase raku

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

如何与 Julia 和 Makie 一起创建一个立方体?

以下Julia程序使用Makie创建如下所示的图像,即“带孔的立方体”。然而,我想消除这些孔,并使立方体更接近实际立方体的形状,只有稍微圆角和边缘。我尝试将指数更改为其他值^2,并将其range直接传递给volume!函数,但无济于事。所需立方体类型的示例可以在CodeSandbox 的three-rounded-box图像中找到。

\n
\n
using Makie, GLMakie\nfig = Figure()\nrange = LinRange(-1, 1, 100) # 100-element LinRange{Float64, Int64}\ncube = [ (x.^2 + y.^2 + z.^2) for x = range, y = range, z = range ] # 100\xc3\x97100\xc3\x97100 Array{Float64, 3}\nax = Axis3( fig[1,1], aspect = :data, azimuth = 1.17 * pi, viewmode = :fit, title = "Cube" )\nvolume!( cube, algorithm = :iso, …
Run Code Online (Sandbox Code Playgroud)

julia makie.jl

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

使用 Raku 语法时,可以限制解析时间吗?


\n

以下 Raku 程序定义了一个语法Parser,然后尝试使用它来解析字符串baa。然而,程序执行时间太长。有没有办法限制用于解析的执行时间量,以便解析可以被视为已超出所需的限制并超时\xe2\x80\xaf?

\n
\n
grammar Parser\n  {\n  token  TOP  { <S> }\n  token S { \'\' | <S> <S> | \'a\' <S> \'b\' | <S> \'a\' | \'b\' <S> \'b\' }\n  }\n\nsub MAIN()\n  {\n  say Parser.parse( \'baa\' ).Bool ; # Would like True, False, or Timeout\n  } # end sub MAIN\n
Run Code Online (Sandbox Code Playgroud)\n
\n

另外,是否有计划让Raku实现ANTLR自适应 LL(*)解析?ANTLR 4.11.1 版本的代码生成目标包括 Java、Python 等,但不包括 Raku。

\n
\n

grammar parsing raku

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

如何从 Rust 中的 BigInt 中减去 1?

我希望这个程序314158在执行时编译和打印:

extern crate num;

use num::{BigInt, FromPrimitive, One};

fn main() {
    let p: BigInt = FromPrimitive::from_usize(314159).unwrap();
    let q: BigInt = p - One::one();
    println!("q = {}", q);
} // end main
Run Code Online (Sandbox Code Playgroud)

编译器错误是:

extern crate num;

use num::{BigInt, FromPrimitive, One};

fn main() {
    let p: BigInt = FromPrimitive::from_usize(314159).unwrap();
    let q: BigInt = p - One::one();
    println!("q = {}", q);
} // end main
Run Code Online (Sandbox Code Playgroud)

biginteger rust

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

函数如何将值附加到向量并返回该值?

我正在尝试编写一个rotate_card接受矢量作为输入的函数,将矢量的前元素旋转到后面,然后返回一个包含旋转元素和旋转产生的矢量的对.

#[derive(Debug)]
enum Card {
    Ace,
    King,
    Queen,
    Jack,
}

type Deck = Vec<Card>;

fn rotate_card(deck: &mut Deck) -> (Card, &mut Deck) {
    let top_card = deck.remove(0);
    deck.push(top_card);
    (top_card, deck)
} // end rotate_card

fn main() {
    let mut my_deck: Deck = vec![Card::Ace, Card::King, Card::Queen, Card::Jack];
    let z: (Card, &mut Deck) = rotate_card(&mut my_deck);
    println!("The value of z is: {:?}.", z);
} // end main
Run Code Online (Sandbox Code Playgroud)
error[E0382]: use of moved value: `top_card`
  --> src/main.rs:14:6
   |
13 |     deck.push(top_card);
   | …
Run Code Online (Sandbox Code Playgroud)

move vector rust

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

Rust函数如何修改数组索引的值?

我的目标是让Rust函数f增加一个数组元素x,并增加索引i:

fn main() {
    let mut x: [usize; 3] = [1; 3];
    let mut i: usize = 1;
    f(&mut i, &mut x);
    println!("\nWant i = 2, and i = {}", i);
    println!("\nWant x = [1,2,1], and x = {:?}", x);
} // end main

fn f(i: &mut usize, x: &mut [usize]) {
    x[i] += 1;
    i += 1;
} // end f
Run Code Online (Sandbox Code Playgroud)

编译器报告以下错误:

error[E0277]: the trait bound `&mut usize: std::slice::SliceIndex<[usize]>` is not satisfied
  --> …
Run Code Online (Sandbox Code Playgroud)

parameters function increment rust

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